Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
10 Nov 2015, 13:37
(Сообщение отредактировал Gavek - 10 Nov 2015, 13:48)
Сообщение
#301
|
|
![]() collector of time Сообщений: 159 Спасибо сказали: 73 раза |
Глаза буквально смозолил в Иде уже, пытаясь найти куда поставить хук, чтобы окно героя закрывалось. Смысл в том, что необходимо чтобы при клике мышью (или другом действии) обновить изображение HEROSCR4.pcx.
Может для этого и не нужно закрывать окно героя. Наверно нужно как то "перевызвать", что ли Dl_hero_info или типа того. Подставить картинку сумею сам. ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Igrik, сможете глянуть, как сделать кнопку "уволить героя" не активной? -------------------- |
|
|
|
10 Nov 2015, 16:33
(Сообщение отредактировал igrik - 10 Nov 2015, 16:36)
Сообщение
#302
|
|
![]() Immortal Сообщений: 589 Спасибо сказали: 891 раз |
в каком смысле обновить HEROSCR4.pcx? Это же просто задник и что коммандна UN:R3/-1; не подходит?
Опиши в деталях что ты хочешь -------------------- |
|
|
|
11 Nov 2015, 13:50
Сообщение
#303
|
|
![]() Member Сообщений: 84 Спасибо сказали: 70 раз |
Цитата Заменить деф у героя в бою. Код !?BA0; !!UN:C6919200/4/?y10; !!VRy51:S0 *4 +y10 +21508; (0 - левый, 1 - правый) !!UN:Cy51/4/?y52; !!SN:E5622208/2/^ch17.def^; (таки имя дефа) !!UN:Cy51/4/v1; !!UN:Cy52/4/?y53; !!VRy53:+4; !!UN:Cy53/4/?y54; !!SN:Ey54/2/y52; Таки да, можно делать героев с уникальными боевыми моделями. Попробовал, не работает в Эре. Версия 2.4. Где ошибка? -------------------- |
|
|
|
11 Nov 2015, 15:06
Сообщение
#304
|
|
![]() laughed as one fey Сообщений: 12 167 Спасибо сказали: 20605 раз |
Триггер не тот. BF можно, например.
|
|
|
|
12 Nov 2015, 11:14
Сообщение
#305
|
|
![]() collector of time Сообщений: 159 Спасибо сказали: 73 раза |
в каком смысле обновить HEROSCR4.pcx? Это же просто задник и что коммандна UN:R3/-1; не подходит? Опиши в деталях что ты хочешь Когда находишься в окне героя, и хочешь посмотреть другого героя через панель справа. Нажимая на этот box с другим героем, менялся и задник диалога. Посмотрел в иде. Там функция построения информации о диалоге перед показом, но видимо работает она только перед показом диалога. Пробовал через ERM через кнопку hsbtns.def Заменяя последнюю цифру в картинке (через адрес) работает. Т.е. через CM, нажал на 30720 закрылся диалог, появился новый. Пробовал через доп.кнопку с такими же параметрами- не работает. -------------------- |
|
|
|
12 Nov 2015, 11:21
(Сообщение отредактировал MasterOfPuppets - 12 Nov 2015, 11:23)
Сообщение
#306
|
|
![]() Анти-Всë Сообщений: 2 989 Спасибо сказали: 2377 раз |
Короче, смотришь функцию обновления окна героя (4E1CC0, емнип). Находишь в ней обновление нужного тебе элемента по ID - и чудишь, если навыки позволяют. Если его обновление не прописано в функции - придется самому прописать. Можно вообще HEROSCR4.pcx превратить в HEROSCR4.def и в зависимости от героя менять номер кадра.
-------------------- Circle of destruction, hammer comes crushing
Powerhouse of energy Whipping up a fury, dominating flurry We create the battery |
|
|
|
12 Nov 2015, 11:51
(Сообщение отредактировал Gavek - 12 Nov 2015, 12:00)
Сообщение
#307
|
|
![]() collector of time Сообщений: 159 Спасибо сказали: 73 раза |
Короче, смотришь функцию обновления окна героя (4E1CC0, емнип). Находишь в ней обновление нужного тебе элемента по ID - и чудишь, если навыки позволяют. Если его обновление не прописано в функции - придется самому прописать. Можно вообще HEROSCR4.pcx превратить в HEROSCR4.def и в зависимости от героя менять номер кадра. ...ммм Это нужно динамическую библиотеку написать для получения таких результатов или в самой программе. Я пока застрял на регистре eax в изучении ассемблера. Круто. Особенно в def превратить. Вчера только смотрел и думал об этом. За обработку def'а другие функции отвечают вроде. Мне такое не потянуть. Спасибо. -------------------- |
|
|
|
12 Nov 2015, 12:51
Сообщение
#308
|
|
![]() laughed as one fey Сообщений: 12 167 Спасибо сказали: 20605 раз |
Цитата Окна найма существ/боевых машин героем Вах. Одын вопрос: использовать для временных переменных v-шки обязательно, а то я бы на y заменил (с коррекцией адреса, понятно)?
|
|
|
|
12 Nov 2015, 13:01
(Сообщение отредактировал igrik - 12 Nov 2015, 13:18)
Сообщение
#309
|
|
![]() Immortal Сообщений: 589 Спасибо сказали: 891 раз |
нет не обязательно. Я просто знал адрес v переменных, поэтому их и использовал. С y переменными тоже работало, но я не был уверен в надежности, т.к. не знал точных их адресов. Вообще там нужно просто указать ссылку на адрес, в котором указано количество монстров для найма. И размер по непроверенным данным 2 байта
Цитата менялся и задник диалога. Да ппц. Как может меняться задник диалога? это же статическое изображение "HEROSCR4.pcx". Как оно может меняться в процессе игры. Или тогда что в твоем понимании "задник диалога". Такое ощущение, что ты говоришь о изменении отображения артов, навыков, монстров и т.п. Так это не задник! если хочешь поменять "HEROSCR4.pcx" то используй !!SN:L^Era.dll^/?y1 Ay1/^RedirectFile^/?y2 Ey2/1/^HEROSCR4.pcx^/^anyfuckingdef.pcx^; -------------------- |
|
|
|
12 Nov 2015, 13:17
Сообщение
#310
|
|
![]() collector of time Сообщений: 159 Спасибо сказали: 73 раза |
Цитата менялся и задник диалога. Да ппц. Как может меняться задник диалога? это же статическое изображение "HEROSCR4.pcx". Как оно может меняться в процессе игры. Или тогда что в твоем понимании "задник диалога". Такое ощущение, что ты говоришь о изменении отображения артов, навыков, монстров и т.п. Так это не задник! нет, нет... мне не менять надо. Мне нужно закрыть диалог героя, по требованию, что называется, остальное сам смогу. Короче, смотришь функцию обновления окна героя (4E1CC0, емнип). Находишь в ней обновление нужного тебе элемента по ID - и чудишь, если навыки позволяют. Если его обновление не прописано в функции - придется самому прописать. Можно вообще HEROSCR4.pcx превратить в HEROSCR4.def и в зависимости от героя менять номер кадра. MoР понял меня. -------------------- |
|
|
|
12 Nov 2015, 13:18
(Сообщение отредактировал MasterOfPuppets - 12 Nov 2015, 13:34)
Сообщение
#311
|
|
![]() Анти-Всë Сообщений: 2 989 Спасибо сказали: 2377 раз |
Создать новый ID с той же картинкой, который будет идти в отрисовке сразу после задника, а в функции обновления - первым. Делов-то. И не надо закрывать окно героя. Это костыль, который вызовет раздражающее моргание.
Если с костылем - то иди по адресу 4DEA6Ah. Там проверка на RoE, если она - то вместо heroscr4.pcx отображается heroscr3.pcx. Ставь хук и вводи свои условия. -------------------- Circle of destruction, hammer comes crushing
Powerhouse of energy Whipping up a fury, dominating flurry We create the battery |
|
|
|
12 Nov 2015, 13:41
(Сообщение отредактировал Gavek - 12 Nov 2015, 13:45)
Сообщение
#312
|
|
![]() collector of time Сообщений: 159 Спасибо сказали: 73 раза |
Создать новый ID с той же картинкой, который будет идти в отрисовке сразу после задника, а в функции обновления - первым. Делов-то. И не надо закрывать окно героя. ... .... Это ещё раз доказывает, что всё гениальное просто! В моём моде уже есть такое "наложение". ... блин, как же я не догадался. -------------------- |
|
|
|
14 Nov 2015, 14:19
(Сообщение отредактировал Gavek - 14 Nov 2015, 14:20)
Сообщение
#313
|
|
![]() collector of time Сообщений: 159 Спасибо сказали: 73 раза |
С Наложением ID не очень качественно выходит. Id приходится все равно закрывать, прежде чем открыть диалог другого героя.
-------------------- |
|
|
|
14 Nov 2015, 14:25
Сообщение
#314
|
|
![]() Анти-Всë Сообщений: 2 989 Спасибо сказали: 2377 раз |
Поясни, как ты сделал.
-------------------- Circle of destruction, hammer comes crushing
Powerhouse of energy Whipping up a fury, dominating flurry We create the battery |
|
|
|
16 Nov 2015, 08:00
(Сообщение отредактировал Gavek - 16 Nov 2015, 09:26)
Сообщение
#315
|
|
![]() collector of time Сообщений: 159 Спасибо сказали: 73 раза |
Сделал ID вызываемый через Box'ы героев (панель справа). Триггер !?CM2. Всё прозрачное, кроме того что нужно. Задача № 1 образовалась -
Клик по box"у с героем, ID закрылся, нужно делать ещё один клик, чтобы активировать. Можно конечно Через !!SN:E(4E1A70h не помню точно)/2... Но это открытие нескольких диалогов, которые закрывать всё равно придется. Некрасиво, мягко говоря. ... пока вот так. -------------------- |
|
|
|
19 Nov 2015, 11:25
(Сообщение отредактировал tolich - 19 Nov 2015, 22:20)
Причина редактирования: восстановлено из урны, дабы целостность диалога торжествовала
Сообщение
#316
|
|
![]() Immortal Сообщений: 589 Спасибо сказали: 891 раз |
feanor, можешь выложить пример создания *.dll/*.era (с учетом понятия "для чайника") или через патчер х86.
Нужно просто вызвать функцию FU77012 по адресу 0х464F9C (место автокаста заклинаний от артов). ERM хукер не камильфо -------------------- |
|
|
|
19 Nov 2015, 19:33
Сообщение
#317
|
|
![]() laughed as one fey Сообщений: 12 167 Спасибо сказали: 20605 раз |
feanor, можешь выложить пример создания *.dll/*.era (с учетом понятия "для чайника") или через патчер х86. Нужно просто вызвать функцию FU77012 по адресу 0х464F9C (место автокаста заклинаний от артов). ERM хукер не камильфо И ты, Брут?(с) Среда какая? Или со среды и начинать? |
|
|
|
19 Nov 2015, 20:44
Сообщение
#318
|
|
![]() Immortal Сообщений: 589 Спасибо сказали: 891 раз |
Точно, не туда запостил
На Вогфоруме было, но он лежит зараза и не думает вставать. Со среды и начать)) Лучше же конечно через патчер, но впринципе без разницы -------------------- |
|
|
|
19 Nov 2015, 22:15
(Сообщение отредактировал feanor - 19 Nov 2015, 22:30)
Сообщение
#319
|
|
![]() laughed as one fey Сообщений: 12 167 Спасибо сказали: 20605 раз |
Ну, окей.
Качаем, например, с целью ознакомления триалку Visual Studio 2008, ставим (дело долгое, часа этак два, запускаем). Почему восьмая? Потому что, например, неко-торые хэдеры сделаны под студию (gcc-based IDE типа кодблокса раньше чуть давились), а дллки из-под двенадцатой студии что-то с собой тянут и на некоторых машинах не идут. Хотя хз, короч. Запускаем. Файл => Создать => Проект. Да, у меня богомерзкая локализованная. ![]() Окей. Запускается мастер. ![]() Далее. Выбираем DLL. ![]() Готово. Открывается проект. Кликаем на dllmain.cpp ![]() DllMain - точка старта, запускаемая в перечисленных ниже случаях, подключении-отключении процесса, подключении-отключении в поток, в общем, можно почитать на MSDN. Нас интересует чистый старт (DLL_PROCESS_ATTACH). Но перед тем как стереть все к чертовой матери, нужно (хотя и не обязательно) отключить предкомпилированные заголовки. Это такая сомнительная фича, которая сделана для ускорения компиляции кода. Другое дело, что она заодно превращает деревья инклудов в труднопредсказуемую лапшу. Хм. В общем, отключаем. ![]() С/С++ -> Предварительно скомпилированные заголовки. ![]() Переключаем конфигурации на "Все", выставляем "Не использовать предварительно скомпилированные заголовки". ![]() Окей. Теперь время ВЫРЕЗАТЬ ВЫРЕЗАТЬ ВЫРЕЗАТЬ ВЫРЕЗАТЬ. Можно выпилить stdafx.h и stdafx.cpp (и их упоминания в инклудах), но это не так важно уже. Заменяем код в dllmain.cpp на Код #include <windows.h> #include <stdio.h> #include "..\..\include\era.h" #include "..\..\include\patcher_x86_commented.hpp" Patcher * globalPatcher; PatcherInstance *patcher; BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { if (ul_reason_for_call == DLL_PROCESS_ATTACH) { globalPatcher = GetPatcher(); patcher = globalPatcher->CreateInstance("itsmustbeveryuniuename"); ConnectEra(); } return TRUE; } Ну, пути к инклудам - свои: у меня инклуды лежат на одном уровне с папками проектов. Создаем и инициализируем объект патчера, коннектимся к Эре. Пишем хук. В DllMain, ставим хук: Код patcher->WriteLoHook(0x464F9C, (void*)hook_464F9C); LoHook - низкоуровневый ход, предназначенный для мелких правок уровнем чуть выше ассемблера. При активном использовании начисто лишает шансов разобраться, что ваще происходит на пытаемом участке. Есть еще HiHook, служит для перехвата вызовов функций. много что еще есть, лучше посмотреть в прекрасно документированном заголовочнике. перед DllMain создаем функцию хука: Цитата int __stdcall hook_464F9C(LoHook* h, HookContext* c) { FireErmEvent(77012); return EXEC_DEFAULT; } FireErmEvent- эрошная функция. EXEC_DEFAULT - выполнить затертый хуком код. Из с можно выдрать, например, значения регистров, если надо. Таким образом, код сейчас выглядит так: ![]() Компилируем (F5 или кнопка с зеленой стрелочкой, стоит переключиться перед этим в Release) ![]() Появляется окно с предложением приаттачиться к процессу, отказываемся. Наша длл лежит в <project_name>/release/Test.dll все, кладем, тестируем (я не гонял, ага) скачать: https://dl.dropboxusercontent.com/u/61759222/HoMM/fish.zip |
|
|
|
19 Nov 2015, 23:09
(Сообщение отредактировал igrik - 19 Nov 2015, 23:09)
Сообщение
#320
|
|
![]() Immortal Сообщений: 589 Спасибо сказали: 891 раз |
А может не билдится, потому что не указаны инклуды патчера x86? а то у меня их нету, и опять млин мертвый вогфорум с этими исходниками((
-------------------- |
|
|
|
![]() ![]() |
| Текстовая версия | Сейчас: 20 December 2025 - 20:55 |
|
Copyright by Алексей Крючков
Programming by Degtyarev Dmitry |
|