mirror of
https://github.com/alliedmodders/amxmodx.git
synced 2025-01-12 14:58:06 +03:00
Cstrike: Fix forwards [un]loading at map change.
This commit is contained in:
parent
58774361bb
commit
7cb004c728
@ -97,7 +97,7 @@ DETOUR_DECL_STATIC1(C_ClientCommand, void, edict_t*, pEdict) // void ClientComma
|
|||||||
|
|
||||||
// Purpose is to retrieve an item id based on alias name or selected item from menu,
|
// Purpose is to retrieve an item id based on alias name or selected item from menu,
|
||||||
// to be used in OnBuy* forwards.
|
// to be used in OnBuy* forwards.
|
||||||
if (command && *command)
|
if ((g_CSBuyAttemptCmdFwd != -1 || g_CSBuyCmdFwd != -1) && command && *command)
|
||||||
{
|
{
|
||||||
// Just for safety.
|
// Just for safety.
|
||||||
command = UTIL_StringToLower((char *)command);
|
command = UTIL_StringToLower((char *)command);
|
||||||
@ -161,7 +161,7 @@ DETOUR_DECL_STATIC1(C_ClientCommand, void, edict_t*, pEdict) // void ClientComma
|
|||||||
|
|
||||||
int client = ENTINDEX(pEdict);
|
int client = ENTINDEX(pEdict);
|
||||||
|
|
||||||
if (*g_UseBotArgs)
|
if (g_CSCliCmdFwd != -1 && *g_UseBotArgs)
|
||||||
{
|
{
|
||||||
const char *args = *g_BotArgs;
|
const char *args = *g_BotArgs;
|
||||||
|
|
||||||
@ -171,7 +171,10 @@ DETOUR_DECL_STATIC1(C_ClientCommand, void, edict_t*, pEdict) // void ClientComma
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_CurrentItemId && MF_IsPlayerAlive(client) && MF_ExecuteForward(g_CSBuyAttemptCmdFwd, static_cast<cell>(client), static_cast<cell>(g_CurrentItemId)) > 0)
|
if (g_CSBuyAttemptCmdFwd != -1 &&
|
||||||
|
g_CurrentItemId &&
|
||||||
|
MF_IsPlayerAlive(client) &&
|
||||||
|
MF_ExecuteForward(g_CSBuyAttemptCmdFwd, static_cast<cell>(client), static_cast<cell>(g_CurrentItemId)) > 0)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -263,6 +266,8 @@ void CtrlDetours_ClientCommand(bool set)
|
|||||||
{
|
{
|
||||||
if (g_ClientCommandDetour)
|
if (g_ClientCommandDetour)
|
||||||
g_ClientCommandDetour->Destroy();
|
g_ClientCommandDetour->Destroy();
|
||||||
|
|
||||||
|
g_ItemAliasList.clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -270,51 +275,6 @@ void ToggleDetour_ClientCommands(bool enable)
|
|||||||
{
|
{
|
||||||
if (g_ClientCommandDetour)
|
if (g_ClientCommandDetour)
|
||||||
(enable) ? g_ClientCommandDetour->EnableDetour() : g_ClientCommandDetour->DisableDetour();
|
(enable) ? g_ClientCommandDetour->EnableDetour() : g_ClientCommandDetour->DisableDetour();
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void CtrlDetours_BuyCommands(bool set)
|
|
||||||
{
|
|
||||||
if (set)
|
|
||||||
{
|
|
||||||
void *giveShieldAddress = UTIL_FindAddressFromEntry(CS_IDENT_GIVENSHIELD , CS_IDENT_HIDDEN_STATE);
|
|
||||||
void *giveNamedItemAddress = UTIL_FindAddressFromEntry(CS_IDENT_GIVENAMEDITEM, CS_IDENT_HIDDEN_STATE);
|
|
||||||
void *addAccountAddress = UTIL_FindAddressFromEntry(CS_IDENT_ADDACCOUNT , CS_IDENT_HIDDEN_STATE);
|
|
||||||
|
|
||||||
g_GiveShieldDetour = DETOUR_CREATE_MEMBER_FIXED(GiveShield, giveShieldAddress);
|
|
||||||
g_GiveNamedItemDetour = DETOUR_CREATE_MEMBER_FIXED(GiveNamedItem, giveNamedItemAddress);
|
|
||||||
g_AddAccountDetour = DETOUR_CREATE_MEMBER_FIXED(AddAccount, addAccountAddress);
|
|
||||||
|
|
||||||
if (g_GiveNamedItemDetour == NULL || g_AddAccountDetour == NULL)
|
|
||||||
{
|
|
||||||
MF_Log("No Buy Commands detours could be initialized - Disabled Buy forward.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (g_GiveShieldDetour)
|
|
||||||
g_GiveShieldDetour->Destroy();
|
|
||||||
|
|
||||||
if (g_GiveNamedItemDetour)
|
|
||||||
g_GiveNamedItemDetour->Destroy();
|
|
||||||
|
|
||||||
if (g_AddAccountDetour)
|
|
||||||
g_AddAccountDetour->Destroy();
|
|
||||||
|
|
||||||
g_ItemAliasList.clear();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void ToggleDetour_BuyCommands(bool enable)
|
|
||||||
{
|
|
||||||
if (g_GiveShieldDetour)
|
|
||||||
(enable) ? g_GiveShieldDetour->EnableDetour() : g_GiveShieldDetour->DisableDetour();
|
|
||||||
|
|
||||||
if (g_GiveNamedItemDetour)
|
|
||||||
(enable) ? g_GiveNamedItemDetour->EnableDetour() : g_GiveNamedItemDetour->DisableDetour();
|
|
||||||
|
|
||||||
if (g_AddAccountDetour)
|
|
||||||
(enable) ? g_AddAccountDetour->EnableDetour() : g_AddAccountDetour->DisableDetour();
|
|
||||||
|
|
||||||
if (enable)
|
if (enable)
|
||||||
{
|
{
|
||||||
@ -368,4 +328,49 @@ void ToggleDetour_BuyCommands(bool enable)
|
|||||||
{
|
{
|
||||||
g_ItemAliasList.clear();
|
g_ItemAliasList.clear();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CtrlDetours_BuyCommands(bool set)
|
||||||
|
{
|
||||||
|
if (set)
|
||||||
|
{
|
||||||
|
void *giveShieldAddress = UTIL_FindAddressFromEntry(CS_IDENT_GIVENSHIELD , CS_IDENT_HIDDEN_STATE);
|
||||||
|
void *giveNamedItemAddress = UTIL_FindAddressFromEntry(CS_IDENT_GIVENAMEDITEM, CS_IDENT_HIDDEN_STATE);
|
||||||
|
void *addAccountAddress = UTIL_FindAddressFromEntry(CS_IDENT_ADDACCOUNT , CS_IDENT_HIDDEN_STATE);
|
||||||
|
|
||||||
|
g_GiveShieldDetour = DETOUR_CREATE_MEMBER_FIXED(GiveShield, giveShieldAddress);
|
||||||
|
g_GiveNamedItemDetour = DETOUR_CREATE_MEMBER_FIXED(GiveNamedItem, giveNamedItemAddress);
|
||||||
|
g_AddAccountDetour = DETOUR_CREATE_MEMBER_FIXED(AddAccount, addAccountAddress);
|
||||||
|
|
||||||
|
if (g_GiveNamedItemDetour == NULL || g_AddAccountDetour == NULL)
|
||||||
|
{
|
||||||
|
MF_Log("No Buy Commands detours could be initialized - Disabled Buy forward.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (g_GiveShieldDetour)
|
||||||
|
g_GiveShieldDetour->Destroy();
|
||||||
|
|
||||||
|
if (g_GiveNamedItemDetour)
|
||||||
|
g_GiveNamedItemDetour->Destroy();
|
||||||
|
|
||||||
|
if (g_AddAccountDetour)
|
||||||
|
g_AddAccountDetour->Destroy();
|
||||||
|
|
||||||
|
g_ItemAliasList.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ToggleDetour_BuyCommands(bool enable)
|
||||||
|
{
|
||||||
|
if (g_GiveShieldDetour)
|
||||||
|
(enable) ? g_GiveShieldDetour->EnableDetour() : g_GiveShieldDetour->DisableDetour();
|
||||||
|
|
||||||
|
if (g_GiveNamedItemDetour)
|
||||||
|
(enable) ? g_GiveNamedItemDetour->EnableDetour() : g_GiveNamedItemDetour->DisableDetour();
|
||||||
|
|
||||||
|
if (g_AddAccountDetour)
|
||||||
|
(enable) ? g_AddAccountDetour->EnableDetour() : g_AddAccountDetour->DisableDetour();
|
||||||
}
|
}
|
@ -63,12 +63,21 @@ void OnAmxxAttach()
|
|||||||
|
|
||||||
void OnPluginsLoaded()
|
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);
|
||||||
g_CSBuyAttemptCmdFwd = MF_RegisterForward("CS_OnBuyAttempt", ET_STOP, FP_CELL, FP_CELL, FP_DONE);
|
g_CSBuyAttemptCmdFwd = MF_RegisterForward("CS_OnBuyAttempt" , ET_STOP, FP_CELL, FP_CELL, FP_DONE);
|
||||||
|
|
||||||
ToggleDetour_ClientCommands(UTIL_CheckForPublic("CS_InternalCommand"));
|
// Checking whether such public forwards are used in plugins.
|
||||||
ToggleDetour_BuyCommands(UTIL_CheckForPublic("CS_OnBuy") || UTIL_CheckForPublic("CS_OnBuyAttempt"));
|
// Resetting variable to -1 to avoid running unnecessary code in ClientCommand.
|
||||||
|
|
||||||
|
if (!UTIL_CheckForPublic("CS_InternalCommand")) { g_CSCliCmdFwd = -1; }
|
||||||
|
if (!UTIL_CheckForPublic("CS_OnBuy")) { g_CSBuyCmdFwd = -1; }
|
||||||
|
if (!UTIL_CheckForPublic("CS_OnBuyAttempt")) { g_CSBuyAttemptCmdFwd = -1; }
|
||||||
|
|
||||||
|
// And enable/disable detours when necessary.
|
||||||
|
|
||||||
|
ToggleDetour_ClientCommands(g_CSCliCmdFwd != -1 || g_CSBuyCmdFwd != -1 || g_CSBuyCmdFwd != -1);
|
||||||
|
ToggleDetour_BuyCommands(g_CSBuyCmdFwd != -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnAmxxDetach()
|
void OnAmxxDetach()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user