Написал плагин для адекватной работы навыка Обучение - теперь герой с данным навыком с увеличением количества опыта увеличивает свой уровневый отрыв от героя без данного навыка.
Сравнительное движение героев по уровням:
Герой с навыком: 1->3->8->16->21->25->37->40->46
Герой без навыка: 1->3->7->11->14->17->27->30->34
Суть нововведения в том, что количество дополнительного опыта рассчитывается исходя из текущего уровня героя
(это количество линейно зависит от текущего уровня, степень же навыка является дополнительным множителем).
- Код: Выделить всё
#include "..\..\include\homm3.h"
Patcher* _P;
PatcherInstance* _PI;
static _bool_ plugin_On = 0;
int __stdcall changeLearningPower(LoHook* h, HookContext* c)
{
char learningSkill = *(char*)(c->ecx + 0xDE);
_word_ heroLevel = *(int*)(c->ecx + 0x55);
float multiplier = learningSkill * heroLevel / (float)15.0;
*(float*)(c->ebp - 4) = (float)multiplier;
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("HD.Plugin.LearningSkill");
_PI->WriteLoHook(0x4E4ACD, changeLearningPower);
}
}
return TRUE;
}