From 595d932aca81996739d120a6b52ae8786cca246e Mon Sep 17 00:00:00 2001 From: BotoX Date: Tue, 7 Aug 2018 21:21:54 +0200 Subject: [PATCH] add AutoZSpawn --- AutoZSpawn/scripting/AutoZSpawn.sp | 116 +++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 AutoZSpawn/scripting/AutoZSpawn.sp diff --git a/AutoZSpawn/scripting/AutoZSpawn.sp b/AutoZSpawn/scripting/AutoZSpawn.sp new file mode 100644 index 00000000..563e377b --- /dev/null +++ b/AutoZSpawn/scripting/AutoZSpawn.sp @@ -0,0 +1,116 @@ +#pragma semicolon 1 + +#define VERSION "1.0.1" + +#include + +public Plugin:myinfo = +{ + name = "Auto !zspawn", + author = "Darkthrone, Otstrel Team, TigerOx, TechKnow, AlliedModders LLC", + description = "Automatically exec !zspawn command on dead players", + version = VERSION, + url = "http://forums.alliedmods.net/showthread.php?t=117601" +}; + +new Handle:g_Respawn[MAXPLAYERS + 1] = {INVALID_HANDLE, ...}; +new Handle:g_Cvar_RespawnTime = INVALID_HANDLE; +new Float:g_respawnTime; +new bool:g_roundStarted; +new g_playerClass[MAXPLAYERS + 1]; + +public OnPluginStart() +{ + g_Cvar_RespawnTime = CreateConVar("autozspawn_delay", "0.1", "Delay before !zspawn"); + g_respawnTime = GetConVarFloat(g_Cvar_RespawnTime); + + new Handle:Cvar_Version = CreateConVar("autozspawn_version", VERSION, "Version of the Auto !zspawn", FCVAR_PLUGIN|FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY); + /* Just to make sure they it updates the convar version if they just had the plugin reload on map change */ + SetConVarString(Cvar_Version, VERSION); + + HookConVarChange(g_Cvar_RespawnTime, CvarChanged); + + HookEvent("round_end", Event_RoundEnd, EventHookMode_PostNoCopy); + HookEvent("round_start", Event_RoundStart, EventHookMode_PostNoCopy); + HookEvent("player_team", Event_PlayerTeam); + g_roundStarted = true; + RegConsoleCmd("joinclass", Event_JoinClass); +} + +public Action:Event_JoinClass(client, args) +{ + g_Respawn[client] = CreateTimer(g_respawnTime, ExecRespawn, client); + g_playerClass[client] = 1; +} + +public CvarChanged(Handle:cvar, const String:oldValue[], const String:newValue[]) +{ + if ( cvar == g_Cvar_RespawnTime ) + { + g_respawnTime = GetConVarFloat(g_Cvar_RespawnTime); + if ( g_respawnTime < 2 ) + { + g_respawnTime = 2.0; + } + return; + } +} + +public Action:Event_RoundEnd(Handle:event,const String:name[],bool:dontBroadcast) +{ + g_roundStarted = false; +} + +public Action:Event_RoundStart(Handle:event,const String:name[],bool:dontBroadcast) +{ + g_roundStarted = true; +} + +public Action:ExecRespawn(Handle:timer, any:client) +{ + if ( client && IsClientInGame(client) && (GetClientTeam(client) > 1) && (!IsPlayerAlive(client)) && g_playerClass[client] ) + { + if ( !g_roundStarted ) + { + PrintToChat(client,"\x04[Auto !zspawn] \x01You will respawn next round"); + } + else if (FindConVar("gs_zombiereloaded_version") != INVALID_HANDLE) + { + FakeClientCommand(client, "zspawn"); + } + else if (FindConVar("zombie_version") != INVALID_HANDLE) + { + FakeClientCommand(client, "zombie_respawn"); + } + else + { + FakeClientCommand(client, "say !zspawn"); + } + } + g_Respawn[client] = INVALID_HANDLE; + return Plugin_Stop; +} + +public Event_PlayerTeam(Handle:event, const String:name[], bool:dontBroadcast) +{ + new newTeam = GetEventInt(event, "team"); + new client = GetClientOfUserId(GetEventInt(event, "userid")); + + if ( !client || (newTeam < 2) ) + { + return; + } + + if ( IsFakeClient(client) ) + { + g_playerClass[client] = 1; + // Fake clients does not exec joinclass, so we need to spawn them + // just when they joined team + g_Respawn[client] = CreateTimer(g_respawnTime, ExecRespawn, client); + } + else + { + g_playerClass[client] = 0; + } +} +