您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds hint buttons to Faerie Crossword clues
// ==UserScript== // @name Seshatia's Help // @description Adds hint buttons to Faerie Crossword clues // @version 2025.06.26 // @license GNU GPLv3 // @match https://www.neopets.com/games/crossword/* // @author Posterboy // @namespace https://www.youtube.com/@Neo_PosterBoy // @icon https://images.neopets.com/new_shopkeepers/t_1900.gif // @grant none // ==/UserScript== (async function () { 'use strict'; console.log("Neopets Crossword 'Hint' version is running..."); // ========================= // STYLING // ========================= function createHintButton(clueElement) { const button = document.createElement('button'); button.textContent = 'Hint'; button.className = 'hint-button'; button.style.marginLeft = '8px'; button.style.backgroundColor = '#ffd700'; button.style.border = '1px solid #888'; button.addEventListener('click', () => { const clueText = clueElement.innerText.trim().replace(/^\d+\.\s*/, '').toLowerCase(); const answer = clueMap.get(clueText); const onclickCode = clueElement.getAttribute('onclick'); const match = onclickCode?.match(/set_clue\((\d+),\s*(\d+),\s*(\d+),\s*(\d+)\)/); if (match) { const [_, row, col, dir, len] = match.map(Number); if (typeof set_clue === 'function') { set_clue(row, col, dir, len); } } if (!answer) { console.warn("Answer not found for clue:", clueText); return; } const xWordInput = document.querySelector('input[name="x_word"]'); if (xWordInput) { xWordInput.value = answer; } }); return button; } // ========================= // SCRIPTING // ========================= let data; const clueMap = new Map(); try { const response = await fetch('https://raw.githubusercontent.com/unoriginality786/NeopetsFaerieCrosswordJSON/refs/heads/main/QuestionsAnswers'); data = await response.json(); data.clues.forEach(entry => { const normalizedClue = (entry.clue || entry.question || "").toLowerCase().trim(); if (normalizedClue) { clueMap.set(normalizedClue, entry.answer); } }); } catch (error) { console.error("Failed to fetch crossword data:", error); return; } function injectHintButtons() { const clueLinks = document.querySelectorAll('a[href="javascript:;"]'); clueLinks.forEach(clue => { if (!clue.getAttribute('onclick')?.includes('set_clue')) return; if (clue.nextSibling && clue.nextSibling.classList?.contains('hint-button')) return; const hintButton = createHintButton(clue); clue.parentNode.insertBefore(hintButton, clue.nextSibling); const lineBreak = document.createElement('br'); clue.parentNode.insertBefore(lineBreak, hintButton.nextSibling); }); } // ========================= // EVENT HANDLERS // ========================= const observer = new MutationObserver(() => { injectHintButtons(); }); observer.observe(document.body, { childList: true, subtree: true }); window.addEventListener('load', () => { injectHintButtons(); }); })();