您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds a Move Planner button to each match. If it's a waiting game, the moveplanner loads the map. Completed games don't get a button.
// ==UserScript== // @name AWBW Move Planner Button in Game List // @namespace https://awbw.amarriner.com/ // @version 0.1 // @description Adds a Move Planner button to each match. If it's a waiting game, the moveplanner loads the map. Completed games don't get a button. // @author Vincent // @license MIT // @match https://awbw.amarriner.com/yourgames.php // @match https://awbw.amarriner.com/yourturn.php // @match https://awbw.amarriner.com/following.php* // @match https://awbw.amarriner.com/profile.php* // @match https://awbw.amarriner.com/gamescurrent_all.php* // @match https://awbw.amarriner.com/gameswait.php // @icon https://awbw.amarriner.com/terrain/moveplanner.gif // @grant none // ==/UserScript== (function() { 'use strict'; function createMovePlannerButton(plannerUrl, tooltipText) { const gameInfoTd = this; if (gameInfoTd.querySelector('.move-planner-btn')) return; // Prevent duplicates gameInfoTd.style.position = 'relative'; const btn = document.createElement('a'); btn.href = plannerUrl; btn.target = '_blank'; btn.title = tooltipText; btn.className = 'move-planner-btn'; btn.style.position = 'absolute'; btn.style.bottom = '6px'; btn.style.right = '6px'; btn.style.zIndex = '10'; btn.style.display = 'inline-block'; btn.style.padding = '2px'; btn.style.border = '1px solid #888'; btn.style.backgroundColor = '#EEE'; const icon = document.createElement('img'); icon.src = 'https://awbw.amarriner.com/terrain/moveplanner.gif'; icon.alt = 'Move Planner'; icon.style.width = '24px'; icon.style.height = '24px'; icon.style.cursor = 'pointer'; icon.style.imageRendering = 'pixelated'; btn.appendChild(icon); gameInfoTd.appendChild(btn); } function getGameStateFromColor(td) { const bg = getComputedStyle(td).backgroundColor; if (bg === 'rgb(193, 255, 208)') return 'waiting'; if (bg === 'rgb(209, 250, 255)') return 'current'; return 'completed'; } document.querySelectorAll('tr').forEach(row => { const tds = row.querySelectorAll('td.small'); if (tds.length < 3) return; const gameInfoTd = tds[0]; const mapInfoTd = tds[1]; const playerInfoTd = tds[2]; const gameLinks = gameInfoTd.querySelectorAll('a[href*="game.php?games_id="]'); // Use game title cell to detect game state const titleTd = row.querySelector('td.limits'); if (!titleTd) return; const gameState = getGameStateFromColor(titleTd); if (gameState === 'completed') return; let plannerUrl = null; let tooltipText = 'Move Planner'; if (gameState === 'waiting') { const mapIdMatch = mapInfoTd.innerHTML.match(/maps_id=(\d+)/); if (mapIdMatch) { plannerUrl = `https://awbw.amarriner.com/moveplanner.php?maps_id=${mapIdMatch[1]}`; tooltipText = 'Move Planner (Map)'; } } else if (gameState === 'current') { const gameIdMatch = gameLinks[0].href.match(/games_id=(\d+)/); if (gameIdMatch) { plannerUrl = `https://awbw.amarriner.com/moveplanner.php?games_id=${gameIdMatch[1]}`; } } if (!plannerUrl) return; createMovePlannerButton.call(gameInfoTd, plannerUrl, tooltipText); }); })();