#include <sourcemod>
new Handle:FastProm[MAXPLAYERS+1];
public OnPluginStart() HookEvent("round_start", Event_RoundStart, EventHookMode_PostNoCopy);
public OnClientDisconnect(client)
{
if (FastProm[client] != INVALID_HANDLE)
{
KillTimer(FastProm[client]);
FastProm[client] = INVALID_HANDLE;
}
}
public Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{
new client=GetClientOfUserId(GetEventInt(event, "userid"));
FakeClientCommand(client, "say wcs_play");
FastProm[client] = CreateTimer(60.0, FastProm_Open, client);
}
public Action:FastProm_Open(Handle:timer, any:client)
{
FakeClientCommand(client, "say wcs_stop");
FastProm[client] = INVALID_HANDLE;
}
В событии начала раунда нельзя получить клиента. Используй цикл.public Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast){ new client=GetClientOfUserId(GetEventInt(event, "userid"));
Здесь так делать плохо. Ставь циклом после таймера.CreateTimer(60.0, FastProm_Open, client);
Здесь так делать плохо. Ставь циклом после таймера.
#include <sourcemod>
new Handle:FastProm[MAXPLAYERS+1];
public OnPluginStart() HookEvent("round_start", Event_RoundStart, EventHookMode_PostNoCopy);
public OnClientDisconnect(i)
{
if (FastProm[i] != INVALID_HANDLE)
{
KillTimer(FastProm[i]);
FastProm[i] = INVALID_HANDLE;
}
}
public Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{
for(new i=1; i <= MaxClients; i++)
{
FakeClientCommand(i, "say wcs_play");
FastProm[i] = CreateTimer(60.0, FastProm_Open, i);
}
}
public Action:FastProm_Open(Handle:timer, any:i)
{
FakeClientCommand(i, "say wcs_stop");
FastProm[i] = INVALID_HANDLE;
}
Зачем получать клиента заранее, если действие для него выполнятся через минуту? За это время он может выйти. И вообще, создавать таймер для каждого (по факту), когда действие всегда выполняется у всех одновременно и в начале, и в конце?что значит это?
Дальше таймер отдельный от i. Лучше ещё раз циклом. А вообще, если игрок зайдёт чуть позже начала раунда, то игра его отспавнит, а твоя команда не сработает. Получается баг.for(new i=1; i <= MaxClients; i++)
{
FakeClientCommand(i, "say wcs_play");
Зачем получать клиента заранее, если действие для него выполнятся через минуту? За это время он может выйти. И вообще, создавать таймер для каждого (по факту), когда действие всегда выполняется у всех одновременно и в начале, и в конце?
Дальше таймер отдельный от i. Лучше ещё раз циклом. А вообще, если игрок зайдёт чуть позже начала раунда, то игра его отспавнит, а твоя команда не сработает. Получается баг.
В итоге, начинай команду от спавна.
Не обязательно второй. Только присоединился к серверу, а раунд начат. Если он зайдёт за команду, КТ например, через несколько секунд после этого, то его сама игра возродит, а твоя фишка не сработает. Тебе такое нужно?возродиться второй раз
new Handle:FastProm;
public OnPluginStart() HookEvent("round_start", Event_RoundStart, EventHookMode_PostNoCopy);
public Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{
if (FastProm != INVALID_HANDLE) KillTimer(FastProm);
else
{
for (new i = 1; i <= MaxClients; i++)
{
if (IsClientInGame(i)) FakeClientCommand(i, "say wcs_play");
}
}
FastProm = CreateTimer(60.0, FastProm_Open);
}
public Action:FastProm_Open(Handle:timer)
{
FastProm = INVALID_HANDLE;
for (new i = 1; i <= MaxClients; i++)
{
if (IsClientInGame(i)) FakeClientCommand(i, "say wcs_stop");
}
}
new Handle:FastProm;
public OnPluginStart() HookEvent("round_start", Event_RoundStart, EventHookMode_PostNoCopy);
public Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{
if (FastProm != INVALID_HANDLE) KillTimer(FastProm);
for (new i = 1; i <= MaxClients; i++)
{
if (IsClientInGame(i)) FakeClientCommand(i, "say wcs_play");
}
FastProm = CreateTimer(60.0, FastProm_Open);
}
public Action:FastProm_Open(Handle:timer)
{
FastProm = INVALID_HANDLE;
for (new i = 1; i <= MaxClients; i++)
{
if (IsClientInGame(i)) FakeClientCommand(i, "say wcs_stop");
}
}
CreateTimer(5.0, Timer_Vote, victim);
PrintHintText(client, "Вы возродитесь через: %d", ???);
Насколько я знаю - никак. Если бы на это был натив, то этим давно пользовались и не создавали повторяющихся таймеров показа остатка времени.получить значение таймера
Насколько я знаю - никак. Если бы на это был натив, то этим давно пользовались и не создавали повторяющихся таймеров показа остатка времени.
Не известно, чего ты хочешь конкретно сделать, относительно чего? Что выставляет значение времени? Другой плагин воскрешения или же ты сам воскрешаешь игра?показать пример
new Handle:FastProm[MAXPLAYERS+1];
public OnPluginStart()
{
HookEvent("player_death", Event_PlayerDeath, EventHookMode_PostNoCopy);
}
public Event_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
{
FastProm = CreateTimer(5.0, FastProm_Open);
PrintHintText(client, "Вы возродитесь через: %d", ???);
}
public Action:FastProm_Open(Handle:timer)
{
FastProm = INVALID_HANDLE;
CS_RespawnPlayer(client);
}
new sec[MAXPLAYERS+1];
public OnPluginStart()
{
HookEvent("player_death", Event_PlayerDeath, EventHookMode_Post);
}
public Event_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
{
new client = GetClientOfUserId(GetEventInt(event, "userid"));
sec[client] = 5;
CreateTimer(1.0, FastProm_Open, client, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
}
public Action:FastProm_Open(Handle:timer, any:client)
{
if (--sec[client] > 0)
{
PrintHintText(client, "Вы возродитесь через: %d", sec[client]);
return Plugin_Continue;
}
else if (client && IsClientInGame(client)) CS_RespawnPlayer(client);
return Plugin_Stop;
}
Спс, то что нужно.pokypka20, чисто пример и даю:
PHP:new sec[MAXPLAYERS+1]; public OnPluginStart() { HookEvent("player_death", Event_PlayerDeath, EventHookMode_Post); } public Event_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast) { new client = GetClientOfUserId(GetEventInt(event, "userid")); sec[client] = 5; CreateTimer(1.0, FastProm_Open, client, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE); } public Action:FastProm_Open(Handle:timer, any:client) { if (--sec[client] > 0) { PrintHintText(client, "Вы возродитесь через: %d", sec[client]); return Plugin_Continue; } else if (client && IsClientInGame(client)) CS_RespawnPlayer(client); return Plugin_Stop; }