#pragma semicolon 1
#include <sourcemod>
bool g_EventTankKilled = false;
bool g_EventTankSpawn = false;
bool g_EventCreate_Panic = false;
bool g_EventTankSpawnTwo = false;
public void OnPluginStart()
{
HookEvent("finale_start", Event_finale_start, EventHookMode_PostNoCopy);
HookEvent("round_start", OnReset);
HookEvent("round_end", OnReset, EventHookMode_Pre);
HookEvent("finale_win", OnReset, EventHookMode_Pre);
HookEvent("mission_lost", OnReset, EventHookMode_Pre);
HookEvent("map_transition", OnReset, EventHookMode_Pre);
}
public Action OnReset(Event event, const char[] name, bool dontBroadcast)
{
for (int i = 1; i <= MaxClients; ++i)
{
if (IsClientInGame(i))
{
g_EventTankKilled = false;
g_EventTankSpawn = false;
g_EventCreate_Panic = false;
g_EventTankSpawnTwo = false;
}
}
}
public void OnMapStart()
{
if (!g_EventTankKilled)
{
HookEvent("tank_killed", Event_tank_killed, EventHookMode_PostNoCopy);
g_EventTankKilled = true;
}
}
public void Event_finale_start(Event event, const char[] name, bool dontBroadcast)
{
if (!g_EventTankSpawn)
{
HookEvent("player_death", Event_finale_start_tank, EventHookMode_PostNoCopy);
g_EventTankSpawn = true;
}
if (!g_EventCreate_Panic)
{
HookEvent("create_panic_event", Event_create_panic_event, EventHookMode_PostNoCopy);
g_EventCreate_Panic = true;
}
if(g_EventTankKilled)
{
UnhookEvent("tank_killed", Event_tank_killed, EventHookMode_PostNoCopy);
g_EventTankKilled = false;
}
}
public void Event_create_panic_event(Handle event, const char[] name, bool dontBroadcast)
{
if (!g_EventTankSpawnTwo)
{
HookEvent("player_incapacitated", Event_player_incapacitated, EventHookMode_PostNoCopy);
g_EventTankSpawnTwo = true;
}
}
public void Event_player_incapacitated(Handle h_Event, const char[] name, bool dontBroadcast)
{
decl i_UserID, i_Client, String:s_ModelName[64];
i_UserID = GetEventInt(h_Event, "userid");
i_Client = GetClientOfUserId(i_UserID);
GetEntPropString(i_Client, Prop_Data, "m_ModelName", s_ModelName, sizeof(s_ModelName));
if (StrContains(s_ModelName, "hulk") != -1)
{
CreateTimer(0.1, SpawnTankFinalTwo, TIMER_FLAG_NO_MAPCHANGE);
}
}
public void Event_finale_start_tank(Handle h_Event, const char[] name, bool dontBroadcast)
{
decl i_UserID, i_Client, String:s_ModelName[64];
i_UserID = GetEventInt(h_Event, "userid");
i_Client = GetClientOfUserId(i_UserID);
GetEntPropString(i_Client, Prop_Data, "m_ModelName", s_ModelName, sizeof(s_ModelName));
if (StrContains(s_ModelName, "hulk") != -1)
{
CreateTimer(0.1, SpawnTankFinal, TIMER_FLAG_NO_MAPCHANGE);
}
}
public Action SpawnTankFinal(Handle timer)
{
if(g_EventTankSpawn)
{
UnhookEvent("player_death", Event_finale_start_tank, EventHookMode_PostNoCopy);
g_EventTankSpawn = false;
}
for (int i = 1; i <= MaxClients; ++i)
{
if (IsClientInGame(i) && !IsFakeClient(i))
{
int flags = GetCommandFlags("z_spawn");
SetCommandFlags("z_spawn", flags & ~FCVAR_CHEAT);
FakeClientCommand(i, "z_spawn tank auto");
SetCommandFlags("z_spawn", flags);
break;
}
return Plugin_Continue;
}
return Plugin_Stop;
}
public void Event_tank_killed(Event event, const char[] name, bool dontBroadcast)
{
UnhookEvent("tank_killed", Event_tank_killed, EventHookMode_PostNoCopy);
g_EventTankKilled = false;
{
CreateTimer(4.0, timer_SpawnTank, GetClientOfUserId(GetEventInt(event, "userid")), TIMER_FLAG_NO_MAPCHANGE);
}
}
public Action SpawnTankFinalTwo(Handle timer)
{
if(g_EventTankSpawnTwo)
{
UnhookEvent("player_incapacitated", Event_player_incapacitated, EventHookMode_PostNoCopy);
g_EventTankSpawnTwo = false;
}
for (int i = 1; i <= MaxClients; ++i)
{
if (IsClientInGame(i) && !IsFakeClient(i))
{
int flags = GetCommandFlags("z_spawn");
SetCommandFlags("z_spawn", flags & ~FCVAR_CHEAT);
FakeClientCommand(i, "z_spawn tank auto");
SetCommandFlags("z_spawn", flags);
break;
}
return Plugin_Continue;
}
return Plugin_Stop;
}
public Action timer_SpawnTank(Handle timer)
{
for (int i = 1; i <= MaxClients; ++i)
{
if (IsClientInGame(i) && !IsFakeClient(i))
{
int flags = GetCommandFlags("z_spawn");
SetCommandFlags("z_spawn", flags & ~FCVAR_CHEAT);
FakeClientCommand(i, "z_spawn tank auto");
SetCommandFlags("z_spawn", flags);
break;
}
return Plugin_Continue;
}
return Plugin_Stop;
}