您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
对Replay Scouter界面进行汉化和增强。
// ==UserScript== // @name Pokémon Showdown Replay Scouter 汉化与增强 // @namespace http://tampermonkey.net/ // @version 1.2.1 // @description 对Replay Scouter界面进行汉化和增强。 // @author AnsonIsTheBest // @match https://fulllifegames.com/Tools/ReplayScouter/* // @grant GM_addStyle // @grant GM_log // @license WTFPL // ==/UserScript== (function() { 'use strict'; const keyElementSelector = 'textarea'; // <--- 这是脚本启动的关键,如果无效请修改这里 const checkPageReady = setInterval(() => { const keyElement = document.querySelector(keyElementSelector); if (keyElement) { clearInterval(checkPageReady); initializeEnhancements(keyElement); } }, 500); setTimeout(() => clearInterval(checkPageReady), 20000); function initializeEnhancements(replayTextBox) { GM_log('Replay Scouter 增强脚本已启动!'); const translations = { 'Replays': '回放链接', 'Names': '用户名', 'Date Filters': '按日期筛选', 'Tiers': '分级', 'Format': '格式', 'Opponents': '对手名字', 'Grouped': '按组分类', 'Visual Representation': '可视化展示', 'Optional: User Definition (e.g. \'fulllifegames\' or \'fulllifegames,fulllifegamer\')': '(可选项)用户名称(例:\'fulllifegames\' 或 \'fulllifegames,AnsonIsTheBest\'', 'Optional: List of replays (separate by new line)': '(可选项)在此处粘贴回放链接,每行一个', 'Enter the Showdown Usernames':'输入ps玩家名', 'Optional: Search for a Tier Definition (e.g. \'[Gen 9] OU\' or add one with \'gen9ou\')':'(可选项)分级名称(例:\'[Gen 9] OU\'或输入\'gen9ou\'来搜索(不怎么可靠,建议使用下拉框以防万一))', 'Enter the Showdown Tiers':'输入分级名字', 'Optional: Opponent Definition (e.g. \'patlop2307\' or \'patlop2307,Fantos13\')':'(可选项)对手名称(例:\'nh7\'或\'nh7,cscl\',请删除名字中的中文字符,例:xieeee左手->xieeee)',//sry I have to use the short names here 'Enter the Opponent\'s Showdown Usernames':'输入对手名字', //'Enter Replays':'输入回放链接', //'Select if the replays should be grouped by team':'选择是否要将回放按组分类', //TODO: Those two will smh make the button or the input box disappear 'List Representation':'按列表展示', 'Raw Representation':'展示原始数据', 'Text Representation':'按文本展示', 'Table Representation':'按表格展示', 'Pokémon Statistics (Table)':'宝可梦使用数据(表格)', 'Combos Statistics (Table)':'组合使用数据(表格)', 'Combos Statistics With Leads (Table)':'带首发的组合使用数据(表格)', 'Graph Statistics':'使用数据图表', 'Item Statistics (Table)':'道具使用数据(表格)', 'Item by Pokémon Statistics (Table)':'按照宝可梦数据排的道具数据(表格)', 'Lead Statistics (Table)':'首发数据(表格)', 'Move Statistics (Table)':'技能数据(表格)', 'Move by Pokémon Statistics (Table)':'按宝可梦数据排的技能数据(表格)', 'Search Queries':'关键词', 'As an example, you can search for specific Pokémon, Moves, Items, Formats or even the Players (negate with a \'-\' in front)':'举例来说,你可以搜索具体的宝可梦,招式,分级甚至是玩家(在前面加\'-\'以排除)', 'Enter Search Queries for the content down below':'输入关键词', 'Enter a Minimum and Maximum Date':'输入一个最小和最大日期', 'Sort Options':'筛选选项', 'Choose a tag...':'选择一个排序方法', 'Date (Asc)':'日期(升序)', 'Date (Desc)':'日期(降序)', 'Format (Asc)':'分级(升序)', 'Format (Desc)':'分级(降序)', 'Number of Replays (Asc)':'回放数量(升序)', 'Number of Replays (Desc)':'回放数量(降序)', 'Player (Asc)':'玩家(升序)', 'Player (Desc)':'玩家(降序)', 'Rating (Asc)':'分数(升序)', 'Rating (Desc)':'分数(降序)', 'Views (Asc)':'观看数量(升序)', 'Views (Desc)':'观看数量(降序)', 'Please provide at a minimum a name, a tier or a list of replays (note that private replays will be cached and might appear on the public search).':'请至少提供一个玩家名称、一个分级或一个回放列表(请注意,私人回放将被缓存并可能出现在公共搜索中)。', }; function translatePage() { document.querySelectorAll('body, body *').forEach(element => { const textToTranslate = element.textContent.trim(); if (translations[textToTranslate]) { element.textContent = translations[textToTranslate]; } if (element.placeholder && translations[element.placeholder]) { element.placeholder = translations[element.placeholder]; } }); GM_log('页面已汉化。'); } translatePage(); GM_addStyle(` .replay-scouter-highlight { border: 2px solid #28a745 !important; box-shadow: 0 0 10px rgba(40, 167, 69, 0.5) !important; transition: all 0.3s ease-in-out; } `); async function checkClipboardAndHighlight() { try { const clipboardText = await navigator.clipboard.readText(); if (clipboardText.includes('replay.pokemonshowdown.com')) { replayTextBox.classList.add('replay-scouter-highlight'); } else { replayTextBox.classList.remove('replay-scouter-highlight'); } } catch (err) { replayTextBox.classList.remove('replay-scouter-highlight'); // GM_log('无法读取剪贴板'); // 这一行可以取消注释用于调试 } } window.addEventListener('focus', checkClipboardAndHighlight); checkClipboardAndHighlight(); } })();