IPB

Здравствуйте, гость ( Вход | Регистрация )

23 страниц V  « < 14 15 16 17 18 > »   
Reply to this topicStart new topic
> Обсуждение инженерного анализа
Richter
сообщение 10 Nov 2015, 13:37 (Сообщение отредактировал Gavek - 10 Nov 2015, 13:48)
Сообщение #301

collector of time
Сообщений: 159
Спасибо сказали: 73 раза




Глаза буквально смозолил в Иде уже, пытаясь найти куда поставить хук, чтобы окно героя закрывалось. Смысл в том, что необходимо чтобы при клике мышью (или другом действии) обновить изображение HEROSCR4.pcx.
Может для этого и не нужно закрывать окно героя. Наверно нужно как то "перевызвать", что ли Dl_hero_info или типа того. Подставить картинку сумею сам.
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Igrik, сможете глянуть, как сделать кнопку "уволить героя" не активной?


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
igrik
сообщение 10 Nov 2015, 16:33 (Сообщение отредактировал igrik - 10 Nov 2015, 16:36)
Сообщение #302

Immortal
Сообщений: 589
Спасибо сказали: 891 раз




в каком смысле обновить HEROSCR4.pcx? Это же просто задник и что коммандна UN:R3/-1; не подходит?
Опиши в деталях что ты хочешь


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
Barin
сообщение 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. Где ошибка?


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
feanor
сообщение 11 Nov 2015, 15:06
Сообщение #304

laughed as one fey
Сообщений: 12 167
Спасибо сказали: 20605 раз




Триггер не тот. BF можно, например.


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
Richter
сообщение 12 Nov 2015, 11:14
Сообщение #305

collector of time
Сообщений: 159
Спасибо сказали: 73 раза




Цитата(igrik @ 10 Nov 2015, 18:33) *
в каком смысле обновить HEROSCR4.pcx? Это же просто задник и что коммандна UN:R3/-1; не подходит?
Опиши в деталях что ты хочешь

Когда находишься в окне героя, и хочешь посмотреть другого героя через панель справа. Нажимая на этот box с другим героем, менялся и задник диалога. Посмотрел в иде. Там функция построения информации о диалоге перед показом, но видимо работает она только перед показом диалога. Пробовал через ERM через кнопку hsbtns.def Заменяя последнюю цифру в картинке (через адрес) работает. Т.е. через CM, нажал на 30720 закрылся диалог, появился новый. Пробовал через доп.кнопку с такими же параметрами- не работает.


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
MasterOfPuppets
сообщение 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



Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
Richter
сообщение 12 Nov 2015, 11:51 (Сообщение отредактировал Gavek - 12 Nov 2015, 12:00)
Сообщение #307

collector of time
Сообщений: 159
Спасибо сказали: 73 раза




Цитата(MasterOfPuppets @ 12 Nov 2015, 13:21) *
Короче, смотришь функцию обновления окна героя (4E1CC0, емнип). Находишь в ней обновление нужного тебе элемента по ID - и чудишь, если навыки позволяют. Если его обновление не прописано в функции - придется самому прописать. Можно вообще HEROSCR4.pcx превратить в HEROSCR4.def и в зависимости от героя менять номер кадра.

...ммм Это нужно динамическую библиотеку написать для получения таких результатов или в самой программе. Я пока застрял на регистре eax в изучении ассемблера.
Круто. Особенно в def превратить. Вчера только смотрел и думал об этом. За обработку def'а другие функции отвечают вроде. Мне такое не потянуть. Спасибо.


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
feanor
сообщение 12 Nov 2015, 12:51
Сообщение #308

laughed as one fey
Сообщений: 12 167
Спасибо сказали: 20605 раз




Цитата
Окна найма существ/боевых машин героем
Вах. Одын вопрос: использовать для временных переменных v-шки обязательно, а то я бы на y заменил (с коррекцией адреса, понятно)?
Go to the top of the pageAdd Nick
 
+Quote Post
igrik
сообщение 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^;


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
Richter
сообщение 12 Nov 2015, 13:17
Сообщение #310

collector of time
Сообщений: 159
Спасибо сказали: 73 раза




