add AutoZSpawn
This commit is contained in:
		
							parent
							
								
									107f263ef3
								
							
						
					
					
						commit
						595d932aca
					
				
							
								
								
									
										116
									
								
								AutoZSpawn/scripting/AutoZSpawn.sp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										116
									
								
								AutoZSpawn/scripting/AutoZSpawn.sp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,116 @@ | ||||
| #pragma semicolon 1 | ||||
| 
 | ||||
| #define VERSION "1.0.1" | ||||
| 
 | ||||
| #include <sourcemod> | ||||
| 
 | ||||
| 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; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user