Вкратце, что такое patсher_x86 (тут)
Как создать dll для HD-мода. (тут)
Как создать dll для HD-мода. (тут)
Код
#include "patcher_x86.hpp"
Patcher* _P;
PatcherInstance* _PI;
// Замок
int BuildDepends_Castle[] =
{
0, -1,
1, 0, -1,
2, 1, -1,
3, 2, -1,
6, -1,
5, -1,
22, 5, -1,
14, -1,
15, 14, -1,
16, -1,
17, 6, -1,
7, -1,
8, 7, -1,
9, 8, -1,
11, 5, -1,
12, 11, 16, 0, 14, -1,
13, 12, 9, -1,
30, 7, -1,
37, 30, -1,
31, 30, -1,
38, 31, -1,
33, 30, 16, -1,
40, 33, -1,
32, 33, -1,
18, 32, -1,
39, 32, -1,
19, 39, -1,
21, 33, -1,
35, 21, -1,
42, 35, -1,
34, 33, 0, -1,
41, 34, -1,
36, 34, 2, -1, // Ангелы требуют еще и ГМ3
43, 36, 3, -1, // Архангелы требуют еще и ГМ4
26, -1,
-100
};
// Инферно
int BuildDepends_Inferno[] =
{
7, -1,
21, 7, -1,
8, 7, -1,
22, 8, -1,
9, 8, -1,
5, -1,
16, -1,
14, -1,
15, 14, -1,
0, -1,
23, 0, -1,
1, 0, -1,
2, 1, -1,
3, 2, -1,
4, 3, -1,
11, 5, -1,
12, 11, 16, 14, 0, -1,
13, 12, 9, -1,
30, 7, -1,
18, 30, -1,
37, 30, -1,
19, 37, -1,
32, 30, -1,
24, 32, -1,
39, 32, -1,
25, 39, -1,
31, 30, -1,
38, 31, -1,
33, 31, -1,
40, 33, -1,
35, 33, 0, -1,
42, 35, -1,
34, 33, -1,
41, 34, 0, -1, // ул.Провал требует ГМ1 взамен ГМ2 (согласно описаниям HotA)
36, 33, 5, -1, // Дьяволы не требуют Провал для постройки (34 -> 33)
43, 36, -1,
26, -1,
-100
};
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
static _bool_ plugin_On = 0;
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
if (!plugin_On)
{
plugin_On = 1;
_P = GetPatcher();
_PI = _P->CreateInstance("HD.Plugin.DedMorozzz");
*(int*)0x4EB816 = (int)BuildDepends_Castle;
*(int*)0x4EBA39 = (int)BuildDepends_Inferno;
}
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
Patcher* _P;
PatcherInstance* _PI;
// Замок
int BuildDepends_Castle[] =
{
0, -1,
1, 0, -1,
2, 1, -1,
3, 2, -1,
6, -1,
5, -1,
22, 5, -1,
14, -1,
15, 14, -1,
16, -1,
17, 6, -1,
7, -1,
8, 7, -1,
9, 8, -1,
11, 5, -1,
12, 11, 16, 0, 14, -1,
13, 12, 9, -1,
30, 7, -1,
37, 30, -1,
31, 30, -1,
38, 31, -1,
33, 30, 16, -1,
40, 33, -1,
32, 33, -1,
18, 32, -1,
39, 32, -1,
19, 39, -1,
21, 33, -1,
35, 21, -1,
42, 35, -1,
34, 33, 0, -1,
41, 34, -1,
36, 34, 2, -1, // Ангелы требуют еще и ГМ3
43, 36, 3, -1, // Архангелы требуют еще и ГМ4
26, -1,
-100
};
// Инферно
int BuildDepends_Inferno[] =
{
7, -1,
21, 7, -1,
8, 7, -1,
22, 8, -1,
9, 8, -1,
5, -1,
16, -1,
14, -1,
15, 14, -1,
0, -1,
23, 0, -1,
1, 0, -1,
2, 1, -1,
3, 2, -1,
4, 3, -1,
11, 5, -1,
12, 11, 16, 14, 0, -1,
13, 12, 9, -1,
30, 7, -1,
18, 30, -1,
37, 30, -1,
19, 37, -1,
32, 30, -1,
24, 32, -1,
39, 32, -1,
25, 39, -1,
31, 30, -1,
38, 31, -1,
33, 31, -1,
40, 33, -1,
35, 33, 0, -1,
42, 35, -1,
34, 33, -1,
41, 34, 0, -1, // ул.Провал требует ГМ1 взамен ГМ2 (согласно описаниям HotA)
36, 33, 5, -1, // Дьяволы не требуют Провал для постройки (34 -> 33)
43, 36, -1,
26, -1,
-100
};
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
static _bool_ plugin_On = 0;
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
if (!plugin_On)
{
plugin_On = 1;
_P = GetPatcher();
_PI = _P->CreateInstance("HD.Plugin.DedMorozzz");
*(int*)0x4EB816 = (int)BuildDepends_Castle;
*(int*)0x4EBA39 = (int)BuildDepends_Inferno;
}
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
Создал ДЛЛку, а как её к героям прикрутить теперь то?
И у тебя в коде не инклудится .h файл. Так и надо?