HeroWarsHelper

Automation of actions for the game Hero Wars

< 脚本 HeroWarsHelper 的反馈

提问 / 留言

§
发布于:2025-05-21

> "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?

orb
§
发布于:2025-05-21
编辑于:2025-05-21

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

§
发布于:2025-05-21

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?

orb
§
发布于:2025-05-21

press F12 to open the console. there are logs there.

§
发布于:2025-05-27

so any workaround? those scumbag devs keep giving that message (and refresh dont work)

ZingerY作者
§
发布于:2025-05-27

what do you use?

§
发布于:2025-05-27

browser? Firefox
its on a old laptop 2 core intel

§
发布于:2025-06-01

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)

orb
§
发布于:2025-06-01

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;



    })();
orb
§
发布于:2025-06-01
编辑于:2025-06-01

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);
        } }}
    }



    })();
§
发布于:2025-06-01

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?)

orb
§
发布于:2025-06-01

add it as another script, don't replace the existing one. save the code in a .js file and import it with tamper monkey.

§
发布于:2025-06-01

I'll test

by teh way lately I'm also getting it for campaign missions (there's one where I always get it)

it says "abnormal speed" but I still lose 2 energy for fail ... those Nexter devs are worth less then dog sht

orb
§
发布于:2025-06-02

You're saying there's a single campaign mission that gives you this trouble? What mission is that? Also do you have "skip battle" checked in the HWH settings?

§
发布于:2025-06-03

no it can happen on different missions
but so far only the hard missions (the ones that really test my team)

btw I still get the "abnormal speed" error

I left another "nice message" to the devs on Nexters social page

orb
§
发布于:2025-06-03

I found a mistake I made in the script, here's updated version:

// ==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,
        EventEmitterMixin,
    } = HWHFuncs;
    const executeDungeon = HWHClasses;


    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);
        } }}
    }



    })();
§
发布于:2025-06-03
编辑于:2025-06-03

At this point, wouldn't it just be more efficient for users if you published this on GreasyFork.com as a full project? That would make everything so much easier to use and organize.

orb
§
发布于:2025-06-03

You're right, but GreasyFork is giving me trouble for some reason. I'll see if I can resolve it.

orb
§
发布于:2025-06-03

I solved the issues, here is the link to the greasyfork script:
https://gf.qytechs.cn/en/scripts/538202-fixoraclecards-for-hero-wars-helper

Further issues should be written there. Sorry for clogging up the chat :)

ZingerY作者
§
发布于:2025-06-03

The latest version should not have this problem. What scripts do you use to get it?

§
发布于:2025-06-04

I solved the issues, here is the link to the greasyfork script:
https://gf.qytechs.cn/en/scripts/538202-fixoraclecards-for-hero-wars-helper

Further issues should be written there. Sorry for clogging up the chat :)

I still get the same error


hope those Nexter devs get braincancer

§
发布于:2025-06-04

The latest version should not have this problem. What scripts do you use to get it?

v2.352

ZingerY作者
§
发布于:2025-06-04

Perhaps you are using some other extensions?

§
发布于:2025-06-05
编辑于:2025-06-05

1 extension Tampermonkey

btw today lasted over 400 titanite before I got that error
maybe lucky (yesterday it was like every 20 titanite or so)

发布留言

登录(不可用)以发布留言。

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址