Current time: 25.11.2024, 10:01 Hello There, Guest! (LoginRegister)
Language: english | russian  

Post Reply 
Threaded Mode | Linear Mode
Решение багов ERA/WOG
» Примеры решения багов ERA/WOG на уровне кода.
Author Message
igrik Offline

Posts: 2819
Post: #10

Решение багов ИИ, когда тот может (© RoseKavalier):
1. Использовать заклинание полёт когда у него нет Крыльев Ангела или Полёта
2. Использовать заклинания на Проклятой Земле, которые на ней запрещены
Code:
int __stdcall AI_waterwalk_fly(LoHook *h, HookContext *c)
{
    if (c->eax == 0) // no angel wings
    {
        _Hero_ *hero = (_Hero_ *)(c->esi);
        if (hero->spell[6] == 0 && hero->spell_level[6] == 0) // this AI hero does not have the means to cast fly (id = 6)
        {
            if (hero->spell[7] != 0 || hero->spell_level[7] != 0) // this AI hero has access to waterwalk (id = 7)
            {
                if (hero->waterwalk_cast == -1) // waterwalk is not cast ~ waterwalk field is *(&hero + 0x116) (see 0x4E6040 Cast_waterwalk function)
                    c->return_address = 0x430231; // try to cast waterwalk instead (code checks for Boots of Levitation first...)
                else
                    c->return_address = 0x430540; // skip procedure
                return NO_EXEC_DEFAULT;
            }
        }
    }
    return EXEC_DEFAULT;
}

int __stdcall AI_TP_cursed_check(LoHook *h, HookContext *c)
{
    _Hero_ *hero = (_Hero_*)c->esi;
    if (hero->GetSpecialTerrain() == 0x15) // 0x15 = cursed ground, 0x4E5130: __thiscall GetSpecialTerrain()
    {
        c->return_address = 0x56B6F4;
        return NO_EXEC_DEFAULT;
    }
    return EXEC_DEFAULT;
}

_PI->WriteLoHook(0x56B344, AI_TP_cursed_check);
_PI->WriteLoHook(0x43020E, AI_waterwalk_fly);


Решение бага (еще с SoD) исчезновения улучшенного стека при битве с даунгрейдом нейтралов
Code:
_int_ __stdcall Y_FixBagCreatureGredeOfNeutrals(HiHook* hook, _Army_* army, _int_ creature_id)
{
    _int_ count = 0;
    _int_ i = 0;
    _int_ crGrade_id = GetCreatureGrade(creature_id);
    do {
        if (army->type[i] == creature_id || army->type[i] == crGrade_id) {
            count += army->count[i];
        }
        i++;
    } while ( i<7 );

    return count;
}

//////////////////////////////////////////////////////////////

_PI->WriteHiHook(0x4AC5F5, CALL_, EXTENDED_, THISCALL_, Y_FixBagCreatureGredeOfNeutrals);


game bug fixes extended.dll || My Plugins || My GitHub
(This post was last modified: 01.02.2019 17:24 by igrik.)
01.02.2019 17:21
Visit this user's website Find all posts by this user Quote this message in a reply
« Next Oldest | Next Newest »
Post Reply 


Messages In This Thread
Решение багов ERA/WOG - igrik - 21.09.2011, 22:09
RE: Решение багов ERA/WOG - igrik - 11.10.2020, 19:37
RE: Решение багов ERA/WOG - slater777 - 08.01.2023, 06:37
RE: Решение багов ERA/WOG - daemon_n - 08.01.2023, 08:22
RE: Решение багов ERA/WOG - slater777 - 08.01.2023, 09:57
Решение багов ERA/WOG - Sav - 06.07.2012, 18:55
RE: ERA II - Sav - 11.07.2012, 20:36
RE: ERA II - MOP - 20.09.2012, 21:27
RE: ERA II - MOP - 28.09.2012, 07:27
RE: ERA II - Sav - 14.04.2013, 20:33
RE: ERA Scripts 1.15 Rus - gamecreator - 07.04.2015, 02:19
RE: Тема модераторов - gamecreator - 31.05.2016, 02:48
Решение багов ERA/WOG - igrik - 01.02.2019, 15:40
RE: Решение багов ERA/WOG - igrik - 01.02.2019 17:21
RE: Решение багов ERA/WOG - igrik - 01.02.2019, 17:27
RE: Решение багов ERA/WOG - igrik - 01.02.2019, 17:40
RE: Решение багов ERA/WOG - igrik - 03.09.2019, 11:56

Forum Jump:

Powered by MyBB Copyright © 2002-2024 MyBB Group