Wake of Gods Forum | Форум Во Имя Богов

Full Version: Исследование героев
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
kostya_76, скомпилировал на VirtualPascal:
http://wikisend.com/download/110454/Tent.dll

FRAME соответствует опции W в Delphi. Utils не нужен.
Berserker, спасибо, скачал, работает.
Только цель как-бы в другом: получить работоспособный пример-шаблон подключения длл к Эре. Причем на удобной для меня платформе. В этом смысле больше бы подошел билдерAb, но хотя-бы на дельфи для начала.
Пробовал скомпилировать эту длл в Virtual Pascal v2.1 - вообще ничего не получилось. Да и после попыток работы с ним вообще всякое желание пропадает этим заниматься.

Добавил эту самую директиву W- вместо FRAME- - не помогло.
Хотя бы знать в каком направлении копать Sm.
Имеет ли смысл пытаться в отладчике докопаться до алгоритма получения этого адреса: @HOOK_tent? Думаю, это не самый верный путь.
Quote:получить работоспособный пример-шаблон подключения длл к Эре
Есть пример для GNU C++ и для Delphi.

В Эре 1.9+ Tools\Era\SDK
Berserker, Так в примере подключение через длл ЕРМ-инструкций, я естественно смотрел этот пример и пробовал подключать.
Но интересует именно встраивание хуков, в частности создание с их помощью триггеров, как в примере МоР'а. Поэтому и хочу разобраться, почему не получается.

Или вот прикладной пример: нужно встраивать программу создания зеркальной карты для подмены исходной карты, созданной генератором прямо в игре. Может когда-нибудь до этого доберусь.
Попробуйте посмотреть в Era\Tools\Era\Sources\Era 1.9 Delphi:
triggers.pas

А вообще, создание нового события - вещь не тривиальная. Нужно сперва в дизассемблере определить параметры, место перехвата и после уже писать сам перехват. Если вы для примера укажите адрес в коде игры, в который хотите вставить перехватчик, я приведу код для перехвата. При этом важно знать, в каких регистрах и адресах памяти на момент перехвата лежат нужные вам данные.
Обновим тень перемещения:
493350 - F (0, 1); THISCALL;

Теперь если поменять скриптом скорость монстра, можно и сеточку обновить...
(10.12.2011 13:50)Berserker Wrote: [ -> ]kostya_76, скомпилировал на VirtualPascal:
http://wikisend.com/download/110454/Tent.dll
What this dll do?
New !?FU29500 trigger for tent I suppose.
Уже несколько человек спрашивало…
Code:
; Обновить экран встречи героев
!!UN:C6962576/4/?y1; [6A3D90h] - swapManager
!!SN:E5957888/2/y1;
Не помню, но артефакты в слотах, вроде, обновляются отдельно.
(10.12.2011 16:22)Berserker Wrote: [ -> ]
Quote:получить работоспособный пример-шаблон подключения длл к Эре
Есть пример для GNU C++ и для Delphi.

В Эре 1.9+ Tools\Era\SDK
Как создать хук с помощью этого инструмента я понял. Вот только в Делфи у меня не получается создать форму в длл. Вылетает игра. В книгах обычно примеры создания форм в длл с вызовом из приложения, также написанного на Делфи .

В билдере получается форму создавать, в Делфи - хуки)

А код для GNU С++ в билдере не компилится.

Есть длл с хуком для подмены файла карты. После генерации карты, до загрузки. Подменял под отладчиком - работает.
Создаю форму. Вызываю Form1.Show(); хоть в обработчике хука, хоть при загрузке длл - вылет.
Так тоже не получается:
VAR AOwner: TComponent;
Form1 := TForm1.Create(AOwner);
Form1.Show();

Хотя в любом случае, программа для обработки карты написана на С++, и подключать ее в Делфи - это извращение.
(12.02.2012 00:33)GreyGhost Wrote: [ -> ]делфи это всего навсего расширение паскаля
Я как-бы в курсе)


(12.02.2012 00:33)GreyGhost Wrote: [ -> ]а вот создание FORM(окна) для перехвата функции - это извращение.

   
Откуда такое смелое предположение о цели создания формы?
Кроме как для организации интерфейса, она мне не нужна)
В приведенном мною примере особой связи между хуком и созданием формы нет.

А вообще, спасибо за содержательный комментарий.
GreyGhost, да брось. И чего ты пост потёр из Кино/Сериалы? )
kostya_76, а какие ошибки в билдере?
(12.02.2012 00:26)kostya_76 Wrote: [ -> ]В билдере получается форму создавать, в Делфи - хуки)
так сделай две библиотеки Sm и вызывай одну из другой
(12.02.2012 13:16)Berserker Wrote: [ -> ]kostya_76, а какие ошибки в билдере?

Вот такие:
Я вообще не понимаю, что означает после подстановки строка:
typedef __declspec(align(1)) struct TTxtFile
А именно - что такое (align(1))

gamecreator Wrote:так сделай две библиотеки Sm и вызывай одну из другой

Если бы знал как, то наверное и хук смог бы написать на С++ без использования SDK.
kostya_76, запрещает выравнивание полей в структуре по границе в 4 байта или более. Для билдера попробуй убрать мой макрос и обернуть эти структуры в:
Code:
#pragma pack(1)
...описание типа...
#pragma pack()
Reference URL's