void CtrlDetours_Natives(bool set) { if (set) { void *address = nullptr; if (MainConfig->GetMemSig("CreateNamedEntity", &address)) // cs_create_entity() { CS_CreateNamedEntity = reinterpret_cast<CreateNamedEntityFunc>(address); } if (MainConfig->GetMemSig("FindEntityByString", &address)) // cs_find_ent_by_class() { CS_UTIL_FindEntityByString = reinterpret_cast<UTIL_FindEntityByStringFunc>(address); } if (!CS_CreateNamedEntity) { MF_Log("CREATE_NAMED_ENITTY is not available - native cs_create_entity() has been disabled"); } if (!CS_UTIL_FindEntityByString) { MF_Log("UTIL_FindEntByString is not available - native cs_find_ent_by_class() has been disabled"); } if (MainConfig->GetMemSig("GiveDefaultItems", &address)) { GiveDefaultItemsDetour = DETOUR_CREATE_MEMBER_FIXED(GiveDefaultItems, address); } if (!GiveDefaultItemsDetour) { MF_Log("GiveDefaultItems is not available - native cs_set_no_knives has been disabled"); } } else { if (GiveDefaultItemsDetour) { GiveDefaultItemsDetour->Destroy(); } } }
void CtrlDetours_BuyCommands(bool set) { if (set) { void *address = nullptr; if (MainConfig->GetMemSig("GiveShield", &address)) { GiveShieldDetour = DETOUR_CREATE_MEMBER_FIXED(GiveShield, address); } if (MainConfig->GetMemSig("GiveNamedItem", &address)) { GiveNamedItemDetour = DETOUR_CREATE_MEMBER_FIXED(GiveNamedItem, address); } if (MainConfig->GetMemSig("AddAccount", &address)) { AddAccountDetour = DETOUR_CREATE_MEMBER_FIXED(AddAccount, address); } if (!GiveShieldDetour || !GiveNamedItemDetour || !AddAccountDetour) { if (!GiveShieldDetour) { MF_Log("GiveShield is not available"); } if (!GiveNamedItemDetour) { MF_Log("GiveNamedItem is not available"); } if (!AddAccountDetour) { MF_Log("AddAccount is not available"); } MF_Log("Some functions are not available - forward CS_OnBuyAttempt and CS_OnBuy have been disabled"); } } else { if (GiveShieldDetour) { GiveShieldDetour->Destroy(); } if (GiveNamedItemDetour) { GiveNamedItemDetour->Destroy(); } if (AddAccountDetour) { AddAccountDetour->Destroy(); } ItemAliasList.clear(); } }
void InitDetours() { IsValidTargetDetour = DETOUR_CREATE_MEMBER_FIXED(Observer_IsValidTarget, Util::FindAddress(FUNC_ISVALIDTARGET)); ObserverSetModeDetour = DETOUR_CREATE_MEMBER_FIXED(Observer_SetMode , Util::FindAddress(FUNC_SETMODE)); #if defined(KE_LINUX) void *SetModePart2Address = Util::FindAddress(FUNC_SETMODE2); if (ObserverSetModeDetour && IsValidTargetDetour && SetModePart2Address) { SetModePart2 = reinterpret_cast<SetModePart2Fn>(SetModePart2Address); #elif defined(KE_WINDOWS) || defined(KE_MACOSX) if (ObserverSetModeDetour && IsValidTargetDetour) { #endif IsValidTargetDetour->EnableDetour(); ObserverSetModeDetour->EnableDetour(); } else { if (!IsValidTargetDetour) { ErrorLogs.append("CBasePlayer::Observer_IsValidTarget is not available."); } if (!ObserverSetModeDetour) { ErrorLogs.append("CBasePlayer::Observer_SetMode is not available."); } #if defined(KE_LINUX) if (!SetModePart2Address) { ErrorLogs.append("CBasePlayer::Observer_SetMode (second part) is not available."); } #endif ErrorLogs.append("Some functions are not availble, module has been disabled."); DestroyDetours(); } } void DestroyDetours() { if (IsValidTargetDetour) { IsValidTargetDetour->Destroy(); IsValidTargetDetour = nullptr; } if (ObserverSetModeDetour) { ObserverSetModeDetour->Destroy(); ObserverSetModeDetour = nullptr; } }