1) После нажатия на кнопку «Купить» окно покупки существ не закрывается. Золото и ресурсы на покупку снимаються только после того, как самостоятельно закрываешь окно. В оригинале окно закрывается.
2) Слабые неулучшенные существа 7 уровня не требуют особо ценных ресурсов (ртуть / сера / кристаллы / драгоценные камни). Только золото.
Для улучшенных требуется 1 особо ценный ресурс на каждое существо. Бегемоты / Древние чудовища, Костяные драконы / Призрачные драконы, Гидры / Гидры Хаоса, Жар-птицы / Фениксы
Остальные существа 7-го уровня: не грейженные - 1 ценный ресурс; грейженные - 2 ценных ресурса.
При покупке улучшенных существ количесвто особо ценных ресурсов не отображается (для Behemoths / Ancient Behemoths, Bone Dragons / Ghost Dragons, Hydras / Chaos Hydras, Firebirds / Phoenixes):
Лучше конечно сделать порядок такой, как в городе. Изначально грейженные, потом обычные. Чтобы отображение по ресурсам было идентично.
3) Жилищам 1 уровня необходимо платное окно с возможностью выбора существ. А также убрать диалог бесплатного присоединения.
Мне RoseKavalier пытался что-то подсказать, но я так сам и не разобрался.
----------
1- You'll have to search the proc. ERA does something similar, look in
https://github.com/ethernidee/era/blob/ ... llings.pas
https://github.com/ethernidee/era/blob/ ... s.pas#L716
2- Put upgraded creature first to fix resources, that's how the dialog is handled in town. Accumulating is not an issue, it uses the same address to store quantity.
3- HDmod is an issue with this. Look at 0x4A17BD and check to make a conditional jump.
Also:
4AB97B+1 -> 00
4AB812+1 -> 00
----------
Вы что-то подобное делали с Ben80 в плагине Гордского портала, когда убирали диалог с подтверждением на уровне Basic (jump) и заменяли его окном с выбором городов, как у Advanced и Expert.
В общем вот код, который имеется на данный момент. Он работает, но мне нужна помощь, чтобы его допилить по вышеописанным пунктам. Использую одиночный заголовок single_header.
- Код: Выделить всё
#define _CRT_SECURE_NO_WARNINGS
#define _H3API_PATCHER_X86_
#include "H3API-master\single_header\H3API.hpp"
using namespace h3;
Patcher* _P;
PatcherInstance* _PI;
int __stdcall AdvMapGeneratorUpgrades(LoHook *h, HookContext *c)
{
auto& dwelling = *c->Ebx<h3::H3Dwelling*>();
if (dwelling.creatureTypes[1] != -1) // not GENERATOR_1 type
return EXEC_DEFAULT;
int upgrade = H3Creature::GetUpgrade(dwelling.creatureTypes[0]);
if (upgrade == -1) // neutral creature
return EXEC_DEFAULT;
c->Pop();
c->Pop();
c->Push(int(&dwelling.creatureCounts[0])); // share creature count with unupgraded type
c->Push(upgrade);
return EXEC_DEFAULT;
}
void HooksInit()
{
// Hook
_PI->WriteLoHook(0x4ABA2F, AdvMapGeneratorUpgrades);
}
const char* PLUGIN_NAME = "CreatureUpgrade";
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
static BOOL pluginOn = FALSE;
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
if (!pluginOn)
{
_P = GetPatcher();
_PI = _P->CreateInstance(PLUGIN_NAME);
HooksInit();
}
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}