Плагины на C++
0. Установите Microsoft Visual Studio. Бесплатная версия Microsoft Visual Studio 2008 Express Edition здесь: https://go.microsoft.com/fwlink/?LinkId=104679 (895 МБ). При установке выберите Microsoft Visual C++ 2008 Express Edition.
1. Скачайте заголовочный файл patcher_x86.hpp (его нужно будет скопировать в папку, где лежит dllmain.cpp, см. далее):
2. Создайте новый проект: Файл -> Создать -> Проект... (Ctrl + Shift + N), выберите шаблон Visual C++/Win32/Проект Win32, дайте ему какое-нибудь осмысленное название, запомните полный путь к Вашему проекту и смело жмите OK
3. Откроется мастер приложения Win32. Жмите "Далее >".
4. Выберите тип приложения: "Библиотека DLL" и жмите "Готово".
5. В левой части экрана появилось окошко "Обозреватель решений". Делаем двойной клик на dllmain.cpp и меняем код на следующий:
- Код: Выделить всё
// Раскомментируйте строчку ниже, если у Вас Microsoft Visual Studio 2017 или новее
// #include "pch.h"
// Раскомментируйте строчку ниже, если у Вас более старая версия Microsoft Visual Studio
// #include "stdafx.h"
// Следующая строчка нужна для для функции sprintf()
// Можно удалить, если не используете в Вашем плагине
#include <stdio.h>
// Здесь указываем относительный путь к библиотеке патчера
#include "patcher_x86.hpp"
Patcher* _P;
PatcherInstance* _PI;
int __stdcall TestLoHook(LoHook* h, HookContext* c)
{
char TextBuffer[256];
DWORD GameMgr = *(DWORD*)0x699538;
short Day = *(short*)(GameMgr + 0x1F63E);
short Week = *(short*)(GameMgr + 0x1F640);
short Month = *(short*)(GameMgr + 0x1F642);
sprintf(TextBuffer, "Hello, World!\n\nDays passed: %d", Day + 7 * Week + 28 * Month - 36);
CALL_12(void, __fastcall, 0x4F6C00, TextBuffer, 1, -1, -1, -1, 0, -1, 0, -1, 0, -1, 0);
return EXEC_DEFAULT;
}
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
static bool plugin_On = false;
if ( DLL_PROCESS_ATTACH == ul_reason_for_call )
{
if ( !plugin_On )
{
plugin_On = true;
_P = GetPatcher();
_PI = _P->CreateInstance((char*)"HD.Plugin.TestPlugin");
_PI->WriteLoHook(0x4C80F4, TestLoHook);
}
}
return TRUE;
}
6. Сохраняем решение (Ctrl + S).
7. Выбираем конфигурацию решения "Release" (Просто выбираем "Release" из списка вверху окна рядом со значком "Начать отладку (F5)" или жмём Alt + F7, в левой части окна выбираем "Свойства конфигурации", жмём кнопку "Диспетчер конфигураций..." и выбираем вверху - "Активная конфигурация решения: Release", Закрыть, OK), теперь жмём F7 (Построение -> Построить решение).
8. Идём в папку проектов, открываем папку с названием Вашего проекта -> Release и копируем dll оттуда прямо в папку _HD3_Data\Packs\{Название Вашего плагина}.
9. Запускаем HD Launcher, добавляем плагин (Окошко "Плагины", кнопка "Подключить") и жмём "Играть".
A. Поздравляю! Только что Вы создали свой первый плагин для HD мода.
P. S. Теперь Вам только осталось разобраться, какие изменения вносит плагин и как их делать самостоятельно, и Вы - полноценный начинающий мододел.
Плагины на Delphi
0. Скачайте PatchAPI:
1. Создайте DLL (File -> New -> Other..., Dynamic-link Library) со следующим кодом (код приведён в качестве примера):
- Код: Выделить всё
library MyFirstDelphiPlugin;
uses System.SysUtils, Windows, PatchApi;
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'Days 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.
Примеры готовых плагинов Вы можете найти в этой теме: Пользовательские плагины для HD мода