Создаем internal мультихак, на примере CryEngine3 SDK [Kick from PvE]
В этой статье, мы с вами расширим наш проект, функцией для исключения любого союзника с любой спецоперации или PvE миссии, в любой момент.
Система кика игроков со спецоперации и PvE работает по следующему принципу:
- Автоматическое исключение за бездействие (по таймеру)
- Исключение голосованием игроков
Проблема заключается в том, что если игрок активен (например, использует афкбот), система не сможет автоматически исключить его. У вас остаётся только единственный вариант, это голосование игроков. Но и здесь есть проблема. Она заключается в том, что после 2-3 контрольных точек, флаг возможности голосования переключается и запустить голосование игроков невозможно.
Наша задача включить функцию кика и указать количество контрольных точек, в течении которых она будет активна.
Добавим в наш код новые смещения
#define ICVAR_OFFS_ENABLEKICK 0x498 #define ICVAR_OFFS_PVEKICK 0x49C
В итоге, мы имеем такой набор смещений
#define ICVAR_ADDR 0x1420DD458 #define IGAMEFRAMEWORK_ADDR 0x1420DE108 #define IGAMEFRAMEWORK_GETCLIENTACTOR 0x470 #define ICVAR_OFFS_IDLECHECK 0x168 #define ICVAR_OFFS_LOBBYAFK 0x7B0 #define ICVAR_OFFS_INGAMEAFK 0x5D0 #define ICVAR_OFFS_ENABLEKICK 0x498 #define ICVAR_OFFS_PVEKICK 0x49C #define ICVAR_OFFS_ADVERTISING 0x90 #define ICVAR_OFFS_PERSONAL_OFFER 0xB4 #define ICVAR_OFFS_CHATENABLED 0xB20 #define ICVAR_OFFS_LOBBYCHATDELAY 0xB28 #define ICVAR_OFFS_INGAMECHATDELAY 0xB30 #define ICVAR_OFFS_GAMETYPE 0x600
Добавим в перечисление CvarOffsets новые значения
E_ENABLEKICK = ICVAR_OFFS_ENABLEKICK, E_PVEKICK = ICVAR_OFFS_PVEKICK,
Теперь наше перечисление со смещениями, выглядит так
enum eCvarOffsets : DWORD64 { E_IDLECHECK = ICVAR_OFFS_IDLECHECK, E_LOBBYAFK = ICVAR_OFFS_LOBBYAFK, E_INGAMEAFK = ICVAR_OFFS_INGAMEAFK, E_ENABLEKICK = ICVAR_OFFS_ENABLEKICK, E_PVEKICK = ICVAR_OFFS_PVEKICK, E_ADVERTISING_OFF = ICVAR_OFFS_ADVERTISING, E_PERSONAL_OFFER = ICVAR_OFFS_PERSONAL_OFFER, E_CHATENABLED = ICVAR_OFFS_CHATENABLED, E_LOBBYCHATDELAY = ICVAR_OFFS_LOBBYCHATDELAY, E_INGAMECHATDELAY = ICVAR_OFFS_INGAMECHATDELAY, E_GAMETYPE = ICVAR_OFFS_GAMETYPE, };
Пишем функцию, для включения кика игроков в любое время
void EnableKick() { IGameFramework* pGameFramework = IGameFramework::Base(); if (!pGameFramework) return; ICvar* pCvar = ICvar::Base(); if (!pCvar) return; IActor* pActor = nullptr; if (pGameFramework->GetClientActor(&pActor)) { pCvar->SetValue(eCvarOffsets::E_ENABLEKICK, TRUE); pCvar->SetValue(eCvarOffsets::E_PVEKICK, UCHAR_MAX); } }
Если вам что-то не понятно, не стесняйтесь задавать свои вопросы в ЛС Discord или ниже в комментариях.
-
1
-
1
4 Комментария
Рекомендуемые комментарии