您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
修改 等级,金币,属性值,转生点数。
// ==UserScript== // @author Hunlongyu // @name 『游戏助手』dusays.com // @namespace https://github.com/Hunlongyu // @icon https://i.loli.net/2019/04/22/5cbd720718fdb.png // @description 修改 等级,金币,属性值,转生点数。 // @version 0.1.0 // @match https://game.dusays.com/* // @grant GM_addStyle // @grant GM_getResourceText // @run-at document-end // @require https://cdn.jsdelivr.net/npm/[email protected]/base64.min.js // @resource PURE https://cdn.jsdelivr.net/npm/[email protected]/build/pure-min.css // @supportURL https://gist.github.com/Hunlongyu/743151a1480751ca54b5e93da76cf6ee // ==/UserScript== (function() { 'use strict' function getLocalStorageSD() { const sd = localStorage.getItem("_sd"); if (sd) return sd; const data = ` ZXlKd2JHRjVaWEpGY1hWcGNHMWxiblFpT25zaWNHeGhlV1Z5VjJWaGNHOXVJanA3SW14Mklqb3hMQ0pwZEdWdFZIbHdaU0k2SW5kbFlYQnZiaUlzSW5GMVlXeHBkSGtpT25zaWJ tRnRaU0k2SXVlZ3RPYVhweUlzSW5GMVlXeHBkSGxEYjJWbVptbGphV1Z1ZENJNk1DNDNMQ0p3Y205aVlXSnBiR2wwZVNJNklqQXVNalVpTENKamIyeHZjaUk2SWlOaE1XRXhZVEVpTENKbGVIUnlZVVZ1 ZEhKNVRuVnRJam94ZlN3aWRIbHdaU0k2ZXlKdVlXMWxJam9pNXBhdzVvbUw1NSt0NVltUklpd2laR1Z6SWpvaTVwYXc1b21MNkkrYzZiaWg1TDIvNTVTbzU1cUU1NSt0NVltUklpd2lhV052YmxOeVl5S TZJaTR2YVdOdmJuTXZWMTlUZDI5eVpEQXdNUzV3Ym1jaUxDSmxiblJ5ZVNJNlczc2lkbUZzUTI5bFptWnBZMmxsYm5RaU9qQXVPU3dpZG1Gc2RXVWlPakVzSW5Ob2IzZFdZV3dpT2lJck1TSXNJblI1Y0d VaU9pSkJWRXNpTENKdVlXMWxJam9pNXBTNzVZZTc1WXFiSW4xZGZTd2laWGgwY21GRmJuUnllU0k2VzNzaWRtRnNkV1VpT2pFc0luTm9iM2RXWVd3aU9pSXJNU0lzSW5SNWNHVWlPaUpCVkVzaUxDSnVZ VzFsSWpvaTVwUzc1WWU3NVlxYkluMWRmU3dpY0d4aGVXVnlRWEp0YjNJaU9uc2liSFlpT2pFc0ltbDBaVzFVZVhCbElqb2lZWEp0YjNJaUxDSnhkV0ZzYVhSNUlqcDdJbTVoYldVaU9pTG5vTFRtbDZja UxDSnhkV0ZzYVhSNVEyOWxabVpwWTJsbGJuUWlPakF1Tnl3aWNISnZZbUZpYVd4cGRIa2lPaUl3TGpJMUlpd2lZMjlzYjNJaU9pSWpZVEZoTVdFeElpd2laWGgwY21GRmJuUnllVTUxYlNJNk1YMHNJblI 1Y0dVaU9uc2libUZ0WlNJNkl1YVdzT2FKaStXNGcraWhveUlzSW1SbGN5STZJdWFXc09hSmkraVBuT200b2VlcHYrZWFoT2FacnVtQW11aWhvK2VKcVNJc0ltbGpiMjVUY21NaU9pSXVMMmxqYjI1ekwwR mZRVE11Y0c1bklpd2laVzUwY25raU9sdDdJblpoYkVOdlpXWm1hV05wWlc1MElqb3dMamtzSW5aaGJIVmxJam94TENKemFHOTNWbUZzSWpvaUt6RWlMQ0owZVhCbElqb2lSRVZHSWl3aWJtRnRaU0k2SX VtWXN1VytvZVdLbXlKOVhYMHNJbVY0ZEhKaFJXNTBjbmtpT2x0N0luUjVjR1VpT2lKSVVDSXNJblpoYkhWbElqb3hNQ3dpYzJodmQxWmhiQ0k2SWlzeE1DSXNJbTVoYldVaU9pTG5sSi9sa2IzbGdMd2l mVjE5TENKd2JHRjVaWEpTYVc1bklqcDdJbXgySWpveExDSnBkR1Z0Vkhsd1pTSTZJbkpwYm1jaUxDSnhkV0ZzYVhSNUlqcDdJbTVoYldVaU9pTG5vTFRtbDZjaUxDSnhkV0ZzYVhSNVEyOWxabVpwWTJs bGJuUWlPakF1Tnl3aWNISnZZbUZpYVd4cGRIa2lPaUl3TGpJMUlpd2lZMjlzYjNJaU9pSWpZVEZoTVdFeElpd2laWGgwY21GRmJuUnllVTUxYlNJNk1YMHNJblI1Y0dVaU9uc2libUZ0WlNJNkl1YVdzT 2FKaSthTWgrZU9yeUlzSW1SbGN5STZJdVM0Z09TNHF1YVpydW1BbXVlYWhPYU1oK2VPcnlJc0ltbGpiMjVUY21NaU9pSXVMMmxqYjI1ekwwRmpYekV3TG5CdVp5SXNJbVZ1ZEhKNUlqcGJleUoyWVd4RG IyVm1abWxqYVdWdWRDSTZNQzQ1TENKMllXeDFaU0k2TWpBc0luTm9iM2RXWVd3aU9pSXJNakFpTENKMGVYQmxJam9pU0ZBaUxDSnVZVzFsSWpvaTU1U2Y1Wkc5NVlDOEluMWRmU3dpWlhoMGNtRkZiblJ 5ZVNJNlczc2lkSGx3WlNJNklrTlNTVlFpTENKMllXeDFaU0k2TVRBc0luTm9iM2RXWVd3aU9pSXJNVEFsSWl3aWJtRnRaU0k2SXVhYXRPV0h1K2VPaHlKOVhYMHNJbkJzWVhsbGNrNWxZMnNpT25zaWJI WWlPakVzSW1sMFpXMVVlWEJsSWpvaWJtVmpheUlzSW5GMVlXeHBkSGtpT25zaWJtRnRaU0k2SXVlZ3RPYVhweUlzSW5GMVlXeHBkSGxEYjJWbVptbGphV1Z1ZENJNk1DNDNMQ0p3Y205aVlXSnBiR2wwZ VNJNklqQXVNalVpTENKamIyeHZjaUk2SWlOaE1XRXhZVEVpTENKbGVIUnlZVVZ1ZEhKNVRuVnRJam94ZlN3aWRIbHdaU0k2ZXlKdVlXMWxJam9pNXBhdzVvbUw2YUc1NVoyZ0lpd2laR1Z6SWpvaTVMaU E1TGlxNXBtdTZZQ2E1NXFFNW95SDU0NnZJaXdpYVdOdmJsTnlZeUk2SWk0dmFXTnZibk12UVdOZk15NXdibWNpTENKbGJuUnllU0k2VzNzaWRtRnNRMjlsWm1acFkybGxiblFpT2pBdU9Td2lkbUZzZFd VaU9qSXdMQ0p6YUc5M1ZtRnNJam9pS3pJd0lpd2lkSGx3WlNJNklraFFJaXdpYm1GdFpTSTZJdWVVbitXUnZlV0F2Q0o5WFgwc0ltVjRkSEpoUlc1MGNua2lPbHQ3SW5SNWNHVWlPaUpEVWtsVUlpd2lk bUZzZFdVaU9qRXdMQ0p6YUc5M1ZtRnNJam9pS3pFd0pTSXNJbTVoYldVaU9pTG1tclRsaDd2bmpvY2lmVjE5ZlN3aVltRmphM0JoWTJ0RmNYVnBjRzFsYm5RaU9sdDdmU3g3ZlN4N2ZTeDdmU3g3ZlN4N 2ZTeDdmU3g3ZlN4N2ZTeDdmU3g3ZlN4N2ZTeDdmU3g3ZlN4N2ZTeDdmU3g3ZlN4N2ZTeDdmU3g3ZlN4N2ZTeDdmU3g3ZlN4N2ZTeDdmU3g3ZlN4N2ZTeDdmU3g3ZlN4N2ZTeDdmU3g3ZlYwc0lteDJJam 94TENKbmIyeGtJam93TENKbGJtUnNaWE56VEhZaU9qQXNJbkpCSWpwN0lraFFJam93TENKQlZFc2lPakFzSWtOU1NWUWlPakFzSWtOU1NWUkVUVWNpT2pBc0lrUkZSaUk2TUN3aVFreFBReUk2TUN3aVR VOVdSVk5RUlVWRUlqb3dMQ0pDUVZSVVRFVlRVRVZGUkNJNk1IMHNJbklpT25zaVkyOTFiblFpT2pBc0luQnZhVzUwSWpvd2ZYMD0=`; return data; } function setLocalStorageSD(str) { localStorage.removeItem("_sd"); localStorage.setItem("_sd", str); } function decoded(sd) { const base = Base64.decode(sd); const str = Base64.decode(base); return JSON.parse(str); } function encoded(config) { const str = JSON.stringify(config); const base = Base64.encode(str); return Base64.encode(base); } function closeConfigDom() { document.querySelector("#hly-save").removeEventListener("click", saveConfig); document.querySelector("#hly-close").removeEventListener("click", closeConfigDom); const dom = document.getElementById("hly-box"); document.body.removeChild(dom); } function showConfigDom() { const sd = getLocalStorageSD(); const config = decoded(sd); createDom(config); } function createDom(config) { const dom = document.getElementById("hly-box"); if (dom) return false; const template = ` <div id="hly-box"> <form class="pure-form pure-form-aligned"> <fieldset> <div class="pure-control-group"> <label for="aligned-lv">等级</label> <input type="text" id="aligned-lv" placeholder="${config.lv}" /> </div> <div class="pure-control-group"> <label for="aligned-gold">金币</label> <input type="text" id="aligned-gold" placeholder="${config.gold}" /> </div> <div class="pure-control-group"> <label for="aligned-HP">生命值</label> <input type="text" id="aligned-HP" placeholder="${config.rA.HP}" /> </div> <div class="pure-control-group"> <label for="aligned-ATK">攻击力</label> <input type="text" id="aligned-ATK" placeholder="${config.rA.ATK}" /> </div> <div class="pure-control-group"> <label for="aligned-CRIT">暴击率</label> <input type="text" id="aligned-CRIT" placeholder="${config.rA.CRIT}" /> </div> <div class="pure-control-group"> <label for="aligned-CRITDMG">暴击伤害</label> <input type="text" id="aligned-CRITDMG" placeholder="${config.rA.CRITDMG}" /> </div> <div class="pure-control-group"> <label for="aligned-DEF">护甲</label> <input type="text" id="aligned-DEF" placeholder="${config.rA.DEF}" /> </div> <div class="pure-control-group"> <label for="aligned-BLOC">格挡</label> <input type="text" id="aligned-BLOC" placeholder="${config.rA.BLOC}" /> </div> <div class="pure-control-group"> <label for="aligned-MOVESPEED">副本行进速度</label> <input type="text" id="aligned-MOVESPEED" placeholder="${config.rA.MOVESPEED}" /> </div> <div class="pure-control-group"> <label for="aligned-BATTLESPEED">副本战斗速度</label> <input type="text" id="aligned-BATTLESPEED" placeholder="${config.rA.BATTLESPEED}" /> </div> <div class="pure-control-group"> <label for="aligned-point">转生点数</label> <input type="text" id="aligned-point" placeholder="${config.r.point}" /> </div> <div class="pure-controls"> <button class="pure-button pure-button-primary" id="hly-save">保存</button> <button class="pure-button pure-button-primary" id="hly-close">关闭</button> </div> </fieldset> </form> </div> `; const doc = new DOMParser().parseFromString(template, "text/html"); const div = doc.querySelector('#hly-box'); document.body.appendChild(div); document.querySelector("#hly-save").addEventListener("click", saveConfig, false); document.querySelector("#hly-close").addEventListener("click", closeConfigDom, false); const css = ` #hly-box{ background-color: #fff; position: absolute; right: 0; padding: 10px; } `; GM_addStyle(css); } function saveConfig() { const sd = getLocalStorageSD(); const config = decoded(sd); const lv = document.getElementById("aligned-lv").value; const lv2 = document.getElementById("aligned-lv").placeholder; config.lv = Number(lv) || Number(lv2); const gold = document.getElementById("aligned-gold").value; const gold2 = document.getElementById("aligned-gold").placeholder; config.gold = Number(gold) || Number(gold2); const HP = document.getElementById("aligned-HP").value; const HP2 = document.getElementById("aligned-HP").placeholder; config.rA.HP = Number(HP) || Number(HP2); const ATK = document.getElementById("aligned-ATK").value; const ATK2 = document.getElementById("aligned-ATK").placeholder; config.rA.ATK = Number(ATK) || Number(ATK2); const CRIT = document.getElementById("aligned-CRIT").value; const CRIT2 = document.getElementById("aligned-CRIT").placeholder; config.rA.CRIT = Number(CRIT) || Number(CRIT2); const CRITDMG = document.getElementById("aligned-CRITDMG").value; const CRITDMG2 = document.getElementById("aligned-CRITDMG").placeholder; config.rA.CRITDMG = Number(CRITDMG) || Number(CRITDMG2); const DEF = document.getElementById("aligned-DEF").value; const DEF2 = document.getElementById("aligned-DEF").placeholder; config.rA.DEF = Number(DEF) || Number(DEF2); const BLOC = document.getElementById("aligned-BLOC").value; const BLOC2 = document.getElementById("aligned-BLOC").placeholder; config.rA.BLOC = Number(BLOC) || Number(BLOC2); const MOVESPEED = document.getElementById("aligned-MOVESPEED").value; const MOVESPEED2 = document.getElementById("aligned-MOVESPEED").placeholder; config.rA.MOVESPEED = Number(MOVESPEED) || Number(MOVESPEED2); const BATTLESPEED = document.getElementById("aligned-BATTLESPEED").value; const BATTLESPEED2 = document.getElementById("aligned-BATTLESPEED").placeholder; config.rA.BATTLESPEED = Number(BATTLESPEED) || Number(BATTLESPEED2); const point = document.getElementById("aligned-point").value; const point2 = document.getElementById("aligned-point").placeholder; config.r.point = Number(point) || Number(point2); const str = encoded(config); setLocalStorageSD(str); setTimeout(() => { window.location.reload(true); }); } function createBtn() { const dom = document.querySelector("#hly-helper"); if (dom) return; const template = ` <div class="c-tooltip" id="hly-helper" style="cursor: pointer;"> <div class="c-tooltip-content"> <div class="Backpack"> <img width="34" height="34" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAFCElEQVR4nO2bX2wURRjAv7srR+D651qhkqNoDU1s0VjU1geBUK2KqQQsRmtMOEtCYqOtsQ88SGKL9YGHJmKkGkxIqCUYidEKaiNBpATtQ61aDKFFIEBoL6RAe7S9Ate7Ht83l0nvZne7d204drPzS3Zud7Z9mN9833yz254NLI4UgIelkQLwsDRSAB6qVH+wo2wqPLUvApAPJsYGcMnusG9p/WxHJ6iA99Xx1jVcNPvgOTaU0La76RE8VWDDQ5XNdQ04foC2zz/G1rx432/EFmD/7iYbfihQ7SSkAClACojghxQgBaRYwGhwCo5dmYDK5el4paT9wjiUL1sImU47XuljGgE08La+UWjrH2Xn/ZvzQY3C/ZfY4L2FmeAtymTnM5EyAX+2bsNWn1XVzdjGMzgegtrOIegbCeJVlJkEcIqyndBSlgtL09PwSh3DC6DZfqF9gH0+mpUGZ2+GsFdfAP9ZioDfKvPYpxopF/D0m59gq+Tvbz/CVimg8mcfm3ka0N6yHFhzaAh79QWc3JgLWzuHmQSKhPb1HuxVYmgBLaf80PKfHzwLHXDwxQcgA2dx5XdX8Y6+gN7Xl8AYRk3V0RvgmwhD7RNuqC124514DCuAQp6H/t61OVCS68ReSEoAcXzwNtR3+VkKqKWCYQV8jSv+zp5hFvoHX1qEPVG4gO6qhxSDocWyHKURXABBqdBzLQg7n12kKJ+GFfAervpU75tKs2BD/gLsicIHoxbSPGWe88yHXauysSfKgf8D0HxqjO0PvsCqEIthBZT/MACDgVBc+BM8pIntJTlsUARtgGjwhPg7Z/2TbC1Y6kqDY5vysGcawwoQczmW5t5ROHBuAs+U1KxIh5rH4sOc4Kkjrh2mFED0DAVhz5lxlg5EyWInG3zszMdiOgE8BToqFoPH5cCe2eMLhKGi45q5UkBrEZwNplwEeRmk0KYd4FyoOnodF8KQucogbYAoDcYm4zdCycKrRsY8Owt/ce9gWAEEr+uxW+FkoK0w5f7YZER130AYWgDxKj4M9dPDkBsfhjASEpVAg996Ah+GMPQL8WHox/Ue7FWScgF6iAJiU4EkbCvO1E0HKpH1XSP4OxHN0OcYXgBBe3yqChQJBC2MVBloy8sjgmb8uO8ObpACbNYJmnla9e/pC5GN657HdprXXlmLrT5ciNqA1aBIoFdiVB0oGjh8o8Q3OkTGPDu8ja/D1HJexDQCOCSC9gcfdl3HK6UAKnVU77VCXmTOAhJNAZHZCuCIW2UuQNzq6iEFSAGN2EoB1hHw/S8nsJ3m0JHfsZUCZi9ALIMiWmXxfgkQmXMKWF6A2VJARAqQAhqxlQJSI8B35iQMne+BwLAPr6Zx5XjAs2IN5BaU4FViJCpALHsicy6DiQgIBW/B6V/3KAYuQiIef7kG0pz6b4FNJaD38C42eKfLDcuerIAF2Utgviv6t7s7gRG4NXIVrvzbAcGAn0lYuaEe78xMogL0uOcpQGF/sfswG3zRunc1Z5eipO/Il0xCweo34MGCUuzVxjQC+OwvX/0WuPOKsEcb/0AfXPjjm4SiwDQC+GpfvGm75uxzKB1O//QpnulXB9MJ0HodLqL1elxECrjfArx1Df4IQBaezsg7T01gmzxf/RP9xwctuku3YKvkmb/2YZs0l1FAPqhgw0MV+spMODzVCgAP46GJCQRcdjjs1Ul/ZcYqSAF4WBopAA9LY3kBdwHTMkJ9+9ggtQAAAABJRU5ErkJggg=="> </div> </div> </div> `; const doc = new DOMParser().parseFromString(template, "text/html"); const div = doc.querySelector('#hly-helper'); div.addEventListener('click', showConfigDom, false) const menu = document.querySelector(".menu"); menu.appendChild(div); return true; } window.addEventListener("load", () => { const pure = GM_getResourceText("PURE"); GM_addStyle(pure); createBtn(); }); })()