bool __fastcall hooks::hooked_sv_cheats(ICvar* ecx, void* edx)
{
// since i can't figure out on how to fix UpdateVisibilityAllEntities to work ( it's crashing. ) maybe i'll just hook it with cam_think as if it was the return address to this.
static auto original_fn = sv_cheats_hook->get_func_address <sv_cheats_t>(13);
static const auto return_fn = util::FindSignature("client.dll", "85 C0 75 30 38 86");
if (_ReturnAddress() == (void*)return_fn)
return true;
return original_fn(ecx);
}
static const auto sv_cheats = m_cvar()->FindVar(crypt_str("sv_cheats"));
hooks::sv_cheats_hook = new vmthook(reinterpret_cast<DWORD**>(sv_cheats));
hooks::sv_cheats_hook->hook_function(reinterpret_cast<uintptr_t>(hooks::hooked_sv_cheats), 13); //-V107 //-V221
Это можно использывать как Unlock hidden cvars?это потому, что вы используете другой код thirdperson (вы используете код, который не вызывает "thirdperson" в качестве консольной команды), поэтому UpdateVisibilityAllEntities не будет вызван, поскольку sv_cheats не включен, игры вынуждают вас от первого лица, но ваш чит также заставляет третье лицо, что делает вещи иначе UpdateVisibilityAllEntities не будет работать. поэтому для этого вам нужно использовать sv_cheats 1 или вы можете подключить sv_cheats, а затем проверить, является ли returnaddress CamThink. несколько примеров кода:
hooked_cvars.cpp:
main.cpp:C++:bool __fastcall hooks::hooked_sv_cheats(ICvar* ecx, void* edx) { // since i can't figure out on how to fix UpdateVisibilityAllEntities to work ( it's crashing. ) maybe i'll just hook it with cam_think as if it was the return address to this. static auto original_fn = sv_cheats_hook->get_func_address <sv_cheats_t>(13); static const auto return_fn = util::FindSignature("client.dll", "85 C0 75 30 38 86"); if (_ReturnAddress() == (void*)return_fn) return true; return original_fn(ecx); }
C++:static const auto sv_cheats = m_cvar()->FindVar(crypt_str("sv_cheats")); hooks::sv_cheats_hook = new vmthook(reinterpret_cast<DWORD**>(sv_cheats)); hooks::sv_cheats_hook->hook_function(reinterpret_cast<uintptr_t>(hooks::hooked_sv_cheats), 13); //-V107 //-V221
совсем другое дело. вы подключаете cvar для изменения значения, когда вы находитесь в особом состоянии, используя return_address, а затем создаете резервную копию значения, снова вызывая функцию, или вы можете подключить ее и просто изменить номер. для Unlock Hidden Cvars кода:Это можно использывать как Unlock hidden cvars?
void misc::unlockhiddenconvars()
{
auto p = **reinterpret_cast<ConCommandBase***>(reinterpret_cast<DWORD>(m_cvar()) + 0x34);
for (auto c = p->m_pNext; c != nullptr; c = c->m_pNext) {
c->m_nFlags &= ~FCVAR_DEVELOPMENTONLY; // FCVAR_DEVELOPMENTONLY
c->m_nFlags &= ~FCVAR_HIDDEN; // FCVAR_HIDDEN
}
}
Проект предоставляет различный материал, относящийся к сфере киберспорта, программирования, ПО для игр, а также позволяет его участникам общаться на многие другие темы. Почта для жалоб: admin@yougame.biz