Update entWatch-restrictions.sp

This commit is contained in:
zaCade 2019-04-27 20:11:18 +02:00
parent b9b1ba6b52
commit 7da4eebac7

View File

@ -20,14 +20,20 @@ Handle g_hFwd_OnClientUnrestricted;
/* COOKIES */
Handle g_hCookie_RestrictIssued;
Handle g_hCookie_RestrictLength;
Handle g_hCookie_RestrictExpire;
Handle g_hCookie_RestrictLength;
/* BOOLEANS */
bool g_bRestrictedTemp[MAXPLAYERS+1];
/* INTERGERS */
int g_iRestrictIssued[MAXPLAYERS+1];
int g_iRestrictLength[MAXPLAYERS+1];
int g_iRestrictExpire[MAXPLAYERS+1];
/* STRINGMAPS */
StringMap g_hTrie_Storage;
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
@ -64,8 +70,10 @@ public void OnPluginStart()
g_hFwd_OnClientUnrestricted = CreateGlobalForward("EW_OnClientUnrestricted", ET_Ignore, Param_Cell, Param_Cell);
g_hCookie_RestrictIssued = RegClientCookie("EW_RestrictIssued", "", CookieAccess_Private);
g_hCookie_RestrictLength = RegClientCookie("EW_RestrictLength", "", CookieAccess_Private);
g_hCookie_RestrictExpire = RegClientCookie("EW_RestrictExpire", "", CookieAccess_Private);
g_hCookie_RestrictLength = RegClientCookie("EW_RestrictLength", "", CookieAccess_Private);
g_hTrie_Storage = new StringMap();
RegAdminCmd("sm_eban", Command_ClientRestrict, ADMFLAG_BAN);
RegAdminCmd("sm_eunban", Command_ClientUnrestrict, ADMFLAG_UNBAN);
@ -73,14 +81,37 @@ public void OnPluginStart()
RegConsoleCmd("sm_restrictions", Command_DisplayRestrictions);
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public void OnMapStart()
{
g_hTrie_Storage.Clear();
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public void OnClientPutInServer(int client)
{
char sAddress[32];
GetClientIP(client, sAddress, sizeof(sAddress));
bool bRestrictedTemp;
if (g_hTrie_Storage.GetValue(sAddress, bRestrictedTemp))
{
g_bRestrictedTemp[client] = bRestrictedTemp;
}
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public void OnClientCookiesCached(int client)
{
g_iRestrictIssued[client] = GetClientCookieInt(client, g_hCookie_RestrictIssued);
g_iRestrictLength[client] = GetClientCookieInt(client, g_hCookie_RestrictLength);
g_iRestrictExpire[client] = GetClientCookieInt(client, g_hCookie_RestrictExpire);
g_iRestrictLength[client] = GetClientCookieInt(client, g_hCookie_RestrictLength);
}
//----------------------------------------------------------------------------------------------------
@ -88,9 +119,18 @@ public void OnClientCookiesCached(int client)
//----------------------------------------------------------------------------------------------------
public void OnClientDisconnect(int client)
{
if (g_bRestrictedTemp[client])
{
char sAddress[32];
GetClientIP(client, sAddress, sizeof(sAddress));
g_hTrie_Storage.SetArray(sAddress, g_bRestrictedTemp[client], true);
}
g_bRestrictedTemp[client] = false;
g_iRestrictIssued[client] = 0;
g_iRestrictLength[client] = 0;
g_iRestrictExpire[client] = 0;
g_iRestrictLength[client] = 0;
}
//----------------------------------------------------------------------------------------------------
@ -104,16 +144,17 @@ public Action Command_ClientRestrict(int client, int args)
return Plugin_Handled;
}
char sTarget[32];
char sLength[32];
GetCmdArg(1, sTarget, sizeof(sTarget));
GetCmdArg(2, sLength, sizeof(sLength));
char sArguments[2][32];
GetCmdArg(1, sArguments[0], sizeof(sArguments[]));
GetCmdArg(2, sArguments[1], sizeof(sArguments[]));
int target;
if ((target = FindTarget(client, sTarget, true)) == -1)
if ((target = FindTarget(client, sArguments[0], true)) == -1)
return Plugin_Handled;
int length = StringToInt(sLength);
if (GetCmdArgs() >= 2)
{
int length = StringToInt(sArguments[1]);
if (ClientRestrict(client, target, length))
{
@ -128,6 +169,15 @@ public Action Command_ClientRestrict(int client, int args)
LogAction(client, target, "%L restricted %L permanently.", client, target);
}
}
}
else
{
if (ClientRestrict(client, target, -1))
{
CPrintToChatAll("\x07%s[entWatch] \x07%s%N\x07%s restricted \x07%s%N\x07%s temporarily.", "E01B5D", "EDEDED", client, "F16767", "EDEDED", target, "F16767");
LogAction(client, target, "%L restricted %L temporarily.", client, target);
}
}
return Plugin_Handled;
}
@ -143,11 +193,11 @@ public Action Command_ClientUnrestrict(int client, int args)
return Plugin_Handled;
}
char sTarget[32];
GetCmdArg(1, sTarget, sizeof(sTarget));
char sArguments[1][32];
GetCmdArg(1, sArguments[0], sizeof(sArguments[]));
int target;
if ((target = FindTarget(client, sTarget, true)) == -1)
if ((target = FindTarget(client, sArguments[0], true)) == -1)
return Plugin_Handled;
if (ClientUnrestrict(client, target))
@ -215,17 +265,32 @@ stock bool ClientRestrict(int client, int target, int length)
if (!Client_IsValid(client) || !Client_IsValid(target) || !AreClientCookiesCached(target) || ClientRestricted(target))
return false;
int issued = GetTime();
int second = length * 60;
int expire = issued + second;
if (length == -1)
{
g_bRestrictedTemp[target] = true;
}
else if (length == 0)
{
g_bRestrictedTemp[target] = false;
g_iRestrictIssued[target] = GetTime();
g_iRestrictExpire[target] = 0;
g_iRestrictLength[target] = 0;
g_iRestrictIssued[target] = issued;
SetClientCookieInt(target, g_hCookie_RestrictIssued, GetTime());
SetClientCookieInt(target, g_hCookie_RestrictExpire, 0);
SetClientCookieInt(target, g_hCookie_RestrictLength, 0);
}
else
{
g_bRestrictedTemp[target] = false;
g_iRestrictIssued[target] = GetTime();
g_iRestrictExpire[target] = GetTime() + (length * 60);
g_iRestrictLength[target] = length;
g_iRestrictExpire[target] = expire;
SetClientCookieInt(target, g_hCookie_RestrictIssued, issued);
SetClientCookieInt(target, g_hCookie_RestrictIssued, GetTime());
SetClientCookieInt(target, g_hCookie_RestrictExpire, GetTime() + (length * 60));
SetClientCookieInt(target, g_hCookie_RestrictLength, length);
SetClientCookieInt(target, g_hCookie_RestrictExpire, expire);
}
Call_StartForward(g_hFwd_OnClientRestricted);
Call_PushCell(client);
@ -244,13 +309,14 @@ stock bool ClientUnrestrict(int client, int target)
if (!Client_IsValid(client) || !Client_IsValid(target) || !AreClientCookiesCached(target) || !ClientRestricted(target))
return false;
g_bRestrictedTemp[target] = false;
g_iRestrictIssued[target] = 0;
g_iRestrictLength[target] = 0;
g_iRestrictExpire[target] = 0;
g_iRestrictLength[target] = 0;
SetClientCookieInt(target, g_hCookie_RestrictIssued, 0);
SetClientCookieInt(target, g_hCookie_RestrictLength, 0);
SetClientCookieInt(target, g_hCookie_RestrictExpire, 0);
SetClientCookieInt(target, g_hCookie_RestrictLength, 0);
Call_StartForward(g_hFwd_OnClientUnrestricted);
Call_PushCell(client);
@ -272,12 +338,16 @@ stock bool ClientRestricted(int client)
if (!AreClientCookiesCached(client))
return true;
//Permanent restriction..
if (g_iRestrictExpire[client] && g_iRestrictLength[client] == 0)
//Temporary restriction.
if (g_bRestrictedTemp[client])
return true;
//Limited restriction..
if (g_iRestrictExpire[client] && g_iRestrictExpire[client] >= GetTime())
//Permanent restriction.
if (g_iRestrictIssued[client] && g_iRestrictLength[client] == 0)
return true;
//Normal restriction.
if (g_iRestrictIssued[client] && g_iRestrictExpire[client] >= GetTime())
return true;
return false;