Automation of actions for the game Hero Wars
I also got this issue, but it's not permanent. it fixes itself after refresh. There's some inconsistency between how the script stores oracle cards and how the game views them. The script tries to skip a battle using an oracle card but for some reason the game doesn't register them. If you look in the logs, it will show something like "countcard 15", but then "Cards 0", when you do a refresh and click dungeon again it's fixed
wait "log"? I dont have a log (I have "do all" "actions" "others" "Toe" "dungeon" "adv" "raid" "rewards" "guild war" "quests" and "sync" but for me no log) should there be a log button?
press F12 to open the console. there are logs there.
so any workaround? those scumbag devs keep giving that message (and refresh dont work)
what do you use?
browser? Firefox
its on a old laptop 2 core intel
so anyway way to bypass this msg? I still get it all the time especially in Dungeon it's like every 10 titanite I get it
those devs really are human garbage
I told these scumbags what I think of them (on their social page they cant censor me there hehehe)
I have a workaround, it doesn't fix the core issue (some inconsistency with oracle card calculations) but it prevents the dungeon from stopping by setting the cards to 0 and trying again. I can't test this currently but it should be fine, let me know how it goes. import this script with tampermonkey (save the text below as a .js file):
// ==UserScript==
// @name fixoraclecards
// @name:en fixoraclecards
// @name:ru fixoraclecards
// @namespace fixoraclecards
// @version 0.0.12
// @description fixoraclecards for HeroWarsHelper script
// @description:en fixoraclecards for HeroWarsHelper script
// @description:ru fixoraclecards для скрипта HeroWarsHelper
// @author ZingerY
// @license Copyright ZingerY
// @homepage https://zingery.ru/scripts/HWHBestDungeonExt.user.js
// @icon https://zingery.ru/scripts/VaultBoyIco16.ico
// @icon64 https://zingery.ru/scripts/VaultBoyIco64.png
// @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;
}
if (!this.HWHData) {
console.log('HWHData not found');
} else {console.log('HWHDataLoaded')}
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 {
getInput,
setProgress,
hideProgress,
I18N,
send,
getTimer,
countdownTimer,
getUserInfo,
getSaveVal,
setSaveVal,
popup,
setIsCancalBattle,
random,
endBattle,
EventEmitterMixin,
} = HWHFuncs;
endBattle = async function (battleInfo) {
if (battleInfo.result.win) {
const args = {
result: battleInfo.result,
progress: battleInfo.progress,
}
if (HWHData.countPredictionCard > 0) {
args.isRaid = true;
} else {
const timer = getTimer(battleInfo.battleTime);
console.log(timer);
await countdownTimer(timer, `${I18N('DUNGEON')}: ${I18N('TITANIT')} ${dungeonActivity}/${maxDungeonActivity} ${talentMsg}`);
}
const calls = [{
name: "dungeonEndBattle",
args,
ident: "body"
}];
lastDungeonBattleData = null;
try {send(JSON.stringify({ calls }), resultEndBattle);}
catch(e) {// Check if error contains "abnormal speed" or "NotAvailable in dungeonEndBattle"
if (e.message.includes("abnormal speed") || e.message.includes("NotAvailable in dungeonEndBattle")) {
console.warn("Server detected fast dungeon completion, retrying without raid...");
HWHData.countPredictionCard = 0; delete args.isRaid; endBattle(battleInfo)}
else {
endDungeon('dungeonEndBattle win: false\n', battleInfo);
} }}
}
this.HWHFuncs.endBattle = endBattle;
})();
sorry, there is a mistake it the previous file I sentand for some reason greasyfork doesn't let me edit/delete the comment, here is the updated script:
// ==UserScript==
// @name fixoraclecards
// @name:en fixoraclecards
// @name:ru fixoraclecards
// @namespace fixoraclecards
// @version 0.0.12
// @description fixoraclecards for HeroWarsHelper script
// @description:en fixoraclecards for HeroWarsHelper script
// @description:ru fixoraclecards для скрипта HeroWarsHelper
// @author ZingerY
// @license Copyright ZingerY
// @homepage https://zingery.ru/scripts/HWHBestDungeonExt.user.js
// @icon https://zingery.ru/scripts/VaultBoyIco16.ico
// @icon64 https://zingery.ru/scripts/VaultBoyIco64.png
// @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;
}
if (!this.HWHData) {
console.log('HWHData not found');
} else {console.log('HWHDataLoaded')}
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 {
getInput,
executeDungeon,
setProgress,
hideProgress,
I18N,
send,
getTimer,
countdownTimer,
getUserInfo,
getSaveVal,
setSaveVal,
popup,
setIsCancalBattle,
random,
EventEmitterMixin,
} = HWHFuncs;
executeDungeon.Prototype.endBattle = async function (battleInfo) {
if (battleInfo.result.win) {
const args = {
result: battleInfo.result,
progress: battleInfo.progress,
}
if (HWHData.countPredictionCard > 0) {
args.isRaid = true;
} else {
const timer = getTimer(battleInfo.battleTime);
console.log(timer);
await countdownTimer(timer, `${I18N('DUNGEON')}: ${I18N('TITANIT')} ${dungeonActivity}/${maxDungeonActivity} ${talentMsg}`);
}
const calls = [{
name: "dungeonEndBattle",
args,
ident: "body"
}];
lastDungeonBattleData = null;
try {send(JSON.stringify({ calls }), resultEndBattle);}
catch(e) {// Check if error contains "abnormal speed" or "NotAvailable in dungeonEndBattle"
if (e.message.includes("abnormal speed") || e.message.includes("NotAvailable in dungeonEndBattle")) {
console.warn("Server detected fast dungeon completion, retrying without raid...");
HWHData.countPredictionCard = 0; delete args.isRaid; endBattle(battleInfo)}
else {
endDungeon('dungeonEndBattle win: false\n', battleInfo);
} }}
}
})();
I have a workaround, it doesn't fix the core issue (some inconsistency with oracle card calculations) but it prevents the dungeon from stopping by setting the cards to 0 and trying again. I can't test this currently but it should be fine, let me know how it goes.
import this script with tampermonkey (save the text below as a .js file):
how do I add that?
like is it suppose to replace existent code in the script? or add to it? (and if it's replace, which part of the original HWH script must be delete and replace with yours?)
add it as another script, don't replace the existing one. save the code in a .js file and import it with tamper monkey.
> "we detected an abnormal speed in dungeon" etc.
looks like those scumbag devs at Nexter have made another change to the game now in the dungeon I get this warning EVERY time and it interrupts everything
is there any setting or value we can change to avoid this message?