mirror of
https://github.com/alliedmodders/amxmodx.git
synced 2024-12-25 14:25:38 +03:00
Cstrike: Random cleanup.
This commit is contained in:
parent
7cb004c728
commit
c2c78f6724
@ -40,20 +40,20 @@ using namespace SourceMod; // hashmap
|
||||
void CtrlDetours_ClientCommand(bool set);
|
||||
void CtrlDetours_BuyCommands(bool set);
|
||||
|
||||
int g_CSCliCmdFwd = -1;
|
||||
int g_CSBuyCmdFwd = -1;
|
||||
int g_CSBuyAttemptCmdFwd = -1;
|
||||
int ForwardInternalCommand = -1;
|
||||
int ForwardOnBuy = -1;
|
||||
int ForwardOnBuyAttempt = -1;
|
||||
|
||||
int *g_UseBotArgs = NULL;
|
||||
const char **g_BotArgs = NULL;
|
||||
int *UseBotArgs = NULL;
|
||||
const char **BotArgs = NULL;
|
||||
|
||||
CDetour *g_ClientCommandDetour = NULL;
|
||||
CDetour *g_GiveShieldDetour = NULL;
|
||||
CDetour *g_GiveNamedItemDetour = NULL;
|
||||
CDetour *g_AddAccountDetour = NULL;
|
||||
CDetour *ClientCommandDetour = NULL;
|
||||
CDetour *GiveShieldDetour = NULL;
|
||||
CDetour *GiveNamedItemDetour = NULL;
|
||||
CDetour *AddAccountDetour = NULL;
|
||||
|
||||
int g_CurrentItemId = 0;
|
||||
StringHashMap<int> g_ItemAliasList;
|
||||
int CurrentItemId = 0;
|
||||
StringHashMap<int> ItemAliasList;
|
||||
|
||||
void InitializeHacks()
|
||||
{
|
||||
@ -75,11 +75,11 @@ void ShutdownHacks()
|
||||
|
||||
const char *CMD_ARGV(int i)
|
||||
{
|
||||
if (*g_UseBotArgs)
|
||||
if (*UseBotArgs)
|
||||
{
|
||||
if (i < 4)
|
||||
{
|
||||
return g_BotArgs[i];
|
||||
return BotArgs[i];
|
||||
}
|
||||
|
||||
return NULL;
|
||||
@ -93,11 +93,11 @@ DETOUR_DECL_STATIC1(C_ClientCommand, void, edict_t*, pEdict) // void ClientComma
|
||||
const char *command = CMD_ARGV(0);
|
||||
|
||||
// A new command is triggered, reset variable, always.
|
||||
g_CurrentItemId = 0;
|
||||
CurrentItemId = 0;
|
||||
|
||||
// Purpose is to retrieve an item id based on alias name or selected item from menu,
|
||||
// to be used in OnBuy* forwards.
|
||||
if ((g_CSBuyAttemptCmdFwd != -1 || g_CSBuyCmdFwd != -1) && command && *command)
|
||||
if ((ForwardOnBuyAttempt != -1 || ForwardOnBuy != -1) && command && *command)
|
||||
{
|
||||
// Just for safety.
|
||||
command = UTIL_StringToLower((char *)command);
|
||||
@ -145,36 +145,36 @@ DETOUR_DECL_STATIC1(C_ClientCommand, void, edict_t*, pEdict) // void ClientComma
|
||||
|
||||
if (itemId)
|
||||
{
|
||||
g_CurrentItemId = itemId;
|
||||
CurrentItemId = itemId;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else // Handling buy via alias
|
||||
{
|
||||
if (g_ItemAliasList.retrieve(command, &itemId))
|
||||
if (ItemAliasList.retrieve(command, &itemId))
|
||||
{
|
||||
g_CurrentItemId = itemId;
|
||||
CurrentItemId = itemId;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int client = ENTINDEX(pEdict);
|
||||
|
||||
if (g_CSCliCmdFwd != -1 && *g_UseBotArgs)
|
||||
if (ForwardInternalCommand != -1 && *UseBotArgs)
|
||||
{
|
||||
const char *args = *g_BotArgs;
|
||||
const char *args = *BotArgs;
|
||||
|
||||
if (MF_ExecuteForward(g_CSCliCmdFwd, static_cast<cell>(client), args) > 0)
|
||||
if (MF_ExecuteForward(ForwardInternalCommand, static_cast<cell>(client), args) > 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (g_CSBuyAttemptCmdFwd != -1 &&
|
||||
g_CurrentItemId &&
|
||||
if (ForwardOnBuyAttempt != -1 &&
|
||||
CurrentItemId &&
|
||||
MF_IsPlayerAlive(client) &&
|
||||
MF_ExecuteForward(g_CSBuyAttemptCmdFwd, static_cast<cell>(client), static_cast<cell>(g_CurrentItemId)) > 0)
|
||||
MF_ExecuteForward(ForwardOnBuyAttempt, static_cast<cell>(client), static_cast<cell>(CurrentItemId)) > 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
@ -185,11 +185,11 @@ DETOUR_DECL_STATIC1(C_ClientCommand, void, edict_t*, pEdict) // void ClientComma
|
||||
DETOUR_DECL_MEMBER1(GiveNamedItem, void, const char*, pszName) // void CBasePlayer::GiveNamedItem(const char *pszName)
|
||||
{
|
||||
// If the current item id is not null, this means player has triggers a buy command.
|
||||
if (g_CurrentItemId)
|
||||
if (CurrentItemId)
|
||||
{
|
||||
int client = PrivateToIndex(this);
|
||||
|
||||
if (MF_IsPlayerAlive(client) && MF_ExecuteForward(g_CSBuyCmdFwd, static_cast<cell>(client), static_cast<cell>(g_CurrentItemId)) > 0)
|
||||
if (MF_IsPlayerAlive(client) && MF_ExecuteForward(ForwardOnBuy, static_cast<cell>(client), static_cast<cell>(CurrentItemId)) > 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
@ -197,7 +197,7 @@ DETOUR_DECL_MEMBER1(GiveNamedItem, void, const char*, pszName) // void CBasePlay
|
||||
|
||||
// From here, forward is not blocked, resetting this
|
||||
// to ignore code in AddAccount which is called right after.
|
||||
g_CurrentItemId = 0;
|
||||
CurrentItemId = 0;
|
||||
|
||||
// Give me my item!
|
||||
DETOUR_MEMBER_CALL(GiveNamedItem)(pszName);
|
||||
@ -206,11 +206,11 @@ DETOUR_DECL_MEMBER1(GiveNamedItem, void, const char*, pszName) // void CBasePlay
|
||||
DETOUR_DECL_MEMBER1(GiveShield, void, bool, bRetire) // void CBasePlayer::GiveShield(bool bRetire)
|
||||
{
|
||||
// Special case for shield. Game doesn't use GiveNamedItem() to give a shield.
|
||||
if (g_CurrentItemId == CSI_SHIELDGUN)
|
||||
if (CurrentItemId == CSI_SHIELDGUN)
|
||||
{
|
||||
int client = PrivateToIndex(this);
|
||||
|
||||
if (MF_IsPlayerAlive(client) && MF_ExecuteForward(g_CSBuyCmdFwd, static_cast<cell>(client), CSI_SHIELDGUN) > 0)
|
||||
if (MF_IsPlayerAlive(client) && MF_ExecuteForward(ForwardOnBuy, static_cast<cell>(client), CSI_SHIELDGUN) > 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
@ -218,7 +218,7 @@ DETOUR_DECL_MEMBER1(GiveShield, void, bool, bRetire) // void CBasePlayer::GiveSh
|
||||
|
||||
// From here, forward is not blocked, resetting this
|
||||
// to ignore code in AddAccount which is called right after.
|
||||
g_CurrentItemId = 0;
|
||||
CurrentItemId = 0;
|
||||
|
||||
// Give me my shield!
|
||||
DETOUR_MEMBER_CALL(GiveShield)(bRetire);
|
||||
@ -228,13 +228,13 @@ DETOUR_DECL_MEMBER2(AddAccount, void, int, amount, bool, bTrackChange) // void C
|
||||
{
|
||||
// No buy command or forward not blocked.
|
||||
// Resuming game flow.
|
||||
if (!g_CurrentItemId)
|
||||
if (!CurrentItemId)
|
||||
{
|
||||
DETOUR_MEMBER_CALL(AddAccount)(amount, bTrackChange);
|
||||
}
|
||||
|
||||
// Let's reset this right away to avoid issues.
|
||||
g_CurrentItemId = 0;
|
||||
CurrentItemId = 0;
|
||||
}
|
||||
|
||||
|
||||
@ -246,35 +246,35 @@ void CtrlDetours_ClientCommand(bool set)
|
||||
|
||||
#if defined(WIN32)
|
||||
|
||||
g_UseBotArgs = *(int **)((unsigned char *)target + CS_CLICMD_OFFS_USEBOTARGS);
|
||||
g_BotArgs = (const char **)*(const char **)((unsigned char *)target + CS_CLICMD_OFFS_BOTARGS);
|
||||
UseBotArgs = *(int **)((unsigned char *)target + CS_CLICMD_OFFS_USEBOTARGS);
|
||||
BotArgs = (const char **)*(const char **)((unsigned char *)target + CS_CLICMD_OFFS_BOTARGS);
|
||||
|
||||
#elif defined(__linux__) || defined(__APPLE__)
|
||||
|
||||
g_UseBotArgs = (int *)UTIL_FindAddressFromEntry(CS_IDENT_USEBOTARGS, CS_IDENT_HIDDEN_STATE);
|
||||
g_BotArgs = (const char **)UTIL_FindAddressFromEntry(CS_IDENT_BOTARGS, CS_IDENT_HIDDEN_STATE);
|
||||
UseBotArgs = (int *)UTIL_FindAddressFromEntry(CS_IDENT_USEBOTARGS, CS_IDENT_HIDDEN_STATE);
|
||||
BotArgs = (const char **)UTIL_FindAddressFromEntry(CS_IDENT_BOTARGS, CS_IDENT_HIDDEN_STATE);
|
||||
|
||||
#endif
|
||||
g_ClientCommandDetour = DETOUR_CREATE_STATIC_FIXED(C_ClientCommand, target);
|
||||
ClientCommandDetour = DETOUR_CREATE_STATIC_FIXED(C_ClientCommand, target);
|
||||
|
||||
if (g_ClientCommandDetour == NULL)
|
||||
if (ClientCommandDetour == NULL)
|
||||
{
|
||||
MF_Log("No Client Commands detour could be initialized - Disabled Client Command forward.");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (g_ClientCommandDetour)
|
||||
g_ClientCommandDetour->Destroy();
|
||||
if (ClientCommandDetour)
|
||||
ClientCommandDetour->Destroy();
|
||||
|
||||
g_ItemAliasList.clear();
|
||||
ItemAliasList.clear();
|
||||
}
|
||||
}
|
||||
|
||||
void ToggleDetour_ClientCommands(bool enable)
|
||||
{
|
||||
if (g_ClientCommandDetour)
|
||||
(enable) ? g_ClientCommandDetour->EnableDetour() : g_ClientCommandDetour->DisableDetour();
|
||||
if (ClientCommandDetour)
|
||||
(enable) ? ClientCommandDetour->EnableDetour() : ClientCommandDetour->DisableDetour();
|
||||
|
||||
if (enable)
|
||||
{
|
||||
@ -321,12 +321,12 @@ void ToggleDetour_ClientCommands(bool enable)
|
||||
|
||||
for (size_t i = 0; aliasToId[i].alias != NULL; ++i)
|
||||
{
|
||||
g_ItemAliasList.insert(aliasToId[i].alias, aliasToId[i].id);
|
||||
ItemAliasList.insert(aliasToId[i].alias, aliasToId[i].id);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
g_ItemAliasList.clear();
|
||||
ItemAliasList.clear();
|
||||
}
|
||||
}
|
||||
|
||||
@ -339,38 +339,38 @@ void CtrlDetours_BuyCommands(bool set)
|
||||
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);
|
||||
GiveShieldDetour = DETOUR_CREATE_MEMBER_FIXED(GiveShield, giveShieldAddress);
|
||||
GiveNamedItemDetour = DETOUR_CREATE_MEMBER_FIXED(GiveNamedItem, giveNamedItemAddress);
|
||||
AddAccountDetour = DETOUR_CREATE_MEMBER_FIXED(AddAccount, addAccountAddress);
|
||||
|
||||
if (g_GiveNamedItemDetour == NULL || g_AddAccountDetour == NULL)
|
||||
if (GiveNamedItemDetour == NULL || AddAccountDetour == NULL)
|
||||
{
|
||||
MF_Log("No Buy Commands detours could be initialized - Disabled Buy forward.");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (g_GiveShieldDetour)
|
||||
g_GiveShieldDetour->Destroy();
|
||||
if (GiveShieldDetour)
|
||||
GiveShieldDetour->Destroy();
|
||||
|
||||
if (g_GiveNamedItemDetour)
|
||||
g_GiveNamedItemDetour->Destroy();
|
||||
if (GiveNamedItemDetour)
|
||||
GiveNamedItemDetour->Destroy();
|
||||
|
||||
if (g_AddAccountDetour)
|
||||
g_AddAccountDetour->Destroy();
|
||||
if (AddAccountDetour)
|
||||
AddAccountDetour->Destroy();
|
||||
|
||||
g_ItemAliasList.clear();
|
||||
ItemAliasList.clear();
|
||||
}
|
||||
}
|
||||
|
||||
void ToggleDetour_BuyCommands(bool enable)
|
||||
{
|
||||
if (g_GiveShieldDetour)
|
||||
(enable) ? g_GiveShieldDetour->EnableDetour() : g_GiveShieldDetour->DisableDetour();
|
||||
if (GiveShieldDetour)
|
||||
(enable) ? GiveShieldDetour->EnableDetour() : GiveShieldDetour->DisableDetour();
|
||||
|
||||
if (g_GiveNamedItemDetour)
|
||||
(enable) ? g_GiveNamedItemDetour->EnableDetour() : g_GiveNamedItemDetour->DisableDetour();
|
||||
if (GiveNamedItemDetour)
|
||||
(enable) ? GiveNamedItemDetour->EnableDetour() : GiveNamedItemDetour->DisableDetour();
|
||||
|
||||
if (g_AddAccountDetour)
|
||||
(enable) ? g_AddAccountDetour->EnableDetour() : g_AddAccountDetour->DisableDetour();
|
||||
if (AddAccountDetour)
|
||||
(enable) ? AddAccountDetour->EnableDetour() : AddAccountDetour->DisableDetour();
|
||||
}
|
@ -1749,7 +1749,7 @@ static cell AMX_NATIVE_CALL not_on_64(AMX* amx, cell* params)
|
||||
#endif
|
||||
|
||||
|
||||
AMX_NATIVE_INFO cstrikeNatives[] = {
|
||||
AMX_NATIVE_INFO CstrikeNatives[] = {
|
||||
{"cs_set_user_money", cs_set_user_money},
|
||||
{"cs_get_user_money", cs_get_user_money},
|
||||
{"cs_get_user_deaths", cs_get_user_deaths},
|
||||
|
@ -33,11 +33,11 @@
|
||||
#include "amxxmodule.h"
|
||||
#include "CstrikeUtils.h"
|
||||
|
||||
extern AMX_NATIVE_INFO cstrikeNatives[];
|
||||
extern AMX_NATIVE_INFO CstrikeNatives[];
|
||||
|
||||
extern int g_CSCliCmdFwd;
|
||||
extern int g_CSBuyCmdFwd;
|
||||
extern int g_CSBuyAttemptCmdFwd;
|
||||
extern int ForwardInternalCommand;
|
||||
extern int ForwardOnBuy;
|
||||
extern int ForwardOnBuyAttempt;
|
||||
|
||||
void InitializeHacks();
|
||||
void ShutdownHacks();
|
||||
@ -57,27 +57,25 @@ int AmxxCheckGame(const char *game)
|
||||
|
||||
void OnAmxxAttach()
|
||||
{
|
||||
MF_AddNatives(cstrikeNatives);
|
||||
MF_AddNatives(CstrikeNatives);
|
||||
InitializeHacks();
|
||||
}
|
||||
|
||||
void OnPluginsLoaded()
|
||||
{
|
||||
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_CSBuyAttemptCmdFwd = MF_RegisterForward("CS_OnBuyAttempt" , ET_STOP, FP_CELL, FP_CELL, FP_DONE);
|
||||
ForwardInternalCommand = MF_RegisterForward("CS_InternalCommand", ET_STOP, FP_CELL, FP_STRING, FP_DONE);
|
||||
ForwardOnBuy = MF_RegisterForward("CS_OnBuy" , ET_STOP, FP_CELL, FP_CELL, FP_DONE);
|
||||
ForwardOnBuyAttempt = MF_RegisterForward("CS_OnBuyAttempt" , ET_STOP, FP_CELL, FP_CELL, FP_DONE);
|
||||
|
||||
// Checking whether such public forwards are used in plugins.
|
||||
// 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; }
|
||||
if (!UTIL_CheckForPublic("CS_InternalCommand")) { ForwardInternalCommand = -1; }
|
||||
if (!UTIL_CheckForPublic("CS_OnBuy")) { ForwardOnBuy = -1; }
|
||||
if (!UTIL_CheckForPublic("CS_OnBuyAttempt")) { ForwardOnBuyAttempt = -1; }
|
||||
|
||||
// And enable/disable detours when necessary.
|
||||
|
||||
ToggleDetour_ClientCommands(g_CSCliCmdFwd != -1 || g_CSBuyCmdFwd != -1 || g_CSBuyCmdFwd != -1);
|
||||
ToggleDetour_BuyCommands(g_CSBuyCmdFwd != -1);
|
||||
ToggleDetour_ClientCommands(ForwardInternalCommand != -1 || ForwardOnBuy != -1 || ForwardOnBuy != -1);
|
||||
ToggleDetour_BuyCommands(ForwardOnBuy != -1);
|
||||
}
|
||||
|
||||
void OnAmxxDetach()
|
||||
|
Loading…
Reference in New Issue
Block a user