update Spectate

This commit is contained in:
BotoX 2018-08-07 22:39:17 +02:00
parent 06518f1b0b
commit dd024b6e5f
2 changed files with 42 additions and 1 deletions

View File

@ -1,10 +1,12 @@
#pragma semicolon 1 #pragma semicolon 1
#pragma newdecls required
#include <sourcemod> #include <sourcemod>
#include <sdktools> #include <sdktools>
#include <cstrike> #include <cstrike>
#include <zombiereloaded> #include <zombiereloaded>
#include "loghelper.inc"
#pragma newdecls required
public Plugin myinfo = public Plugin myinfo =
{ {
@ -37,9 +39,15 @@ public void OnPluginStart()
RegConsoleCmd("sm_spectate", Command_Spectate, "Spectate a player."); RegConsoleCmd("sm_spectate", Command_Spectate, "Spectate a player.");
RegConsoleCmd("sm_spec", Command_Spectate, "Spectate a player."); RegConsoleCmd("sm_spec", Command_Spectate, "Spectate a player.");
AddCommandListener(Command_SpectateViaConsole, "spectate");
AddCommandListener(Command_GoTo, "spec_goto"); AddCommandListener(Command_GoTo, "spec_goto");
} }
public void OnMapStart()
{
GetTeams();
}
public void OnClientSettingsChanged(int client) public void OnClientSettingsChanged(int client)
{ {
static char sSpecMode[8]; static char sSpecMode[8];
@ -87,6 +95,9 @@ public Action Command_Spectate(int client, int argc)
{ {
if (GetClientTeam(client) != CS_TEAM_SPECTATOR) if (GetClientTeam(client) != CS_TEAM_SPECTATOR)
{ {
if ((IsPlayerAlive(client) && ZR_IsClientHuman(client)) && GetTeamClientCount(CS_TEAM_T) > 0 && GetTeamAliveClientCount(CS_TEAM_T) > 0)
LogPlayerEvent(client, "triggered", "switch_to_spec");
ForcePlayerSuicide(client); ForcePlayerSuicide(client);
ChangeClientTeam(client, CS_TEAM_SPECTATOR); ChangeClientTeam(client, CS_TEAM_SPECTATOR);
} }
@ -109,6 +120,9 @@ public Action Command_Spectate(int client, int argc)
if (GetClientTeam(client) != CS_TEAM_SPECTATOR) if (GetClientTeam(client) != CS_TEAM_SPECTATOR)
{ {
if ((IsPlayerAlive(client) && ZR_IsClientHuman(client)) && GetTeamClientCount(CS_TEAM_T) > 0 && GetTeamAliveClientCount(CS_TEAM_T) > 0)
LogPlayerEvent(client, "triggered", "switch_to_spec");
ForcePlayerSuicide(client); ForcePlayerSuicide(client);
ChangeClientTeam(client, CS_TEAM_SPECTATOR); ChangeClientTeam(client, CS_TEAM_SPECTATOR);
} }
@ -128,6 +142,14 @@ public Action Command_Spectate(int client, int argc)
return Plugin_Handled; return Plugin_Handled;
} }
public Action Command_SpectateViaConsole(int client, char[] command, int args)
{
if ((IsPlayerAlive(client) && ZR_IsClientHuman(client)) && GetTeamClientCount(CS_TEAM_T) > 0 && GetTeamAliveClientCount(CS_TEAM_T) > 0)
LogPlayerEvent(client, "triggered", "switch_to_spec");
return Plugin_Continue;
}
// Fix spec_goto crash exploit // Fix spec_goto crash exploit
public Action Command_GoTo(int client, const char[] command, int argc) public Action Command_GoTo(int client, const char[] command, int argc)
{ {
@ -149,3 +171,21 @@ public Action Command_GoTo(int client, const char[] command, int argc)
return Plugin_Continue; return Plugin_Continue;
} }
stock int GetTeamAliveClientCount(int iTeam)
{
int ret = 0;
for (int i = 1; i <= MaxClients; i++)
{
if (!IsClientInGame(i) || GetClientTeam(i) != iTeam)
continue;
if (!IsPlayerAlive(i))
continue;
ret++;
}
return ret;
}

View File

@ -0,0 +1 @@
../../../includes/loghelper.inc