DefenderMoney: fix reconnect exploit

This commit is contained in:
dogan 2020-07-30 02:10:43 +02:00
parent 65fe0f846b
commit 6ba9f4a319

View File

@ -17,15 +17,18 @@ ConVar g_cvarDamageMultiplier = null;
#endif
bool g_bZRLoaded;
bool g_bMapEnd;
int g_iCash[MAXPLAYERS + 1];
int g_iCashReconnect[256];
int g_iSteamID[256];
public Plugin myinfo =
{
name = "Defender Money",
author = "Obus + Dogan",
description = "",
version = "1.0.0",
description = "Reward Humans with cash for shooting Zombies",
version = "1.1.0",
url = ""
};
@ -41,6 +44,8 @@ public void OnPluginStart()
HookEvent("player_death", EventHook_PlayerDeath, EventHookMode_Pre);
HookEvent("player_spawn", EventHook_PlayerSpawn, EventHookMode_Post);
HookEvent("round_end", EventHook_RoundEnd, EventHookMode_Pre);
g_bMapEnd = false;
}
public void OnAllPluginsLoaded()
@ -62,14 +67,76 @@ public void OnLibraryRemoved(const char[] sName)
public void OnMapStart()
{
for(int i = 0; i < 256; i++)
{
g_iSteamID[i] = 0;
g_iCashReconnect[i] = 0;
}
for(int i = 1; i <= MaxClients; i++)
{
g_iCash[i] = 0;
g_iCash[i] = 0;
}
g_bMapEnd = false;
}
public void OnMapEnd()
{
g_bMapEnd = true;
}
public void OnClientPutInServer(int client)
{
if(IsFakeClient(client) || g_bMapEnd)
return;
int iSteamID = GetSteamAccountID(client);
for(int i = 0; i < 256; i++)
{
if(iSteamID == g_iSteamID[i])
{
g_iCash[client] = g_iCashReconnect[i];
CreateTimer(3.0, MessageReconnect, client);
break;
}
}
}
public Action MessageReconnect(Handle timer, int client)
{
PrintToChat(client, "[SM] Restored your cash: $%d.", g_iCash[client]);
return Plugin_Handled;
}
public void OnClientDisconnect(int client)
{
if(IsFakeClient(client))
return;
int iSteamID = GetSteamAccountID(client);
for(int i = 0; i < 256; i++)
{
if(iSteamID == g_iSteamID[i])
{
g_iCashReconnect[i] = GetEntProp(client, Prop_Send, "m_iAccount");
return;
}
}
for(int i = 0; i < 256; i++)
{
if(g_iSteamID[i] == 0)
{
g_iSteamID[i] = iSteamID;
g_iCashReconnect[i] = GetEntProp(client, Prop_Send, "m_iAccount");
break;
}
}
g_iCash[client] = 0;
}