Создаем internal мультихак, на примере CryEngine3 SDK [Game Type]
В данной статье, мы научимся определять тип комнаты, в которой мы находимся и что-то делать в зависимости от этого. Есть множество вариантов использовать это. Например, вы хотите, чтобы какая-то ваша функция работал в одном режиме, но не работала в другом. Ещё пример, рисовать скелеты на противниках (когда мы до этого дойдём). Порядок костей в PvE и PvP разный, поэтому, без определения типа комнаты вам не обойтись.
В игре существует 10 типов комнат:
- Лобби игры
- Командный бой
- Захват флага
- Игроки против ботов
- Подрыв
- Штурм
- Каждый сам за себя
- Уничтожение
- Доминация
- Выживание
Для того, чтобы успешно определять тип комнаты в которой мы находимся, нам необходимо посмотреть это через структуру ICvar и смещение в ней. Для типа комнаты, это смещение равно ICvar + 0x600
Добавим в наш код новое смещение
#define ICVAR_OFFS_GAMETYPE 0x600
Добавим в перечисление CvarOffsets новое значение
E_GAMETYPE = ICVAR_OFFS_GAMETYPE
Теперь наше перечисление со смещениями, выглядит так
enum eCvarOffsets : DWORD64 { E_IDLECHECK = ICVAR_OFFS_IDLECHECK, E_LOBBYAFK = ICVAR_OFFS_LOBBYAFK, E_INGAMEAFK = ICVAR_OFFS_INGAMEAFK, E_GAMETYPE = ICVAR_OFFS_GAMETYPE };
Добавим в класс ICvar новый метод. Теперь класс ICvar выглядит так
class ICvar { public: template <class T> inline void SetValue(DWORD64 Offset, T Value){*(T*)((DWORD64)this + Offset) = Value;} template <class T> inline T GetValue(DWORD64 Offset) { return *(T*)((DWORD64)this + Offset); } static ICvar* Base() { return *(ICvar**)ICVAR_ADDR; } };
Создадим перечисление со всеми возможными видами комнат
enum eRoomType { E_LOBBY = 0, E_TEAMDEATHMATCH, E_OCCUPATION, E_PVE, E_PLANTTHEBOMB, E_STORM, E_DEATHMATCH, E_DESTRUCTION, E_DOMINATION, E_SURVIVAL };
Далее, получение типа комнаты
INT GetRoomType() { return ICvar::Base()->GetValue<int>(eCvarOffsets::E_GAMETYPE); }
И всё, что вам остаётся сделать, это сравнить тип комнаты с нужным вам и что-то сделать
if (GetRoomType() == eRoomType::E_PLANTTHEBOMB) { //do something }
Если вам что-то не понятно, не стесняйтесь задавать свои вопросы в ЛС Discord или ниже в комментариях.
-
2
2 Комментария
Рекомендуемые комментарии