Всем привет, не стал создавать тему и тут пойдёт :Д.
Касяк такой почему после убийства танка шестого вроде, появляется новый как как задумано и опять запускается таймер когда танк жив, хотя таймер должен был за работать после убийства танка, ну я как бы пытался объяснить.
#pragma semicolon 1
#include <sourcemod>
#pragma newdecls required
int g_TimerTank, g_Timer;
bool locktime, locktank, stopfinal;
char ModelName[100], id_player[32];
public void OnPluginStart()
{
HookEventEx("tank_killed", Event_TankKilled, EventHookMode_Pre);
HookEventEx("player_death", Event_PlayerDeath, EventHookMode_Pre);
HookEvent("round_start", EventRoundStart);
HookEvent("tank_spawn", Event_ResetBool);
HookEvent("finale_start", Event_FinaleStart);
}
public void EventRoundStart(Event event, const char[] name, bool dontBroadcast)
{
locktime = true, locktank = false, stopfinal = false;
switch(GetRandomInt(0, 2))
{
case 0:g_Timer = 30;
case 1:g_Timer = 25;
case 2:g_Timer = 20;
}
}
public void Event_FinaleStart(Event event, const char[] name, bool dontBroadcast)
{
stopfinal = true;
g_Timer = 1;
}
public void Event_ResetBool(Event event, const char[] name, bool dontBroadcast)
{
if(locktank)return;
{
locktime = false, locktank = true;
}
}
public void Event_TankKilled(Event event, const char[] name, bool dontBroadcast)
{
if(stopfinal)return;
{
int client = GetClientOfUserId(event.GetInt("attacker"));
{
if(client) GetClientName(client, id_player, sizeof(id_player));
{
int anyclient = GetAnyClient();
if(anyclient == -1)return;
{
L4D_CheatCommand(anyclient, "z_spawn", "mob", "auto");
L4D_CheatCommand(anyclient, "director_force_panic_event");
PrintToChatAll("\x04%s \x03убил(а) персонажа \x04Танк, \x03тем самым вызвал \x04паническую волну!", id_player);
}
}
}
}
}
public void Event_PlayerDeath(Event event, const char[] name, bool dontBroadcast)
{
if(locktime)return;
{
int client = GetClientOfUserId(event.GetInt("userid"));
GetEntPropString(client, Prop_Data, "m_ModelName", ModelName, sizeof(ModelName));
if (StrContains(ModelName, "hulk") != -1)
{
CreateTimer(1.0, l4d_spawntank, client, TIMER_REPEAT | TIMER_FLAG_NO_MAPCHANGE);
g_TimerTank = 0;
locktime = true;
}
}
}
public Action l4d_spawntank(Handle timer)
{
if (++g_TimerTank < g_Timer)
{
PrintCenterTextAll("Танк появится через %d /??", g_TimerTank);
return Plugin_Continue;
}
int anyclient = GetAnyClient();
if(anyclient == -1)return Plugin_Continue;
{
L4D_CheatCommand(anyclient, "z_spawn", "tank", "auto");
if(stopfinal)return Plugin_Continue;
{
PrintToChatAll("\x03 За истребление \x04паническую волны, \x03появился новый \x04Танк.");
}
}
locktank = false;
return Plugin_Stop;
}
stock int GetAnyClient()
{
int i;
for (i = 1; i <= GetMaxClients(); i++)
{
if (IsClientConnected(i) && IsClientInGame(i) && !IsFakeClient(i))
return i;
break;
}
return 0;
}
stock void L4D_CheatCommand(int client, char [] command, char arguments[]="", char argument[]="")
{
if (client)
{
int userflags = GetUserFlagBits(client);
SetUserFlagBits(client, ADMFLAG_ROOT);
int flags = GetCommandFlags(command);
SetCommandFlags(command, flags & ~FCVAR_CHEAT);
FakeClientCommand(client, "%s %s %s", command, arguments, argument);
SetCommandFlags(command, flags);
SetUserFlagBits(client, userflags);
}
}
Сообщение отредактировал AlexMy: 13 Август 2017 - 16:54