Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
02 Sep 2017, 11:35
Сообщение
#381
|
|
![]() laughed as one fey Сообщений: 12 167 Спасибо сказали: 20605 раз |
Цитата То есть можно ли, например, отследить обращения к данному поле в объекте Герой (Магия Земли) ? Hardware breakpoint в Olly.
|
|
|
|
02 Sep 2017, 12:55
Сообщение
#382
|
|
|
Power Member Сообщений: 198 Спасибо сказали: 134 раза |
Цитата То есть можно ли, например, отследить обращения к данному поле в объекте Герой (Магия Земли) ? Hardware breakpoint в Olly.А можно пример для чайников со скриншотом именно для данной задачи ? Подозреваю, впрочем, что это будет 0041C659 call Hero_GetSchoolLevelOfSpell в процедуре 0041C610 Cast_AdventureMagic |
|
|
|
02 Sep 2017, 13:53
Сообщение
#383
|
|
![]() Immortal Сообщений: 589 Спасибо сказали: 891 раз |
Я думаю где-то тут 0x43052A
-------------------- |
|
|
|
02 Sep 2017, 18:29
(Сообщение отредактировал Ben - 02 Sep 2017, 18:31)
Сообщение
#384
|
|
|
Power Member Сообщений: 198 Спасибо сказали: 134 раза |
Я думаю где-то тут 0x43052A Да вроде нет. На Си коде тут все банально: Код JumpHero((void *)pAdvManager, (_Hero_ *)v6, *(_DWORD *)v16, 0, 1, 0); v55 = GetTypeOfLandModifierUnderHero((_Hero_ *)v6); v56 = CalcSpellCost4Hero((char *)v6, 9, 0, v55); sub_004D9540((_Hero_ *)v6, v56); v57 = GetTypeOfLandModifierUnderHero((_Hero_ *)v6); v58 = *(_DWORD *)(v6 + 77) - (Hero_GetSchoolLevelOfSpell((_Hero_ *)v6, 9, v57) != 3 ? 300 : 200); *(_DWORD *)(v6 + 77) = v58; if ( (signed int)v58 < 0 ) *(_DWORD *)(v6 + 77) = 0; Просто проверяется, есть ли мувпойнты. Но инфа полезная, спасибо. 300 и 200 тут тоже надо подправить. Нелегко делать корректно работающие моды. |
|
|
|
02 Sep 2017, 19:15
(Сообщение отредактировал Ben - 02 Sep 2017, 19:56)
Сообщение
#385
|
|
|
Power Member Сообщений: 198 Спасибо сказали: 134 раза |
Возможно, вообще мой код для Городского портала только для человека и работает.
|
|
|
|
02 Sep 2017, 19:41
Сообщение
#386
|
|
![]() 😸🧡✊✌️ Сообщений: 16 495 Спасибо сказали: 3401 раз |
Возможно, вообще мой код для Городского портала только для человека и работает. Скорее всего. Компу же диалог выбора города не показывают.-------------------- Я слежу за тобой!
tolic.narod.ru![]() Цитата Всегда приятно осознавать, что кто-то делает что-то хуже, чем делал бы ты, если бы умел. Борис "Бонус" Репетур, "От винта!", выпуск 38. |
|
|
|
02 Sep 2017, 23:46
Сообщение
#387
|
|
|
Immortal Сообщений: 798 Спасибо сказали: 555 раз |
Посмотрите условный переход по адресу 56B3B4h. Далее, для порядка стоимость заклинания в MP нужно также изменить по адресам 56B5AAh и 430532h (LoHook, стоимость в eax).
|
|
|
|
14 Sep 2017, 16:57
Сообщение
#388
|
|
|
Power Member Сообщений: 198 Спасибо сказали: 134 раза |
Выложил обновленный код и DLL в соответствующей теме.
AI теперь в курсе введенных изменений, применяет Городской портал для перемещения в нужный город, даже не имея навыка Магия Земли. Большое спасибо AlexSpl ! |
|
|
|
14 Sep 2017, 18:22
(Сообщение отредактировал igrik - 14 Sep 2017, 19:19)
Сообщение
#389
|
|
![]() Immortal Сообщений: 589 Спасибо сказали: 891 раз |
to Ben:
Цитата Ну вот, уже не первый раз встречаюсь с тем, что в ERM много полезной информации. Но заставить себя изучать ERM не могу Мне проще писать плагины на C++, чем вникнуть в ERM. В ERM вникать не нужно. Для сода/хоты он НЕприменим. Только для вога или эры. Но справку юзать однозначно стоит. Там масса информации, которую можно применять и для сода/хоты: Арты, объекты, герои, номера зданий, гексы поля боя и т.п. Они одни для всех версий героев 3. -------------------- |
|
|
|
28 Sep 2017, 10:31
(Сообщение отредактировал Ben - 28 Sep 2017, 18:36)
Сообщение
#390
|
|
|
Power Member Сообщений: 198 Спасибо сказали: 134 раза |
Альтернативный вариант плагина (http://forum.df2.ru/index.php?s=&showtopic=30848&view=findpost&p=744199)
(тогда в подсказке по навыку можно будет написать почти то же самое что и в оригинале - что навык дает дополнительные 5/10/20% опыта за каждый уровень, достигнутый героем) Код #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); if(learningSkill == 1) *(float*)(c->ebp - 4) = (float)(heroLevel * 0.05); if(learningSkill == 2) *(float*)(c->ebp - 4) = (float)(heroLevel * 0.10); if(learningSkill == 3) *(float*)(c->ebp - 4) = (float)(heroLevel * 0.20); 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; } |
|
|
|
01 Dec 2017, 18:09
Сообщение
#391
|
|
|
Newbie Сообщений: 6 Спасибо сказали: 2 раза |
Доброе время суток!
Пытаюсь разобраться с созданием диалогов по примеру igrik, но компилятор постоянно выдает ошибку: Подскажите пожалуйста, что я делаю не так? |
|
|
|
01 Dec 2017, 23:18
Сообщение
#392
|
|
![]() допустим, мяў Сообщений: 24 129 Спасибо сказали: 13439 раз |
mr_bobblehead
Вряд ли смогу помочь по существу, но, чтобы тебе могли ответить igrik, Berserker, MoP - надо хотя бы написать - Ну и код, само собой, не помешал бы. -------------------- Вокруг столько фильмов, книг, музыки - а природа какая невероятная!
Если тебе скучно жить - ты совсем дурак. (Татьяна Черниговская) |
|
|
|
02 Dec 2017, 03:01
Сообщение
#393
|
|
|
Newbie Сообщений: 6 Спасибо сказали: 2 раза |
mr_bobblehead Вряд ли смогу помочь по существу, но, чтобы тебе могли ответить igrik, Berserker, MoP - надо хотя бы написать - Ну и код, само собой, не помешал бы. VS 2015 #include <windows.h> #include "..\..\include\patcher_x86_commented.hpp" #include "..\..\include\HotA\HoMM3.h" #include "..\..\include\era.h" Patcher* _P; PatcherInstance* _PI; static _bool_ plugin_On = 0; void __fastcall Scroll_TestDlg_Callback(int klick_id, _Dlg_* dlg) { dlg->Redraw(TRUE); } void New_TestDlg_Show(int x, int y) { _Dlg_* dlg = _CustomDlg_::Create(-1, -1, 297, 215, DF_SCREENSHOT | DF_SHADOW, NULL); dlg->Run(); dlg->Destroy(TRUE); } BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: if (!plugin_On) { plugin_On = 1; _P = GetPatcher(); _PI = _P->CreateInstance("HD.Plugin.TestPlugin"); } break; case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; } |
|
|
|
02 Dec 2017, 12:48
Сообщение
#394
|
|
![]() laughed as one fey Сообщений: 12 167 Спасибо сказали: 20605 раз |
Ох, "Error LNK2001". Спасибо С++ за еще один день разрешения зависимостей.
Если мне не изменяет память, надо явно добавить в проект используемые .h и .cpp файлы из инклудов. Цитата H2SW_creatures Я даже удивлен! |
|
|
|
02 Dec 2017, 14:35
Сообщение
#395
|
|
![]() Immortal Сообщений: 1 468 Спасибо сказали: 1153 раза |
Цитата HotA\HoMM3.h Файл есть в открытом доступе? -------------------- |
|
|
|
02 Dec 2017, 15:33
Сообщение
#396
|
|
|
Newbie Сообщений: 6 Спасибо сказали: 2 раза |
Ох, "Error LNK2001". Спасибо С++ за еще один день разрешения зависимостей. Если мне не изменяет память, надо явно добавить в проект используемые .h и .cpp файлы из инклудов. Цитата H2SW_creatures Я даже удивлен! Ковырялся в исходниках, извините Цитата HotA\HoMM3.h Файл есть в открытом доступе? Да, правда пришлось хорошенько поискать. |
|
|
|
02 Dec 2017, 21:15
Сообщение
#397
|
|
![]() допустим, мяў Сообщений: 24 129 Спасибо сказали: 13439 раз |
Цитата HotA\HoMM3.h Файл есть в открытом доступе? Да, правда пришлось хорошенько поискать. -------------------- Вокруг столько фильмов, книг, музыки - а природа какая невероятная!
Если тебе скучно жить - ты совсем дурак. (Татьяна Черниговская) |
|
|
|
03 Dec 2017, 02:55
Сообщение
#398
|
|
|
Newbie Сообщений: 6 Спасибо сказали: 2 раза |
|
|
|
|
03 Dec 2017, 16:37
Сообщение
#399
|
|
![]() Immortal Сообщений: 1 468 Спасибо сказали: 1153 раза |
Команда Хоты обновлённый файл не выкладывала, Хиппо? Можете загрузить куда-нибудь на обменник?
-------------------- |
|
|
|
03 Dec 2017, 17:24
Сообщение
#400
|
|
|
Immortal Сообщений: 9 448 Спасибо сказали: 4001 раз |
Команда не выкладывала и не передавала для распространения исходники HotA или какие-то их части, равно как и реверсерские базы данных (и не планирует в будущем). Некогда временно выкладывались только исходники HD и BattleFigures с заголовочными файлами, схожими с обсуждаемыми здесь и практически идентичными между собой. В обсуждаемых файлах, однако, информации несколько больше, чем было там, и по всем признакам, это утечка именно из исходников HotA. Впрочем, дополнительная информация, по сравнению с действительно выкладывавшимися публично заголовочниками, не очень существенна.
|
|
|
|
![]() ![]() |
| Текстовая версия | Сейчас: 20 December 2025 - 17:07 |
|
Copyright by Алексей Крючков
Programming by Degtyarev Dmitry |
|