Объявления
Поздравляем
Roman2211


Друзья, если не получается зарегистрироваться, напишите на почту vdv_forever@bk.ru.
Я оторву свою задницу от всех дел и обязательно Вас активирую! :smile10:
Добро пожаловать на геройский форум! :smile25:

Как создать плагин для HD мода

Герои Меча и Магии III: Возрождение Эрафии, Герои Меча и Магии III Дыхание Смерти, Герои Меча и Магии III Клинок Армагеддона, Герои Меча и Магии III Хроники Героев
offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5587
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2185 раз.

Re: Как создать плагин для HD мода

Сообщение AlexSpl » 10 апр 2020, 09:53

Скачайте аналог patcher_x86 для Delphi (см. PatchApi.pas в архиве):
h3hota.com/HD/Patcher_x86_SDK.zip
Вернуться к началу

offlineArmageddets  
Новичок
Новичок
 
Сообщения: 21
Зарегистрирован: 31 окт 2018, 15:05
Пол: Не указан
Поблагодарили: 2 раз.

Re: Как создать плагин для HD мода

Сообщение Armageddets » 10 апр 2020, 10:02

Спасибо. Длл на делфи уже раньше делал - не проблема, игры писал тоже. Главное разобраться с самим кодированием под герои 3.
Вернуться к началу

offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1318
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 336 раз.

Re: Как создать плагин для HD мода

Сообщение Ben80 » 10 апр 2020, 10:16

Разобраться сразу не так просто, потому что все современное программирование - это ООП, объекты, компоненты и тд. Всю внутреннюю кухню программирования они как правило скрывают. А внутрення кухня программирования - это работа с адресами памяти и инструкции процессора.
Без базового понимания Ассемблера не обойтись. Я в свое время подбирал книжку для этого, и остановился на Крупнике (моя настоящая фамилия - почти такая же :)))
http://publ.lib.ru/ARCHIVES/K/KRUPNIK_A ... _A.B..html
Вернуться к началу

offlineArmageddets  
Новичок
Новичок
 
Сообщения: 21
Зарегистрирован: 31 окт 2018, 15:05
Пол: Не указан
Поблагодарили: 2 раз.

Re: Как создать плагин для HD мода

Сообщение Armageddets » 10 апр 2020, 10:20

Понял. Спасибо.
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5587
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2185 раз.

Re: Как создать плагин для HD мода

Сообщение AlexSpl » 10 апр 2020, 14:04

Проверил. Патчер на Delphi работает. Только пропущена ; перед virtual здесь (строка 124):

Код: Выделить всё
procedure SetValue(value: _dword_) virtual; stdcall; abstract;

Вот пример простенького плагина, который после завершения хода игрока показывает кол-во прошедших игровых дней:

Код: Выделить всё
library MyFirstDelphiPlugin;

uses System.SysUtils, System.Classes, Windows, PatchApi;

// {$R *.res}

var _P: TPatcher;
    _PI: TPatcherInstance;

function TestHook(h: TLoHook; c: PHookContext): Integer; stdcall;
var TextBuffer: string[200];
    GameMgr: PDWORD;
    Day, Week, Month: Word;
begin
  GameMgr := Ptr($699538);
  Day := Word(Ptr(GameMgr^ + $1F63E)^);
  Week := Word(Ptr(GameMgr^ + $1F640)^);
  Month := Word(Ptr(GameMgr^ + $1F642)^);

  TextBuffer := ShortString('Hello, World!'#13#10'Day passed: ' +
    IntToStr(Day + 7 * Week + 28 * Month - 36));

  Call(FASTCALL_, $4F6C00, [TextBuffer, 1, -1, -1, -1, 0, -1, 0, -1, 0, -1, 0]);
  Result := EXEC_DEFAULT;
end;

procedure DLLMain(Reason: Integer);
begin
  if DLL_PROCESS_ATTACH = Reason then
  begin
    _P := GetPatcher;
    _PI := _P.CreateInstance('HD.Plugin.DelphiTest');
    _PI.WriteLoHook($4C80F4, @TestHook);
  end;
end;

begin
  DLLProc := @DLLMain;
  DLLMain(DLL_PROCESS_ATTACH);
end.
Вернуться к началу

offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1318
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 336 раз.

Re: Как создать плагин для HD мода

Сообщение Ben80 » 10 апр 2020, 14:31

Шикарно ! Все переходим с С++ на Delphi :smile1:

Delphi ведь, можно сказать, тоже мой первый язык программирования, а старая любовь не ржавеет... Вот только не навещал я эту любовь лет 10 )))
Вернуться к началу

offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1318
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 336 раз.

Re: Как создать плагин для HD мода

Сообщение Ben80 » 11 апр 2020, 07:01

Статья о конвертировании хедеров С++ в Delphi:
http://www.rvelthuis.de/articles/articles-convert.html
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5587
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2185 раз.

Re: Как создать плагин для HD мода

Сообщение AlexSpl » 08 май 2020, 17:34

Почему возникает следующая ошибка в H3API на VC++ 2008?

Код: Выделить всё
1>e:\projects\vc2008\h3api\h3api\H3Structures/H3Structures.cpp(580) : error C2059: syntax error : 'inline '
Вернуться к началу

offlineRoseKavalier  
Мастер
Мастер
 
Сообщения: 331
Зарегистрирован: 23 сен 2017, 17:00
Пол: Не указан
Поблагодарили: 234 раз.

Re: Как создать плагин для HD мода

Сообщение RoseKavalier » 08 май 2020, 17:41

Delete line 580

_H3API_ is a macro to allow inline for header-only style or compilation as a static library, when I create a function definition with the macro, VS sometimes adds the macro to the return value, here I forgot to delete it.
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5587
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2185 раз.

Re: Как создать плагин для HD мода

Сообщение AlexSpl » 08 май 2020, 17:44

All is OK now. Thanks.
Вернуться к началу

Пред.След.

Вернуться в Общий раздел

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron