Cstrike: Enable/Disable detours whether CS_OnBuy and CS_InternalCommand are used in plugins + Add more check for safety.
This commit is contained in:
parent
f1e206fde6
commit
d2f2748e9e
@ -157,17 +157,25 @@ void CtrlDetours_ClientCommand(bool set)
|
|||||||
#endif
|
#endif
|
||||||
g_ClientCommandDetour = DETOUR_CREATE_STATIC_FIXED(C_ClientCommand, target);
|
g_ClientCommandDetour = DETOUR_CREATE_STATIC_FIXED(C_ClientCommand, target);
|
||||||
|
|
||||||
if (g_ClientCommandDetour != NULL)
|
if (g_ClientCommandDetour == NULL)
|
||||||
g_ClientCommandDetour->EnableDetour();
|
{
|
||||||
else
|
|
||||||
MF_Log("No Client Commands detour could be initialized - Disabled Client Command forward.");
|
MF_Log("No Client Commands detour could be initialized - Disabled Client Command forward.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
g_ClientCommandDetour->Destroy();
|
if (g_ClientCommandDetour)
|
||||||
|
g_ClientCommandDetour->Destroy();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ToggleDetour_ClientCommands(bool enable)
|
||||||
|
{
|
||||||
|
if (g_ClientCommandDetour)
|
||||||
|
(enable) ? g_ClientCommandDetour->EnableDetour() : g_ClientCommandDetour->DisableDetour();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void CtrlDetours_BuyCommands(bool set)
|
void CtrlDetours_BuyCommands(bool set)
|
||||||
{
|
{
|
||||||
if (set)
|
if (set)
|
||||||
@ -180,21 +188,32 @@ void CtrlDetours_BuyCommands(bool set)
|
|||||||
g_BuyItemDetour = DETOUR_CREATE_STATIC_FIXED(BuyItem, buyItemAddress);
|
g_BuyItemDetour = DETOUR_CREATE_STATIC_FIXED(BuyItem, buyItemAddress);
|
||||||
g_BuyGunAmmoDetour = DETOUR_CREATE_STATIC_FIXED(BuyGunAmmo, buyGunAmmoAddress);
|
g_BuyGunAmmoDetour = DETOUR_CREATE_STATIC_FIXED(BuyGunAmmo, buyGunAmmoAddress);
|
||||||
|
|
||||||
if (g_CanBuyThisDetour != NULL && g_BuyItemDetour != NULL && g_BuyGunAmmoDetour != NULL)
|
if (g_CanBuyThisDetour == NULL || g_BuyItemDetour == NULL || g_BuyGunAmmoDetour == NULL)
|
||||||
{
|
|
||||||
g_CanBuyThisDetour->EnableDetour();
|
|
||||||
g_BuyItemDetour->EnableDetour();
|
|
||||||
g_BuyGunAmmoDetour->EnableDetour();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
MF_Log("No Buy Commands detours could be initialized - Disabled Buy forward.");
|
MF_Log("No Buy Commands detours could be initialized - Disabled Buy forward.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
g_BuyItemDetour->Destroy();
|
if (g_CanBuyThisDetour)
|
||||||
g_BuyGunAmmoDetour->Destroy();
|
g_CanBuyThisDetour->Destroy();
|
||||||
g_ClientCommandDetour->Destroy();
|
|
||||||
|
if (g_BuyItemDetour)
|
||||||
|
g_BuyItemDetour->Destroy();
|
||||||
|
|
||||||
|
if (g_BuyGunAmmoDetour)
|
||||||
|
g_BuyGunAmmoDetour->Destroy();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ToggleDetour_BuyCommands(bool enable)
|
||||||
|
{
|
||||||
|
if (g_CanBuyThisDetour)
|
||||||
|
(enable) ? g_CanBuyThisDetour->EnableDetour() : g_CanBuyThisDetour->DisableDetour();
|
||||||
|
|
||||||
|
if (g_BuyItemDetour)
|
||||||
|
(enable) ? g_BuyItemDetour->EnableDetour() : g_BuyItemDetour->DisableDetour();
|
||||||
|
|
||||||
|
if (g_BuyGunAmmoDetour)
|
||||||
|
(enable) ? g_BuyGunAmmoDetour->EnableDetour() : g_BuyGunAmmoDetour->DisableDetour();
|
||||||
}
|
}
|
@ -119,4 +119,24 @@ void *UTIL_FindAddressFromEntry(const char *entry, bool isHidden, const char *li
|
|||||||
}
|
}
|
||||||
|
|
||||||
return finalAddress != NULL ? finalAddress : NULL;
|
return finalAddress != NULL ? finalAddress : NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool UTIL_CheckForPublic(const char *publicname)
|
||||||
|
{
|
||||||
|
AMX* amx;
|
||||||
|
int iFunctionIndex;
|
||||||
|
int i = 0;
|
||||||
|
char blah[64];
|
||||||
|
|
||||||
|
strncpy(blah, publicname, sizeof(blah)- 1);
|
||||||
|
|
||||||
|
while ((amx = MF_GetScriptAmx(i++)) != NULL)
|
||||||
|
{
|
||||||
|
if (MF_AmxFindPublic(amx, blah, &iFunctionIndex) == AMX_ERR_NONE)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
@ -36,6 +36,7 @@
|
|||||||
bool UTIL_IsPlayer(AMX* amx, edict_t* pPlayer);
|
bool UTIL_IsPlayer(AMX* amx, edict_t* pPlayer);
|
||||||
void UTIL_TextMsg_Generic(edict_t* pPlayer, const char* message);
|
void UTIL_TextMsg_Generic(edict_t* pPlayer, const char* message);
|
||||||
void *UTIL_FindAddressFromEntry(const char *entry, bool isHidden = false, const char *library = "mod");
|
void *UTIL_FindAddressFromEntry(const char *entry, bool isHidden = false, const char *library = "mod");
|
||||||
|
bool UTIL_CheckForPublic(const char *publicname);
|
||||||
|
|
||||||
#define GETINFOKEYBUFFER (*g_engfuncs.pfnGetInfoKeyBuffer)
|
#define GETINFOKEYBUFFER (*g_engfuncs.pfnGetInfoKeyBuffer)
|
||||||
#define SETCLIENTKEYVALUE (*g_engfuncs.pfnSetClientKeyValue)
|
#define SETCLIENTKEYVALUE (*g_engfuncs.pfnSetClientKeyValue)
|
||||||
|
@ -31,6 +31,7 @@
|
|||||||
* version.
|
* version.
|
||||||
*/
|
*/
|
||||||
#include "amxxmodule.h"
|
#include "amxxmodule.h"
|
||||||
|
#include "CstrikeUtils.h"
|
||||||
|
|
||||||
extern AMX_NATIVE_INFO cstrikeNatives[];
|
extern AMX_NATIVE_INFO cstrikeNatives[];
|
||||||
|
|
||||||
@ -39,6 +40,9 @@ extern int g_CSBuyCmdFwd;
|
|||||||
|
|
||||||
void InitializeHacks();
|
void InitializeHacks();
|
||||||
void ShutdownHacks();
|
void ShutdownHacks();
|
||||||
|
void ToggleDetour_ClientCommands(bool enable);
|
||||||
|
void ToggleDetour_BuyCommands(bool enable);
|
||||||
|
|
||||||
|
|
||||||
int AmxxCheckGame(const char *game)
|
int AmxxCheckGame(const char *game)
|
||||||
{
|
{
|
||||||
@ -60,6 +64,9 @@ void OnPluginsLoaded()
|
|||||||
{
|
{
|
||||||
g_CSCliCmdFwd = MF_RegisterForward("CS_InternalCommand", ET_STOP, FP_CELL, FP_STRING, FP_DONE);
|
g_CSCliCmdFwd = MF_RegisterForward("CS_InternalCommand", ET_STOP, FP_CELL, FP_STRING, FP_DONE);
|
||||||
g_CSBuyCmdFwd = MF_RegisterForward("CS_OnBuy", ET_STOP, FP_CELL, FP_CELL, FP_DONE);
|
g_CSBuyCmdFwd = MF_RegisterForward("CS_OnBuy", ET_STOP, FP_CELL, FP_CELL, FP_DONE);
|
||||||
|
|
||||||
|
ToggleDetour_ClientCommands(UTIL_CheckForPublic("CS_InternalCommand"));
|
||||||
|
ToggleDetour_BuyCommands(UTIL_CheckForPublic("CS_OnBuy"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnAmxxDetach()
|
void OnAmxxDetach()
|
||||||
|
Loading…
Reference in New Issue
Block a user