您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Extension for HeroWarsHelper script
// ==UserScript== // @name TitanGiftsRS // @name:en TitanGiftsRS // @name:ru TitanGiftsRS // @namespace TitanGiftsRS // @version 1.01 // @description Extension for HeroWarsHelper script // @description:en Extension for HeroWarsHelper script // @description:ru Расширение для скрипта HeroWarsHelper // @author Green // @license Copyright Green // @match https://www.hero-wars.com/* // @match https://apps-1701433570146040.apps.fbsbx.com/* // @run-at document-start // ==/UserScript== (function () { if (!this.HWHClasses) { console.log('%cObject for extension not found', 'color: red'); return; } console.log('%cStart Extension ' + GM_info.script.name + ', v' + GM_info.script.version + ' by ' + GM_info.script.author, 'color: red'); const { addExtentionName } = HWHFuncs; addExtentionName(GM_info.script.name, GM_info.script.version, GM_info.script.author); const { buttons } = HWHData; const { popup, confShow, setProgress, hideProgress } = HWHFuncs; // Добавление кнопок в окно Разное const { othersPopupButtons } = HWHData; othersPopupButtons.push( { get msg() { return "Потратить искры мощи"; }, result: async function () { await spendSparksPower(); }, get title() { return "Потратить искры мощи"; }, }, { get msg() { return "Сбросить дары стихий"; }, result: async function () { await resetTitanGifts(); }, get title() { return "Сбросить дары стихий"; }, }, ); // Потратить искры мощи async function spendSparksPower(){ let [heroGetAll, inventory, user] = await new Caller(['heroGetAll', 'inventoryGet', 'userGetInfo']).execute() let heroes = Object.values(heroGetAll).sort((a, b) => a.titanGiftLevel - b.titanGiftLevel); const titanGiftLib = lib.getData('titanGift'); let titanGift = inventory.consumable[24]; let titanGiftMax = titanGift; let gold = user.gold; let userLevel = user.level; let calls = []; let minTitanGiftLevel = heroes[0].titanGiftLevel; let titanGiftLevel = minTitanGiftLevel; let titanGiftUpgradeCounter = 0; let message = ""; if (userLevel < 30 || minTitanGiftLevel == 30){ confShow("Нечего улучшать"); return; } titanGift = +(await popup.confirm('Доступно <span style="color: green;">' + titanGift.toLocaleString() + '</span> искр мощи <br> Укажите сколько искр мощи потратить', [ { result: 0, isClose: true }, { msg: "Потратить искры мощи", isInput: true, default: titanGift.toString() }, ])); if (titanGift == 0){ return; } if (!titanGift || titanGift < 0 || titanGift > titanGiftMax) { confShow("Некорректное значение"); return; } setProgress("Улучшаем дар стихий...", false, hideProgress); let cycle = true; while(cycle){ for (const hero of heroes) { if (titanGiftLevel >= 30){ message = "<br>Достигнут 30 уровень дара стихий у всех героев"; cycle = false; break; } if (hero.titanGiftLevel > titanGiftLevel){ break; } let nextLevelCost = titanGiftLib[hero.titanGiftLevel + 1].cost; if (titanGift < nextLevelCost.consumable[24] || gold < nextLevelCost.gold) { if (titanGiftUpgradeCounter == 0 && calls.length == 0){ setProgress("", true, hideProgress); confShow("Недостаточно золота или искр мощи"); return; } cycle = false; break; } calls.push({name: "heroTitanGiftLevelUp", args: {heroId: hero.id}, ident: "group_" + calls.length + "_body"}); titanGift -= nextLevelCost.consumable[24]; gold -= nextLevelCost.gold; } if (calls.length >= 1){ await Send({calls}); console.log(calls); titanGiftUpgradeCounter += calls.length; heroGetAll = await new Caller(['heroGetAll']).execute() heroes = Object.values(heroGetAll).sort((a, b) => a.titanGiftLevel - b.titanGiftLevel); calls = []; titanGiftLevel++; setProgress('Дар стихий улучшен до <span style="color: green;">'+ titanGiftLevel + '</span> уровня', false, hideProgress); } } await new Promise((e) => setTimeout(e, 2000)); setProgress("", true, hideProgress); confShow('Дар стихий улучшен <span style="color: green;">'+ titanGiftUpgradeCounter + '</span> раз(а)' + message ); } //Сбросить дары стихий async function resetTitanGifts(){ const [heroGetAll, user] = await new Caller(['heroGetAll', 'userGetInfo']).execute(); const heroes = Object.values(heroGetAll).sort((a, b) => a.titanGiftLevel - b.titanGiftLevel); const userLevel = user.level; let calls = []; let maxResetTitanGiftLevel = 0; let message = ""; for (const hero of heroes) { if (hero.titanGiftLevel > 0){ maxResetTitanGiftLevel = hero.titanGiftLevel; break; } } if (userLevel < 30 || maxResetTitanGiftLevel == 0){ confShow("Нечего сбрасывать"); return; } if (maxResetTitanGiftLevel == 30){ message += 'Остались герои только с <span style="color:red;">30</span> уровнем дара стихий <br> <br>' } else { maxResetTitanGiftLevel = +(await popup.confirm('Укажите <span style="color:red;">максимальный</span> сбрасываемый уровень дара стихий <br> Диапазон от 1 до 30', [ { result: 0, isClose: true }, { msg: "Сбросить дар стихий", isInput: true, default: maxResetTitanGiftLevel.toString() }, ])); } if (maxResetTitanGiftLevel == 0){ console.log("Закрыли окно"); return; } if (!maxResetTitanGiftLevel || maxResetTitanGiftLevel < 0 || maxResetTitanGiftLevel > 30) { confShow("Некорректное значение"); return; } if (maxResetTitanGiftLevel >= 30){ message+= 'Вы уверены, что хотите сбросить дар стихий <span style="color:red;">30</span> уровня у <span style="color:red;">ВСЕХ</span> героев?'; let resultPopup = await popup.confirm(message, [ { msg: I18N('BTN_ACCEPT'), result: true }, { msg: I18N('BTN_CANCEL'), result: false }, {isClose: true, result: false}, ]); if(!resultPopup){ return; } } for (const hero of heroes) { if (hero.titanGiftLevel == 0){ continue; } if (hero.titanGiftLevel > maxResetTitanGiftLevel){ break; } calls.push({name: "heroTitanGiftDrop", args: {heroId: hero.id}, ident: "group_" + calls.length + "_body"}); } if (calls.length == 0){ confShow("Нечего сбрасывать"); return; } await Send({calls}); confShow('Дар стихий сброшен у <span style="color: green;">'+ calls.length + '</span> героя(ев)'); } })();