31.01.2024, 17:06
Не знал, куда написать, сюда или в моддинг.
В общем, никогда не работал с диалогами, и не пойму в чем ошибка. Нужно, чтобы в городе при клике на здание открывался жертвенник.
По аналогии со строением на карте, сделал такой код.
Код работает, диалог показывается, жертвенник работает. Но при закрытии диалога происходит краш с ошибкой в Wog native dialogs:
Соответственно, без этого плагина краша нет, все работает.
В общем, никогда не работал с диалогами, и не пойму в чем ошибка. Нужно, чтобы в городе при клике на здание открывался жертвенник.
По аналогии со строением на карте, сделал такой код.
Code:
int player_id = o_GameMgr->GetMeID(); // текущий игрок
_Dlg_* dlg = (_Dlg_*)(DwordAt(c->ebp) - 0x370); // ?
CALL_3(int, __thiscall, 0x560060, dlg, &o_GameMgr->hero[town->down_hero_id], player_id); // загрузка диалога
CALL_3(void, __thiscall, 0x5FF800, dlg, -1, -1); // центрирование диалога
CALL_2(int, __thiscall, 0x565640, dlg, 0); // показ диалога
CALL_1(int, __thiscall, 0x562630, dlg); // уничтожение диалога
CALL_1(void, __thiscall, 0x5D5810, o_TownMgr); // обновление экрана города
Код работает, диалог показывается, жертвенник работает. Но при закрытии диалога происходит краш с ошибкой в Wog native dialogs:
Code:
Failed to read data at A.
EIP: Wog native dialogs.1358D (?_Copy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IAEXII@Z + 221). Code: C0000005
> Registers
EAX: 00000001 (int: 1)
ECX: 02D39AEC (int: 47422188, pint: 0x02D39F10 = 47423248)
EDC: 0EE6B100 (int: 249999616, pint: 0x0EEC36F8 = 250361592)
EBX: 00000001 (int: 1)
ESP: 02D3980C (int: 47421452, pint: 0x00000001)
EBP: 02D398D8 (int: 47421656, pint: 0x0D6142A3 = 224477859)
ESI: 00007801 (int: 30721)
EDI: 0000000A (int: 10)
Соответственно, без этого плагина краша нет, все работает.