Изменение типов существ, производимых некромантией и плащом короля нежити:
- Код: Выделить всё
// creatures produced by necromancy
_PI->WriteDword(0x4E3F3A, 56); // skeletons
// creatures procuced by cloak of the undead king
_PI->WriteDword(0x4E3F33, 58); // skeleton warriors ; with basic necromancy
_PI->WriteDword(0x4E3F2A, 60); // walking dead ; with advanced necromancy
_PI->WriteDword(0x4E3F1F, 62); // zombies ; with expert necromancy
Но это все и так, наверное, знали, поэтому разобрал нетронутое из базы, а именно специализации по спеллам.
Например, увидел там неподписанный блок, обращающийся к этой строке:
Проверил - как я и думал, она отвечает за специализацию по заклинанию "Палач".
Эта специализация уникальна тем, что работает только на первые 4 уровня существ. Но ее можно разделить на все 7 уровней:
- Код: Выделить всё
// slayer specialty bonus
_PI->WriteDword(0x63EAC4, 7); // lvl 1 creatures
_PI->WriteDword(0x63EAC8, 6); // lvl 2 creatures
_PI->WriteDword(0x63EACC, 5); // lvl 3 creatures
_PI->WriteDword(0x63EAD0, 4); // lvl 4 creatures
_PI->WriteDword(0x63EAD4, 3); // lvl 5 creatures
_PI->WriteDword(0x63EAD8, 2); // lvl 6 creatures
_PI->WriteDword(0x63EADC, 1); // lvl 7 creatures
Со строчкой сверху все оказалось еще проще - это классическая специализация по бафам/дебафам, с ней все абсолютно так же:
- Код: Выделить всё
// buff/debuff specialty bonus
_PI->WriteDword(0x63EAA8, 7); // lvl 1 creatures
_PI->WriteDword(0x63EAAC, 6); // lvl 2 creatures
_PI->WriteDword(0x63EAB0, 5); // lvl 3 creatures
_PI->WriteDword(0x63EAB4, 4); // lvl 4 creatures
_PI->WriteDword(0x63EAB8, 3); // lvl 5 creatures
_PI->WriteDword(0x63EABC, 2); // lvl 6 creatures
_PI->WriteDword(0x63EAC0, 1); // lvl 7 creatures
Дальше у нас идет специализация по заклинанию "Удача":
К сожалению, она не добавляет, а заменяет ее эффект.
- Код: Выделить всё
_PI->WriteDword(0x4E62CE, 50); // luck spell effect specialty effect
Специализация по заклинанию "Разрушающий луч":
В отличии от удачи, не заменяет, а добавляет.
- Код: Выделить всё
_PI->WriteDword(0x4E62E6, 50); // disrupting ray spell specialty bonus
Здесь судя по sar 1 (арифметический сдвиг вправо на один бит), выполняется деление на 2.
Делаю вывод, что это специализация по заклинанию "Волшебная стрела" - полученное число идет в бонус.
Без использования хуков, я так понимаю, в положительную сторону ее не изменить (разве что заменой 1 на 0, можно ли так?)
- Код: Выделить всё
int __stdcall c_ma_spec(LoHook* h, HookContext* c)
{
здесь должен быть эквивалент "sal eax, 2", подскажете, как он должен выглядеть?
return EXEC_DEFAULT;
}
...
_PI->WriteLoHook(0x4E62F7, c_ma_spec);
Осталась последняя неподписанная специализация, методом исключения делаем вывод, что она по ударным заклинаниям (+3% урона за каждые (1 * уровень существа-жертвы) уровней героя)
в ней побольше кода, чем в других Самый простой способ на нее повлиять - изменить ее множитель
он записан в немного необычной форме