Цитата
менялся и задник диалога.
Да ппц. Как может меняться задник диалога? это же статическое изображение "HEROSCR4.pcx". Как оно может меняться в процессе игры. Или тогда что в твоем понимании "задник диалога". Такое ощущение, что ты говоришь о изменении отображения артов, навыков, монстров и т.п. Так это не задник!

нет, нет...
мне не менять надо. Мне нужно закрыть диалог героя, по требованию, что называется, остальное сам смогу.
Цитата(MasterOfPuppets @ 12 Nov 2015, 13:21) *
Короче, смотришь функцию обновления окна героя (4E1CC0, емнип). Находишь в ней обновление нужного тебе элемента по ID - и чудишь, если навыки позволяют. Если его обновление не прописано в функции - придется самому прописать. Можно вообще HEROSCR4.pcx превратить в HEROSCR4.def и в зависимости от героя менять номер кадра.

MoР понял меня.


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
MasterOfPuppets
сообщение 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



Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
Richter
сообщение 12 Nov 2015, 13:41 (Сообщение отредактировал Gavek - 12 Nov 2015, 13:45)
Сообщение #312

collector of time
Сообщений: 159
Спасибо сказали: 73 раза




Цитата(MasterOfPuppets @ 12 Nov 2015, 15:18) *
Создать новый ID с той же картинкой, который будет идти в отрисовке сразу после задника, а в функции обновления - первым. Делов-то. И не надо закрывать окно героя. ... ....

Это ещё раз доказывает, что всё гениальное просто! В моём моде уже есть такое "наложение". ... блин, как же я не догадался.


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
Richter
сообщение 14 Nov 2015, 14:19 (Сообщение отредактировал Gavek - 14 Nov 2015, 14:20)
Сообщение #313

collector of time
Сообщений: 159
Спасибо сказали: 73 раза




С Наложением ID не очень качественно выходит. Id приходится все равно закрывать, прежде чем открыть диалог другого героя. idontno.gif


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
MasterOfPuppets
сообщение 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



Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
Richter
сообщение 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... Но это открытие нескольких диалогов, которые закрывать всё равно придется. Некрасиво, мягко говоря.
... пока вот так.


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
igrik
сообщение 19 Nov 2015, 11:25 (Сообщение отредактировал tolich - 19 Nov 2015, 22:20)
Причина редактирования: восстановлено из урны, дабы целостность диалога торжествовала
Сообщение #316

Immortal
Сообщений: 589
Спасибо сказали: 891 раз




feanor, можешь выложить пример создания *.dll/*.era (с учетом понятия "для чайника") или через патчер х86.
Нужно просто вызвать функцию FU77012 по адресу 0х464F9C (место автокаста заклинаний от артов). ERM хукер не камильфо


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
feanor
сообщение 19 Nov 2015, 19:33
Сообщение #317

laughed as one fey
Сообщений: 12 167
Спасибо сказали: 20605 раз




Цитата(igrik @ 19 Nov 2015, 12:25) *
feanor, можешь выложить пример создания *.dll/*.era (с учетом понятия "для чайника") или через патчер х86.
Нужно просто вызвать функцию FU77012 по адресу 0х464F9C (место автокаста заклинаний от артов). ERM хукер не камильфо

И ты, Брут?(с)

Среда какая? Или со среды и начинать?
Go to the top of the pageAdd Nick
 
+Quote Post
igrik
сообщение 19 Nov 2015, 20:44
Сообщение #318

Immortal
Сообщений: 589
Спасибо сказали: 891 раз




Точно, не туда запостил fp3.gif
На Вогфоруме было, но он лежит зараза и не думает вставать.
Со среды и начать)) Лучше же конечно через патчер, но впринципе без разницы


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
feanor
сообщение 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


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
igrik
сообщение 19 Nov 2015, 23:09 (Сообщение отредактировал igrik - 19 Nov 2015, 23:09)
Сообщение #320

Immortal
Сообщений: 589
Спасибо сказали: 891 раз




А может не билдится, потому что не указаны инклуды патчера x86? а то у меня их нету, и опять млин мертвый вогфорум с этими исходниками((


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post

23 страниц V  « < 14 15 16 17 18 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 20 December 2025 - 20:55
Copyright by Алексей Крючков
Strategy Gamez by GrayMage
Programming by Degtyarev Dmitry
  Яндекс.Метрика