sm-plugins/ZombieManager/scripting/ZombieManager.sp
2019-06-10 17:59:23 +02:00

193 lines
4.2 KiB
SourcePawn

#pragma semicolon 1
#include <sourcemod>
#include <cstrike>
#include <multicolors>
#include <zombiereloaded>
bool g_bTestRound;
bool g_bAdminTestRound;
bool g_bMotherZM[MAXPLAYERS + 1] = { false, ...};
public Plugin myinfo =
{
name = "Zombie Manager",
author = "Dogan",
description = "Tools to manage testround and zombies",
version = "1.0.0",
url = ""
};
public void OnPluginStart()
{
g_bTestRound = false;
g_bAdminTestRound = false;
RegAdminCmd("sm_testround", Command_Testround, ADMFLAG_GENERIC, "Toggle to enable/disable a test round.");
CreateTimer(20.0, Timer_MessageTestRound, _, TIMER_REPEAT);
HookEvent("round_start", OnRoundStart);
HookEvent("player_spawn", OnClientSpawn);
HookEvent("player_team", OnPlayerTeam);
AddMultiTargetFilter("@mzombie", Filter_Motherzombies, "Mother Zombies", false);
RegConsoleCmd("sm_mzombie", Command_DisplayMotherzombies, "Current Mother Zombies");
}
public void OnPluginEnd()
{
RemoveMultiTargetFilter("@mzombie", Filter_Motherzombies);
}
public void OnRoundStart(Event hEvent, const char[] sName, bool bDontBroadcast)
{
g_bTestRound = false;
g_bAdminTestRound = false;
for(int i = 1; i <= MaxClients; i++)
{
g_bMotherZM[i] = false;
}
}
public void ZR_OnClientHumanPost(int client, bool respawn, bool protect)
{
g_bMotherZM[client] = false;
}
public void ZR_OnClientInfected(int client, int attacker, bool motherInfect, bool respawnOverride, bool respawn)
{
g_bMotherZM[client] = motherInfect;
}
public void OnClientSpawn(Event hEvent, const char[] sName, bool bDontBroadcast)
{
int client = GetClientOfUserId(hEvent.GetInt("userid"));
g_bMotherZM[client] = false;
}
public Action OnPlayerTeam(Event event, const char[] name, bool dontBroadcast)
{
int client = GetClientOfUserId(GetEventInt(event, "userid"));
if(g_bMotherZM[client])
{
g_bMotherZM[client] = false;
}
}
public bool Filter_Motherzombies(const char[] sPattern, Handle hClients, int client)
{
for(int i = 1; i <= MaxClients; i++)
{
if(IsClientInGame(i) && !IsFakeClient(i))
{
if(g_bMotherZM[i])
PushArrayCell(hClients, i);
}
}
return true;
}
public Action Command_DisplayMotherzombies(int client, int args)
{
char aBuf[1024];
char aBuf2[MAX_NAME_LENGTH];
for(int i = 1; i <= MaxClients; i++)
{
if(IsClientInGame(i) && !IsFakeClient(i))
{
if(g_bMotherZM[i])
{
GetClientName(i, aBuf2, sizeof(aBuf2));
StrCat(aBuf, sizeof(aBuf), aBuf2);
StrCat(aBuf, sizeof(aBuf), ", ");
}
}
}
if(strlen(aBuf))
{
aBuf[strlen(aBuf) - 2] = 0;
ReplyToCommand(client, "[SM] Current Mother Zombies: %s", aBuf);
}
else
ReplyToCommand(client, "[SM] Current Mother Zombies: none");
return Plugin_Handled;
}
public Action Command_Testround(int client, int args)
{
if(GetClientTeam(client) == CS_TEAM_SPECTATOR)
{
ReplyToCommand(client, "[SM] Please join a Team first.");
return Plugin_Handled;
}
if(!IsPlayerAlive(client))
{
ReplyToCommand(client, "[SM] Please respawn yourself first.");
return Plugin_Handled;
}
ToggleTestRound(client);
return Plugin_Handled;
}
public void ToggleTestRound(int client)
{
g_bAdminTestRound = !g_bAdminTestRound;
if(g_bTestRound)
{
g_bTestRound = false;
ReplyToCommand(client, "[SM] Deactivated this Test Round.");
CPrintToChatAll("[SM] %N deactivated this Test Round!", client);
LogAction(client, -1, "\"%L\" deactivated this Test Round.", client);
}
else
{
g_bTestRound = true;
ReplyToCommand(client, "[SM] Activated a Test Round.");
CPrintToChatAll("[SM] %N activated a Test Round!", client);
LogAction(client, -1, "\"%L\" activated a Test Round.", client);
if(ZR_IsClientHuman(client))
ZR_InfectClient(client);
for(int i = 1; i <= MaxClients; i++)
{
if(i != client && IsClientInGame(i) && !IsFakeClient(i))
{
ZR_HumanClient(i, false, false);
}
}
}
}
public Action ZR_OnClientRespawn(int &client, ZR_RespawnCondition &condition)
{
if(g_bTestRound)
condition = ZR_Respawn_Human;
return Plugin_Changed;
}
public Action Timer_MessageTestRound(Handle timer)
{
if(g_bTestRound)
{
CPrintToChatAll("{cyan}[UNLOZE] {red}This is a Test Round!");
CPrintToChatAll("{cyan}[UNLOZE] {red}This is a Test Round!");
CPrintToChatAll("{cyan}[UNLOZE] {red}This is a Test Round!");
}
return Plugin_Continue;
}