// ==UserScript==
// @name 圣诞小镇助手(Christmas Town Helper)
// @namespace hardy.ct.helper
// @version 3.0.1
// @description 【Christmas Town Helper@2.3.3】修改而来,增加了PDA支持、国内可用的物品价值查询、简单的汉化,希望为国内TC玩家带来更好的体验
// @author Hardy [2131687] WOOHOO[2687093]
// @match https://www.torn.com/christmas_town.php*
// @grant GM_setClipboard
// @grant GM_addStyle
// @grant unsafeWindow
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_xmlhttpRequest
// @connect wanzixx.stream
// ==/UserScript==
let func = function (GM_addStyle, unsafeWindow, GM_getValue, GM_setValue, GM_xmlhttpRequest) {
'use strict';
/**
* 原始脚本
*/
let version = "2.3.3";
// Thanks to xedx for Dark Mode support
// Thanks Kafia for beep effect
//Thanks to Ahab and Helcostr for the list of words and all the help.
let listofWords = ["elf", "eve", "fir", "ham", "icy", "ivy", "joy", "pie", "toy", "gift", "gold", "list", "love", "nice", "sled", "star", "wish", "wrap", "xmas", "yule", "angel", "bells", "cider", "elves", "goose", "holly", "jesus", "merry", "myrrh", "party", "skate", "visit", "candle", "creche", "cookie", "eggnog", "family", "frosty", "icicle", "joyful", "manger", "season", "spirit", "tinsel", "turkey", "unwrap", "wonder", "winter", "wreath", "charity", "chimney", "festive", "holiday", "krampus", "mittens", "naughty", "package", "pageant", "rejoice", "rudolph", "scrooge", "snowman", "sweater", "tidings", "firewood", "nativity", "reindeer", "shopping", "snowball", "stocking", "toboggan", "trimming", "vacation", "wise men", "workshop", "yuletide", "chestnuts", "christmas", "fruitcake", "greetings", "mince pie", "mistletoe", "ornaments", "snowflake", "tradition", "candy cane", "decoration", "ice skates", "jack frost", "north pole", "nutcracker", "saint nick", "yule log", "card", "jolly", "hope", "scarf", "candy", "sleigh", "parade", "snowy", "wassail", "blizzard", "noel", "partridge", "give", "carols", "tree", "fireplace", "socks", "lights", "kings", "goodwill", "sugarplum", "bonus", "coal", "snow", "happy", "presents", "pinecone"];
let hideDrn = true;
let settings = {"count": 0, "spawn": 0, "speed": 0};
let lastSoundChirp;
let mobile = false;
initiate();
let chirp = new Audio("https://www.torn.com/js/chat/sounds/Chirp_1.mp3");
var hangmanArray = [];
var hangmanCharactersArray = [];
var wordFixerStart = false;
var typeGameStart = false;
var hangmanStart = false;
let typoCD;
window.addEventListener("hashchange", addBox);
let original_fetch = unsafeWindow.fetch;
let new_fetch = async (url, init) => {
let response = await original_fetch(url, init)
let respo = response.clone();
respo.json().then((data) => {
if (url.includes("christmas_town.php")) {
if (init.body) {
var body = JSON.parse(init.body);
}
if (url.includes("q=move") || url.includes("q=initMap")) {
if (url.includes("q=move")) {
if (wordFixerStart || hangmanStart || typeGameStart) {
wordFixerStart = false;
hangmanStart = false;
typeGameStart = false;
clearInterval(typoCD);
stopGame();
}
}
if (data.mapData) {
if (data.mapData.inventory && (settings.spawn === 1 || settings.speed === 1)) {
let obj = {};
obj.modifier = 0;
obj.speedModifier = 0;
for (const ornament of data.mapData.inventory) {
if (ornament.category == "ornaments") {
if (ornament.modifierType == 'itemSpawn') {
obj.modifier += ornament.modifier;
} else if (ornament.modifierType == 'speed') {
obj.speedModifier += ornament.modifier;
} else {
console.debug('CT: Unknown ornament modifier "' + ornament.modifierType + '"');
}
}
}
GM_setValue("spawn", obj.modifier);
GM_setValue("speed", obj.speedModifier);
setTimeout(updateSpawnRate, 3000);
settings.spawn = 0;
settings.speed = 0;
}
if (data.mapData.items) {
let items = data.mapData.items;
if (items.length > 0) {
settings.count = 1;
let itemArray = [];
let chestArray = [];
for (const item of items) {
let image = item.image.url;
let position = item.position;
let info = ctHelperGetInfo(image);
if (info.type == "chests" || info.type == "combinationChest") {
chestArray.push([info.name, position.x, position.y, info.index]);
if (isChecked('sound_notif_helper', 2)) {
beep();
}
} else {
itemArray.push([info.name, position.x, position.y]);
if (isChecked('sound_notif_helper', 2)) {
beep();
}
}
}
chestArray.sort(function (a, b) {
return a[3] - b[3];
});
ctHelperChangeHTML(itemArray, "hardyNearbyItems");
ctHelperChangeHTML(chestArray, "hardyNearbyChests");
} else {
if (settings.count == 1) {
document.querySelector(".hardyNearbyChests").innerHTML = '
';
document.querySelector(".hardyNearbyItems").innerHTML = '';
settings.count = 0;
}
}
}
if (data.mapData.users) {
let users = data.mapData.users;
if (users.length > 0) {
checkForNPC();
}
}
if (data.mapData && data.mapData.trigger && data.mapData.trigger.item) {
let trigger = data.mapData.trigger;
settings.spawn = 1;
settings.speed = 1;
if (trigger.message.includes("You find")) {
let itemUrl = trigger.item.image.url;
let reg = /\/images\/items\/([0-9]+)\/large\.png/g;
if (reg.test(itemUrl)) {
let itemId = itemUrl.split("/")[3];
let savedData = getSaveData();
if (savedData.items[itemId]) {
savedData.items[itemId] += 1;
} else {
savedData.items[itemId] = 1;
}
localStorage.setItem("ctHelperFound", JSON.stringify(savedData));
}
}
}
}
} else if (url.includes("q=miniGameAction")) {
if (body && body.action && body.action === "complete" && typeGameStart) {
typeGameStart = false;
clearInterval(typoCD);
stopGame();
}
if (wordFixerStart) {
if (data.finished) {
stopGame();
wordFixerStart = false;
} else {
if (data.progress && data.progress.word) {
wordSolver(data.progress.word);
}
}
} else if (hangmanStart) {
if (data.mistakes === 6 || data.message.startsWith("Congratulations")) {
hangmanStart = false;
stopGame();
} else {
hangmanCharactersArray.push(body.result.character.toUpperCase());
if (data.positions.length === 0) {
let array = [];
let letter = body.result.character.toUpperCase();
for (const word of hangmanArray) {
if (word.indexOf(letter) === -1) {
array.push(word);
}
}
hangmanArray = array;
hangmanMain();
} else {
let array = [];
let letter = body.result.character.toUpperCase();
let positions = data.positions;
let length = positions.length;
for (const word of hangmanArray) {
var index = 0;
for (const position of positions) {
if (word[position] === letter) {
index += 1;
}
}
if (index === length && countLetter(word, letter) == length) {
array.push(word);
}
}
hangmanArray = getUnique(array);
hangmanMain();
}
}
} else if (typeGameStart) {
console.log("nothing");
}
if (body && body.action && body.action === "start") {
if (body.gameType) {
let gameType = body.gameType;
if (gameType == "gameWordFixer" && isChecked('word_fixer_helper', 2)) {
wordFixerStart = true;
startGame("Word Fixer");
wordSolver(data.progress.word);
} else if (gameType === "gameHangman" && isChecked('hangman_helper', 2)) {
hangmanStart = true;
startGame("Hangman");
hangmanArray = [];
hangmanCharactersArray = [];
let words = data.progress.words;
if (words.length > 1) {
hangmanStartingFunction(words[0], words[1]);
} else {
hangmanStartingFunction(words[0], 0);
}
} else if (gameType === "gameTypocalypse" && isChecked('typocalypsehelper', 2)) {
if (!typeGameStart) {
typeGameStart = true;
startGame("Typocalypse Helper");
document.querySelector(".hardyGameBoxContent").addEventListener("click", (e) => {
let target = e.target;
if (target.className === "hardyCTTypoAnswer") {
let input = document.querySelector("div[class^='game'] div[class^='board'] input");
if (input) {
input.value = target.getAttribute("hardy");//the answer that has to be typed
let event = new Event('input', {bubbles: true});
let tracker = input._valueTracker;
if (tracker) {
tracker.setValue('');
}
input.dispatchEvent(event);
}
}
});
startTypo();
}
}
}
}
}
if (data.prizes) {
settings.spawn = 1;
settings.speed = 1;
if (data.prizes.length > 0) {
let savedData = getSaveData();
for (const prize of data.prizes) {
if (prize.category === "tornItems") {
let itemId = prize.type;
if (savedData.items[itemId]) {
savedData.items[itemId] += 1;
} else {
savedData.items[itemId] = 1;
}
}
}
localStorage.setItem("ctHelperFound", JSON.stringify(savedData));
}
}
if (data.mapData && data.mapData.cellEvent && data.mapData.cellEvent.prizes) {
let prizes = data.mapData.cellEvent.prizes;
settings.spawn = 1;
settings.speed = 1;
if (prizes.length > 0) {
let savedData = getSaveData();
for (const prize of prizes) {
if (prize.category === "tornItems") {
let itemId = prize.type;
if (savedData.items[itemId]) {
savedData.items[itemId] += 1;
} else {
savedData.items[itemId] = 1;
}
}
}
localStorage.setItem("ctHelperFound", JSON.stringify(savedData));
}
}
}
});
return response;
};
unsafeWindow.fetch = new_fetch;
window.fetch = new_fetch;
fetch = new_fetch;
function addBox() {
if (!document.querySelector(".hardyCTBox")) {
if (document.querySelector("#christmastownroot div[class^='appCTContainer']")) {
let newBox = document.createElement("div");
let pcHTML =
`Christmas Town Helper
`;
let mobileHTML = 'Christmas Town Helper
';
if (mobile) {
newBox.innerHTML = mobileHTML
} else {
newBox.innerHTML = pcHTML;
}
newBox.className = 'hardyCTBox';
let doc = document.querySelector("#christmastownroot div[class^='appCTContainer']");
doc.insertBefore(newBox, doc.firstChild.nextSibling);
if (timedFunction) {
clearInterval(timedFunction);
}
settings.spawn = 1;
settings.speed = 1;
} else {
var timedFunction = setInterval(addBox, 1000);
}
}
let pageUrl = window.location.href;
if (pageUrl.includes("mapeditor") || pageUrl.includes("parametereditor") || pageUrl.includes("mymaps")) {
document.querySelector(".hardyCTBox").style.display = "none";
let node = document.querySelector(".hardyCTBox2");
if (node) {
node.style.display = "none";
}
} else if (pageUrl.includes("cthelper")) {
document.querySelector(".hardyCTBox").style.display = "none";
createTable();
let node = document.querySelector(".hardyCTBox2");
if (node) {
node.style.display = "block";
}
console.log(node)
} else {
let box = document.querySelector(".hardyCTBox")
if (box) {
box.style.display = "block";
}
let node = document.querySelector(".hardyCTBox2");
if (node) {
node.style.display = "none";
}
}
hideDoctorn();
}
function checkForNPC() {
let npcList = document.querySelectorAll(".ct-user.npc");
if (npcList.length > 0) {
for (const npc of npcList) {
if (npc.querySelector("svg").getAttribute("fill").toUpperCase() === "#FA5B27") {
npc.setAttribute("npcType", "santa");
} else {
npc.setAttribute("npcType", "other");
}
}
}
}
function ctHelperGetInfo(link) {
let obj = {};
obj.type = "item";
let array = ["/keys/", "/chests/", "/combinationChest/"];
for (const category of array) {
if (link.indexOf(category) !== -1) {
obj.type = category.replace(/\//g, "");
}
}
if (obj.type === "keys") {
if (link.includes("bronze")) {
obj.name = "铜钥匙";
} else if (link.includes("gold")) {
obj.name = "金钥匙";
} else if (link.includes("silver")) {
obj.name = "银钥匙";
}
} else if (obj.type == "chests") {
if (link.includes("1.gif")) {
obj.name = "金宝箱";
obj.index = 0;
} else if (link.includes("2.gif")) {
obj.name = "银宝箱";
obj.index = 1;
} else if (link.includes("3.gif")) {
obj.name = "铜宝箱";
obj.index = 3;
}
} else if (obj.type == "combinationChest") {
obj.name = "密码箱";
obj.index = 2;
} else if (obj.type == "item") {
obj.name = "神秘礼物";
}
return obj;
}
function ctHelperChangeHTML(array, selector) {
let length = array.length;
if (length > 0) {
let newArray = [];
for (const element of array) {
newArray.push(`${element[0]} @ ${element[1]}, ${element[2]}
`);
}
if (selector == "hardyNearbyItems") {
document.querySelector("." + selector).innerHTML = `${newArray.join("")}
`;
} else {
document.querySelector("." + selector).innerHTML = `${newArray.join("")}
`;
}
} else {
if (selector == "hardyNearbyItems") {
document.querySelector("." + selector).innerHTML = ``;
} else {
document.querySelector("." + selector).innerHTML = ``;
}
}
}
function applyCSS() {
if (isChecked('santa_clawz_helper', 2)) {
GM_addStyle(`[class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAADAFBMVEUAAADuy'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAADAFBMVEUAAADu4'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAADAFBMVEUAAADms'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAADAFBMVEUAAADjr'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAADAFBMVEUAAADj4'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAADAFBMVEUAAADSx'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAADAFBMVEUAAADPy'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAADAFBMVEUAAADOx'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAADAFBMVEUAAADLx'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAADAFBMVEUAAADKq'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAADAFBMVEUAAADCS'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAADAFBMVEUAAAD03'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAADAFBMVEUAAACun'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAADAFBMVEUAAACnk'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAADAFBMVEUAAACmg'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAADAFBMVEUAAACSe'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAADAFBMVEUAAACGL'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAADAFBMVEUAAAC1U'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAADAFBMVEUAAAC0w'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAADAFBMVEUAAAByX'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAADAFBMVEUAAABsX'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAADAFBMVEUAAAB7g'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAACzVBMVEUAAACTM'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC9FBMVEUAAADlw'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC9FBMVEUAAAD67'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC9FBMVEUAAACnR'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC91BMVEUAAADy2'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC91BMVEUAAADrw'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC91BMVEUAAADlt'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC91BMVEUAAADl5'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC91BMVEUAAADgp'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC91BMVEUAAADgo'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC91BMVEUAAADak'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC91BMVEUAAADKx'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC91BMVEUAAADJn'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC91BMVEUAAAD9+'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC91BMVEUAAAD57'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC91BMVEUAAAD16'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC91BMVEUAAAClR'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC91BMVEUAAACdN'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC91BMVEUAAAC0R'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC91BMVEUAAABxW'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC8VBMVEUAAADKe'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC8VBMVEUAAADKc'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC7lBMVEUAAACXN'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC/VBMVEUAAADy1'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC/VBMVEUAAADw7'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC/VBMVEUAAADvz'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC/VBMVEUAAADu6'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC/VBMVEUAAADsx'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC/VBMVEUAAADrx'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC/VBMVEUAAADr1'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC/VBMVEUAAADpv'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC/VBMVEUAAADnt'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC/VBMVEUAAADe6'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC/VBMVEUAAADc2'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC/VBMVEUAAADVg'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC/VBMVEUAAADOv'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC/VBMVEUAAADLh'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC/VBMVEUAAADFV'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC/VBMVEUAAADEx'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC/VBMVEUAAAD68'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC/VBMVEUAAAD28'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC/VBMVEUAAACup'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC/VBMVEUAAACQN'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC/VBMVEUAAAC0p'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC/VBMVEUAAAC0l'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC/VBMVEUAAABsX'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC/VBMVEUAAABpe'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC/VBMVEUAAAB2V'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC/VBMVEUAAAB/e'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC+lBMVEUAAADy1'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC+lBMVEUAAADt5'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC+lBMVEUAAADj4'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC+lBMVEUAAADf0'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC+lBMVEUAAADcr'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC+lBMVEUAAADal'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC+lBMVEUAAADLv'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC+lBMVEUAAADJx'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC+lBMVEUAAAD9+'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC+lBMVEUAAACnl'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC+lBMVEUAAACWM'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC+lBMVEUAAACMh'], [class^='cell'] img[src^='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC+lBMVEUAAAC+Y'] {opacity: .2;}`);
}
if (isChecked('snowball_shooter_helper', 2)) {
GM_addStyle(`[class^='moving-block'] [style*='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABHwAAAB5'], [class^='moving-block'] [style*='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABGAAAABu'], [class^='moving-block'] [style*='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABG4AAABm'], [class^='moving-block'] [style*='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABFIAAAB5'], [class^='moving-block'] [style*='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAwIAAAB6'], [class^='moving-block'] [style*='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA9QAAABu'], [class^='moving-block'] [style*='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA44AAAB4'], [class^='moving-block'] [style*='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA0gAAABm'], [class^='moving-block'] [style*='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA+IAAABm'] {opacity: .2;}`);
}
if (isChecked('christmas_wreath_helper', 2)) {
GM_addStyle(`img[alt='christmas wreath'] {display: none;}`);
}
if (isChecked("accessibility_helper", 2)) {
GM_addStyle('@keyframes pulse {0% {box-shadow: 0 0 0 60px;}50% {box-shadow: 0 0 0 60px;}100% {box-shadow: 0 0 0 60px;}}');
if (isChecked("santa_helper", 2)) {
GM_addStyle(`div[npcType="santa"] { border-radius: 50%; color: #a80a0a6e; animation: pulse 2s ease-out infinite; }`);
}
if (isChecked("item_helper", 2)) {
GM_addStyle(`.items-layer .ct-item img { color: rgba(145, 135, 77, .66); border-radius: 50% ;animation: pulse 2s ease-in-out infinite; }`);
}
if (isChecked("npc_helper", 2)) {
GM_addStyle(`div[npcType="other"] { border-radius: 50%; color: #0051ff87; animation: pulse 2s ease-out infinite;}`);
}
} else {
GM_addStyle('@keyframes pulse {0% {box-shadow: 0 0 0 0px;}50% {box-shadow: 0 0 0 60px;}100% {box-shadow: 0 0 0 0px;}}');
if (isChecked("santa_helper", 2)) {
GM_addStyle(`div[npcType="santa"] { border-radius: 50%; color: #ff00006e; animation: pulse 2s ease-out infinite; }`);
}
if (isChecked("item_helper", 2)) {
GM_addStyle(`.items-layer .ct-item img { color:rgba(244, 226, 130, .66); border-radius: 50% ;animation: pulse 2s ease-in-out infinite; }`);
}
if (isChecked("npc_helper", 2)) {
GM_addStyle(`div[npcType="other"] { border-radius: 50%; color: #0051ff87; animation: pulse 2s ease-out infinite;}`);
}
}
}
function sortWord(word) {
let array = word.toUpperCase().split("");
array.sort();
return array.join("");
}
function wordSolver(jumbled) {
var wordSolution = 'whereiscrimes2.0';
for (const word of listofWords) {
if (sortWord(word) === sortWord(jumbled)) {
wordSolution = word.toUpperCase();
}
}
if (wordSolution === 'whereiscrimes2.0') {
updateGame('');
} else {
updateGame(``);
}
}
function getPrices() {
var last_update = GM_getValue('last');
if (last_update === null || typeof last_update == "undefined") {
last_update = 0;
}
if (Date.now() / 1000 - last_update > 14400) {
GM_xmlhttpRequest({
method: 'GET',
timeout: 20000,
// 域名替换
url: 'https://sguc.wanzixx.stream/macros/s/AKfycbyRfg1Cx2Jm3IuCWASUu8czKeP3wm5jKsie4T4bxwZHzXTmPbaw4ybPRA/exec?key=getItems',
onload: function (e) {
try {
let data = JSON.parse(e.responseText);
if (data.items) {
let items = data.items;
let obj = {};
obj.items = {};
for (var pp = 0; pp < items.length; pp++) {
let id = items[pp][0];
obj.items[id] = {};
obj.items[id].name = items[pp][1];
obj.items[id].value = items[pp][2];
}
localStorage.setItem('ctHelperItemInfo', JSON.stringify(obj));
GM_setValue('last', Date.now() / 1000);
console.log("Price data received");
}
} catch (error) {
console.log("Error updating prices: " + error.message);
}
}
});
}
}
function getSaveData() {
let savedFinds = localStorage.getItem("ctHelperFound");
var saved;
if (typeof savedFinds == "undefined" || savedFinds === null) {
saved = {};
saved.items = {};
} else {
saved = JSON.parse(savedFinds);
}
return saved;
}
function createTable() {
if (!document.querySelector(".hardyCTBox2")) {
let node = document.createElement("div");
node.className = "hardyCTBox2";
document.querySelector(".content-wrapper").appendChild(node);
document.querySelector(".hardyCTBox2").addEventListener("click", (e) => {
if (e.target.id === "hardyctHelperSave") {
let checkboxes = document.querySelectorAll(".hardyCTHelperCheckbox");
for (const checkbox of checkboxes) {
if (checkbox.checked) {
GM_setValue(checkbox.id, "yes");
} else {
GM_setValue(checkbox.id, "no");
}
}
location.reload();
} else if (e.target.id == "hardyctHelperdelete") {
document.querySelector(".hardyCTtextBox").innerHTML = 'Are you sure you want to delete the finds data?
';
} else if (e.target.id == "hardyCTConfirmDelete") {
let obj = {"items": {}};
localStorage.setItem("ctHelperFound", JSON.stringify(obj));
document.querySelector(".hardyCTtextBox").innerHTML = '