-
Ben80
имя: Сергей
- Эксперт
![Эксперт Эксперт](./images/ranks/006.png)
-
- Сообщения: 1318
- Зарегистрирован: 18 июн 2017, 06:49
- Пол:
![Не указан Не указан](./styles/prosilver/imageset/icon_gender_x.gif)
- Поблагодарили: 336 раз.
|
Ben80 » 03 окт 2017, 19:17
Авторы: AlexSpl, Ben80 Название: NewManaVortex Описание: Теперь Водоворот маны восполняет запас маны и добавляет случайное количество (от нуля до полного запаса маны), кроме того, Водоворот маны теперь можно построить только после Гильдии магов 2 уровня. Код- Код: Выделить всё
#define _CRT_RAND_S #define _CRT_SECURE_NO_WARNINGS #include "..\..\include\homm3.h"
Patcher* _P; PatcherInstance* _PI;
static _bool_ plugin_On = 0;
int BuildDepends_Dungeon[] = { 7, -1, 8, 7, -1, 9, 8, -1, 22, -1, 23, -1, 5, -1, 16, -1, 14, -1, 15, 14, -1, 17, 14, -1, 0, -1, 1, 0, -1, 2, 1, -1, 21, 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, 39, 32, -1, 31, 30, -1, 38, 31, -1, 33, 32, 31, -1, 40, 33, -1, 34, 33, -1, 41, 34, -1, 35, 33, -1, 42, 35, -1, 36, 34, 35, 1, -1, 2, -1, 26, -1, -100 };
int __stdcall manaVortex(LoHook* h, HookContext* c) { unsigned int dice; rand_s(&dice); // maxMana (c->eax) - максимальный запас маны: (int)(10 * knowledge * modifier) // curMana (c->ebx) - текущий запас маны: maxMana + rand(1, maxMana) c->ebx = c->eax + (unsigned int)((double)dice / ((double)UINT_MAX + 1) * c->eax) + 1;
return EXEC_DEFAULT; }
// Новое сообщение int __stdcall manaVortexDlg(LoHook* h, HookContext* c) { _Hero_* hero = (_Hero_*)c->edi; char Text[200]; //sprintf(Text, "{%s}, близ вихря маны ваше тело наполняется новой силой. " \ // "Количество маны увеличилось на {%d} ед. и теперь составляет {%d} ед.", sprintf(Text, "{%s}, близ вихря маны ваше тело наполняется новой силой, " \ "количество маны увеличилось.",
hero->name, c->ebx - hero->spell_points, c->ebx); b_MsgBox(Text, MBX_OK); c->return_address = 0x5BDD92; return NO_EXEC_DEFAULT; }
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { if ( DLL_PROCESS_ATTACH == ul_reason_for_call ) { if ( !plugin_On ) { plugin_On = 1; _P = GetPatcher(); _PI = _P->CreateInstance("HD.Plugin.NewManaVortex"); _PI->WriteLoHook(0x5BDD4E, manaVortex); _PI->WriteLoHook(0x5BDD66, manaVortexDlg);
*(int*)0x4EBA5C = (int)BuildDepends_Dungeon;
} } return TRUE; }
|