Добавил поддержку плагинов для версии 2.1 Героев 2 от "Буки" (c фиксом Dispel Magic).
Распаковать в папку Героев 2.
Плагины загружаются в лексикографическом ("алфавитном") порядке.
Плагины:
CPUPatch.dll - CPU патч
Значительно снижает загрузку процессора, но на некоторых системах может тормозить игру. Если тормозит, есть "костыль": запустите в фоне приложение, которое воспроизводит аудио/видео (например, AIMP). Короче, решать Вам, использовать или нет.
ChangeResourceCost.dll - меняет кол-во нужного ресурса для покупки существ (см. ChangeResourceCost.ini). Например, пусть Crusaders дополнительно требуют 2 ед. дерева, а Greater Druids - 1 ед. кристаллов (значения по умолчанию в ChangeResourceCost.ini):
- Код: Выделить всё
[Crusader]
Res=Wood
Num=2
[Greater Druid]
Res=Crystal
Num=1
Максимальное количество ед. ресурса - 255.
Распаковать нужные в папку Plugins.
Код загрузчика Loader.dll - Код: Выделить всё
#include <windows.h>
#include <tchar.h>
#include <string>
#include <algorithm>
#include "dirent.h"
using namespace std;
wstring getExt(wstring pathName) {
int period = pathName.find_last_of(L".");
wstring ext = pathName.substr(period + 1);
return ext;
}
__declspec(dllexport) BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
if ( DLL_PROCESS_ATTACH == ul_reason_for_call ) {
_WDIR* dir;
struct _wdirent* ent;
wstring ext;
if ( ( dir = _wopendir(L"Plugins") ) != NULL ) {
while ( ( ent = _wreaddir(dir) ) != NULL ) {
if ( ent->d_type == DT_REG ) {
ext = getExt(ent->d_name);
transform(ext.begin(), ext.end(), ext.begin(), towlower);
if ( ext == L"dll" ) {
TCHAR dllName[MAX_PATH + 1] = L"Plugins\\";
_tcscat_s(dllName, MAX_PATH + 1, ent->d_name);
try {
if ( LoadLibrary(dllName) == NULL ) throw -1;
}
catch(int e) {
if ( e == -1 ) {
TCHAR errMsg[MAX_PATH + 16] = L"Cannot load \"";
_tcscat_s(errMsg, MAX_PATH + 16, ent->d_name);
_tcscat_s(errMsg, MAX_PATH + 16, L"\"");
MessageBox(NULL, errMsg, L"Plugin Loader", MB_ICONERROR | MB_OK);
}
}
}
}
}
_wclosedir(dir);
}
}
return TRUE;
}
Полезные ссылки:
Как создать свой плагин |
Примеры кода плагинов |
Ещё примеры |
Редактирование ресурсов и кода игры |
Готовые бинарные патчи для Героев 2 |
О патчере patcher_x86