Хуки на исполняемый код из ERA |
Здравствуйте, гость ( Вход | Регистрация )
Хуки на исполняемый код из ERA |
21 Jan 2019, 05:53
(Сообщение отредактировал Richter - 21 Jan 2019, 05:59)
Сообщение
#21
|
|
collector of time Сообщений: 159 Спасибо сказали: 73 раза |
Можно и поставить хук на 4Е1F2А... Вылет "без объяснения причин". ...в нужном тебе триггере получаешь адреса следующих данных: HeroSpecWoG[номер_твоего_героя].SpecPicInd[0] и HeroSpecWoG[номер_твоего_героя].SpecPicInd[1] и заменяешь в них номера картинок специализаций. Как это делается? Триггер !?CM2; -------------------- |
|
|
21 Jan 2019, 09:46
Сообщение
#22
|
|
---------------------- New_Life_of_Heroes ---------------------- Сообщений: 236 Спасибо сказали: 356 раз |
Вылет "без объяснения причин". Написано ж, хук на 4Е1F2А. Зачем вы поставили его на 5FF3A0? Вам нужно перехватить вызов процедуры, а не саму процедуру (т.е. должно быть "mov dword [4Е1F2B], адрес_вашей_функции"). И выход из вашей функции должен уходить на дальнейший код (т.е. на 4E1F2F) со сдвигом стека. Соответственно, вызов функции, изменяющий элемент диалога с нужными вам параметрами (т.е. с нужным вам номером спрайта специализации), вы тоже должны сделать в вашем хуке, иначе картинка специализации просто не появится в диалоге. Как это делается? Триггер !?CM2; Любой триггер, идущий после заполнения данными по-умолчанию таблицы HeroSpecWoG. Да хоть в Триггер_Перед_показом_карты. -------------------- WoG + MoP + HoA + Forge + Bastion = ERA+
|
|
|
21 Jan 2019, 10:46
(Сообщение отредактировал Richter - 21 Jan 2019, 10:54)
Сообщение
#23
|
|
collector of time Сообщений: 159 Спасибо сказали: 73 раза |
Написано ж, хук на 4Е1F2А.. Точно, без инициативы никуда) Исправил. Правда ничего похожего на нужное значение не обнаружено. Любой триггер, идущий после заполнения данными по-умолчанию таблицы HeroSpecWoG. Да хоть в Триггер_Перед_показом_карты. Про это всё равно не понятно) А где в WoG на UN:G2 хук стоит? -------------------- |
|
|
21 Jan 2019, 11:09
(Сообщение отредактировал XEPOMAHT - 21 Jan 2019, 11:14)
Сообщение
#24
|
|
---------------------- New_Life_of_Heroes ---------------------- Сообщений: 236 Спасибо сказали: 356 раз |
Правда ничего похожего на нужное значение не обнаружено. Его нужно самому записывать в стек и вызывать соответствующую функцию, устанавливающую элемент диалога. Само по себе оно в твоём коде не появится. А где в WoG на UN:G2 хук стоит? Зачем там нужен хук, если UN:G2 изменяет только воговскую таблицу HSpecNames и никак не влияет на оригинальный код? Код case 2: // Спец.Героев 2/номер_героя/тип_текста(3-картинка)/zvar(номер картинки спец+1) t=Mp->n[1]; if((t<0)||(t>=HERNUM)){ MError("\"!!UN:G\"-wrong hero number."); RETURN(0) } t2=Mp->n[2]; if((t2<0)||(t2>3)){ MError("\"!!UN:G\"-wrong herospec text type number (0...3)."); RETURN(0) } if(t2==3){ // картинка v=HSpecNames[t].PicNum-1; if(Apply(&v,4,Mp,3)) break; HSpecNames[t].PicNum=v+1; break; } v=HSpecNames[t].Var[t2]; if(Apply(&v,4,Mp,3)) break; HSpecNames[t].Var[t2]=v; if(v!=0){ if((v<1)||(v>1000)){ MError("\"UN:G\"-wrong z var index (1...1000)."); RETURN(0) } switch(t2){ case 0: // short HSpecTable[t].SpShort=ERMString[v-1]; break; case 1: // full HSpecTable[t].SpFull=ERMString[v-1]; break; case 2: // descr HSpecTable[t].SpDescr=ERMString[v-1]; } }else{ switch(t2){ case 0: // short HSpecTable[t].SpShort=HSpecBack[t].SpShort; break; case 1: // full HSpecTable[t].SpFull=HSpecBack[t].SpFull; break; case 2: // descr HSpecTable[t].SpDescr=HSpecBack[t].SpDescr; break; } } break; default: MError("\"!!UN:G\"-wrong first parameter."); RETURN(0) } break; -------------------- WoG + MoP + HoA + Forge + Bastion = ERA+
|
|
|
21 Jan 2019, 11:56
(Сообщение отредактировал Richter - 21 Jan 2019, 12:06)
Сообщение
#25
|
|
collector of time Сообщений: 159 Спасибо сказали: 73 раза |
Его нужно самому записывать в стек и вызывать соответствующую функцию Программистом не являюсь пока что. Как то картинка появляется в диалоге, а мне просто нужен доступ к её номеру в пределах функции обновления, для изменения. Например регистр EDX используемый в адресе 4E1F2F уже содержит номер картинки ,сам номер в динамическом адресе. Изменения в последнем ничего не дают, видимо потому что после call. -------------------- |
|
|
21 Jan 2019, 12:37
Сообщение
#26
|
|
---------------------- New_Life_of_Heroes ---------------------- Сообщений: 236 Спасибо сказали: 356 раз |
Например регистр EDX используемый в адресе 4E1F2F уже содержит номер картинки ,сам номер в динамическом адресе. EDX в этой функции может содержать номер героя ИЛИ адрес структуры героя (т.к. функция его использующая - универсальная). Менять - не советую - будут вылеты. Проще делать БЕЗ ХУКОВ (что за мания ставить хуки, когда можно сделать без них). -------------------- WoG + MoP + HoA + Forge + Bastion = ERA+
|
|
|
21 Jan 2019, 12:44
(Сообщение отредактировал Richter - 21 Jan 2019, 12:59)
Сообщение
#27
|
|
collector of time Сообщений: 159 Спасибо сказали: 73 раза |
Мания, потому что результата хочется, а тут уже кто как умеет). Сможете подсказать как получить значение?
-------------------- |
|
|
21 Jan 2019, 14:31
(Сообщение отредактировал feanor - 21 Jan 2019, 14:31)
Сообщение
#28
|
|
laughed as one fey Сообщений: 12 166 Спасибо сказали: 20585 раз |
По-моему, в !?CM2 хук вообще не поможет, потому что картинка уже нарисована и является частью диалога героя.
Надо, видимо, сообщение отправлять. |
|
|
21 Jan 2019, 14:46
(Сообщение отредактировал igrik - 21 Jan 2019, 15:04)
Сообщение
#29
|
|
Immortal Сообщений: 589 Спасибо сказали: 890 раз |
Мания, потому что результата хочется, а тут уже кто как умеет). Сможете подсказать как получить значение? Код !?FU77004; триггер ЭРА (открытие окна героя) !!VRy2:S<номер_героя> *16 +10787776; !!UN:Cy2/4/?y3; !!VRy3:-1; !!IF:M^Номер картинки %Y3^; ; заменяем картинку специализации (на стрелковые башни) !!UN:Cy2/4/357; номер картинки 356 +1 И вот сразу работающий скрипт при любом клике в окне героя Код !?CM2; [клик в окне героя №28 (Мальком)]
!!VRy2:S28 *16 +10787776; [таблица HSpecNames[hero_number].PicNum] !!CM:I?y3; [оплучаем id элемента клика] !!FU|y3<1/y3>356:E; [выход, если вышли за границы диапазона картинок] !!VRy3:+1; [+1 к номеру картинки (так работает WoG)] !!UN:Cy2/4/y3; [установили номер картинки] !!UN:R3/-1; [обновили диалог героя] -------------------- |
|
|
23 Jan 2019, 16:03
(Сообщение отредактировал Richter - 25 Jan 2019, 16:36)
Сообщение
#30
|
|
collector of time Сообщений: 159 Спасибо сказали: 73 раза |
Получить, изменить предлагаемые вторичные навыки при повышении уровня героя.
Код !?FU303045;
!!SN:L^EraPlugins\erm_hooker.era^/?y1 Ay1/^SetHook^/?y2; !!SN:Ey2/1/5090856/x1; !?FU318945; !!SN:X?y1; ; EDI (0), ESI (4), EBP (8), ESP (12), EBX (16), EDX (20), ECX (24), EAX (28) ; RetAddr (32) !!VRy2:Sy1 +0; переход к EDI !!VRy4:Sy1 +4; переход к ESI !!UN:Cy2/4/?y3; узнать EDI (правый навык) !!UN:Cy4/4/?y5; узнать ESI (левый навык) !!UN:Cy2/4/0; установить правый навык на поиск пути !!UN:Cy4/4/0; установить левый навык на поиск пути !?HL-1;Триггер повышения уровня !!FU303045:P318945; Выполнить функцию -------------------- |
|
|
17 Jul 2019, 20:29
(Сообщение отредактировал Richter - 18 Aug 2019, 16:17)
Сообщение
#31
|
|
collector of time Сообщений: 159 Спасибо сказали: 73 раза |
Код !?FU77004; триггер ЭРА (открытие окна героя) !!VRy2:S<номер_героя> *16 +10787776; !!UN:Cy2/4/?y3; !!VRy3:-1; !!IF:M^Номер картинки %Y3^; К сожалению на получение картинки специализации героя не работает, выдаёт значение -1 в триггерах !?FU77004, !?CM2; На установку работает хорошо. Подскажите как узнать картинку специализации героя плиз. Разобрался, специализации соответствуют порядковым номерам героя. Вопрос отпадает. -------------------- |
|
|
Текстовая версия | Сейчас: 18 April 2024 - 15:25 |
Copyright by Алексей Крючков
Programming by Degtyarev Dmitry |