diff --git a/KnifeRevert/scripting/KnifeRevert.sp b/KnifeRevert/scripting/KnifeRevert.sp index 8f945594..df547375 100644 --- a/KnifeRevert/scripting/KnifeRevert.sp +++ b/KnifeRevert/scripting/KnifeRevert.sp @@ -7,32 +7,31 @@ bool g_bKnifeRevert; bool g_bSlayKnifer; -float g_fMaxDistance; float g_fMaxTime; int g_iClientIndexKnifer; int g_iClientIndexKnifedZombie; bool g_bKnife; -bool g_bInfectedInRadius[MAXPLAYERS + 1]; +bool g_bInfectedByKnifeForward[MAXPLAYERS + 1]; + +Handle KnifeRevertTimer; public Plugin myinfo = { name = "KnifeRevert", author = "Dogan", description = "Tool for Admins to prevent teamkilling cause of zombie knifing (ZE)", - version = "1.1.0", + version = "2.0.0", url = "" } public void OnPluginStart() { ConVar cvar; - HookConVarChange((cvar = CreateConVar("sm_kr_enabled", "1", "1 = sm_kniferevert is available, 0 = sm_kniferevert is not available", FCVAR_NONE, true, 0.0, true, 1.0)), g_cvZAbuse); + HookConVarChange((cvar = CreateConVar("sm_kr_enabled", "1", "1 = sm_kniferevert is available, 0 = sm_kniferevert is not available", FCVAR_NONE, true, 0.0, true, 1.0)), g_cvKnifeRevert); g_bKnifeRevert = cvar.BoolValue; HookConVarChange((cvar = CreateConVar("sm_kr_slay", "0", "1 = slays the knifer automatically when sm_kniferevert is used, 0 = don't do anything to the knifer", FCVAR_NONE, true, 0.0, true, 1.0)), g_cvSlayKnifer); g_bSlayKnifer = cvar.BoolValue; - HookConVarChange((cvar = CreateConVar("sm_kr_maxdistance", "200.0", "max distance from the zombie that got knifed forward where infected humans will be rezurrected")), g_cvMaxDistance); - g_fMaxDistance = cvar.FloatValue; HookConVarChange((cvar = CreateConVar("sm_kr_time", "6.0", "max time until sm_kniferevert is available after a knife")), g_cvMaxTime); g_fMaxTime = cvar.FloatValue; delete cvar; @@ -48,7 +47,7 @@ public void OnPluginStart() g_iClientIndexKnifedZombie = -1; } -public void g_cvZAbuse(ConVar convar, const char[] oldValue, const char[] newValue) +public void g_cvKnifeRevert(ConVar convar, const char[] oldValue, const char[] newValue) { g_bKnifeRevert = convar.BoolValue; } @@ -58,11 +57,6 @@ public void g_cvSlayKnifer(ConVar convar, const char[] oldValue, const char[] ne g_bSlayKnifer = convar.BoolValue; } -public void g_cvMaxDistance(ConVar convar, const char[] oldValue, const char[] newValue) -{ - g_fMaxDistance = convar.FloatValue; -} - public void g_cvMaxTime(ConVar convar, const char[] oldValue, const char[] newValue) { g_fMaxTime = convar.FloatValue; @@ -70,7 +64,7 @@ public void g_cvMaxTime(ConVar convar, const char[] oldValue, const char[] newVa public void OnPlayerHurt(Handle hEvent, const char[] name, bool dontBroadcast) { - if(!g_bKnifeRevert) + if(!g_bKnifeRevert || g_bKnife) return; int attacker; @@ -103,7 +97,7 @@ public void OnPlayerHurt(Handle hEvent, const char[] name, bool dontBroadcast) g_iClientIndexKnifedZombie = victim; g_bKnife = true; - CreateTimer(g_fMaxTime, OnClientKnife, _, TIMER_FLAG_NO_MAPCHANGE); + KnifeRevertTimer = CreateTimer(g_fMaxTime, OnClientKnife, _, TIMER_FLAG_NO_MAPCHANGE); } } } @@ -116,10 +110,8 @@ public Action OnClientKnife(Handle timer) for(int i = 1; i <= MaxClients; i++) { - if(g_bInfectedInRadius[i]) - { - g_bInfectedInRadius[i] = false; - } + if(g_bInfectedByKnifeForward[i]) + g_bInfectedByKnifeForward[i] = false; } } @@ -128,15 +120,11 @@ public void ZR_OnClientInfected(int client, int attacker, bool motherInfect, boo if(!g_bKnifeRevert || !g_bKnife) return; - static float fVec1[3]; - static float fVec2[3]; - GetClientAbsOrigin(g_iClientIndexKnifedZombie, fVec1); - GetClientAbsOrigin(client, fVec2); + if(g_iClientIndexKnifedZombie == attacker)//originally knifed forward zombies kills ppl + g_bInfectedByKnifeForward[client] = true; - float fDistance = GetVectorDistance(fVec1, fVec2, false); - - if(fDistance <= g_fMaxDistance) - g_bInfectedInRadius[client] = true; + if(g_bInfectedByKnifeForward[attacker])//follow the infection chain + g_bInfectedByKnifeForward[client] = true; } public Action Command_KnifeRevert(int client, int argc) @@ -159,22 +147,39 @@ public Action Command_KnifeRevert(int client, int argc) if(g_bSlayKnifer) { - ForcePlayerSuicide(g_iClientIndexKnifer); - PrintToChat(g_iClientIndexKnifer, "[SM] You got slayed for knifing a Zombie forward!"); + if(IsClientInGame(g_iClientIndexKnifer) && IsPlayerAlive(g_iClientIndexKnifer)) + { + ForcePlayerSuicide(g_iClientIndexKnifer); + PrintToChat(g_iClientIndexKnifer, "[SM] You got slayed for knifing a Zombie forward!"); + } } - int IdKnifedZombie = GetClientUserId(g_iClientIndexKnifedZombie); - ServerCommand("zr_ztele_force #%d", IdKnifedZombie); - PrintToChat(g_iClientIndexKnifedZombie, "[SM] You got teleported back because you were knifed forward."); + if(IsClientInGame(g_iClientIndexKnifedZombie) && IsPlayerAlive(g_iClientIndexKnifedZombie)) + { + int IdKnifedZombie = GetClientUserId(g_iClientIndexKnifedZombie); + ServerCommand("zr_ztele_force #%d", IdKnifedZombie); + PrintToChat(g_iClientIndexKnifedZombie, "[SM] You got teleported back because you were knifed forward."); + } for(int i = 1; i <= MaxClients; i++) { - if(IsClientInGame(i) && IsPlayerAlive(i) && g_bInfectedInRadius[i]) + if(IsClientInGame(i) && IsPlayerAlive(i) && g_bInfectedByKnifeForward[i]) { ZR_HumanClient(i, false, false); PrintToChat(i, "[SM] You were rezurrected because you died after a Zombie was knifed forward."); } } + g_iClientIndexKnifer = -1; + g_iClientIndexKnifedZombie = -1; + g_bKnife = false; + KillTimer(KnifeRevertTimer); + + for(int i = 1; i <= MaxClients; i++) + { + if(g_bInfectedByKnifeForward[i]) + g_bInfectedByKnifeForward[i] = false; + } + return Plugin_Handled; } \ No newline at end of file diff --git a/UptimeRestarts/scripting/UptimeRestarts.sp b/UptimeRestarts/scripting/UptimeRestarts.sp index 576d2b31..d0a99f19 100644 --- a/UptimeRestarts/scripting/UptimeRestarts.sp +++ b/UptimeRestarts/scripting/UptimeRestarts.sp @@ -147,7 +147,7 @@ public Action CheckRestart(Handle timer) int iPlayers = GetClientCount(false); for(int i = 1; i <= MaxClients; i++) { - if(IsClientConnected(i) && IsFakeClient(i)) + if(IsFakeClient(i)) iPlayers--; } @@ -157,7 +157,7 @@ public Action CheckRestart(Handle timer) return Plugin_Continue; } - if(!IsItRestartTime()) + if(!IsItRestartTime() || GetEngineTime() < 57500) return Plugin_Continue; if(iPlayers > g_cvarMaxPlayersForControlledRestart.IntValue) //jenz's autism bot