Помогите, пожалуйста, сделать фичу. Она существовала еще в WoG, как элемент системы опыта существ.
Например, все гаргульи начинают бой уже под баффом "каменная кожа". Как в четвертых героях.
- Код: Выделить всё
#include "pch.h"
#include "..\HotA\homm3.h"
Patcher* _P;
PatcherInstance* _PI;
static _bool_ plugin_On = 0;
int __stdcall CastStoneSkinOnGargoyles(LoHook* h, HookContext* c)
{
for (int side = ATTACKER; side <= DEFENDER; ++side)
{
for (int i = 0; i < o_BattleMgr->stacks_count[side]; ++i)
{
if (o_BattleMgr->stack[side][i].creature_id == CID_STONE_GARGOYLE ||
o_BattleMgr->stack[side][i].creature_id == CID_OBSIDIAN_GARGOYLE)
{
// int __thiscall combatMonster_ApplySpell(_CombatMonster_ *this, int spell, int SpellPower, int SchoolLevel, _Hero_ *hero)
CALL_5(int, __thiscall, 0x444610, &o_BattleMgr->stack[side][i], SPL_STONE_SKIN, 3, 0, 0);
// 3 - продолжительность заклинания, 0 - уровень (0 = None, 1 = Basic, 2 = Advanced, 3 = Expert), 0 - нет (бонусов) героя
// последним аргументом может быть герой (o_BattleMgr->hero[side]), если нужны его бонусы (Кси, Дарксторн, Мерист, Лабета)
}
}
}
return EXEC_DEFAULT;
}
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
if (DLL_PROCESS_ATTACH == ul_reason_for_call)
{
if (!plugin_On)
{
plugin_On = 1;
_P = GetPatcher();
_PI = _P->CreateInstance((char*)"HD.Plugin.CastStoneSkinOnGargoyles");
_PI->WriteLoHook(0x462E26, CastStoneSkinOnGargoyles);
}
}
return TRUE;
}
Вот, кстати, интересная идея для плагина: дать Астралу (спецу по Гипнозу) абилку гипнотизировать рандомный вражеский стек, если выполнены требования по здоровью: (50 + SpellPower * 25) * (1 + [HeroLevel / CreatureLevel] * 0.03)
Да и вообще, интересная тема. Можно "прикрутить" заклинания, накладываемые в начале боя, спецам по существам, героям с определёнными вторичными навыками и т.п.
Можно даже привязать накладываемые заклы ко дню недели (тоже бы интересно было), либо ослабить временные бонусы от посещения различных объектов: например, вместо бонуса к Удаче накладывать на все отряды заклинание Fortune на определённое кол-во раундов (скажем, на три) и т.д.
А вот идея для нового артефакта: вешать в начале боя на каждый союзный отряд случайное усиливающее заклинание; либо ослабляющее на отряды противника.
Всё это бы разнообразило игру, не разрушая её духа.