Воскрешение

Jast Cous

Участник
Сообщения
13
Реакции
0
Делаю плагин. Его суть: воскрешение всех умерших игроков ежераундно каждые 20 секунд (Раз за раунд). Компилируется без ошибок, но сервер крашится. Помогите

#include <sourcemod>
#include <cstrike>

public Plugin:myinfo = {
name = "AutoRespawn",
author = "Anubis",
version = "1.0",
description = "Respawned player after x seconds every round",
url = ""
}

public OnPluginStart()
{
LoadTranslations("anubis.autorespawn.phrases");
HookEvent("round_start", OnRoundStart);
}

public Action:OnRoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{
PrintToChatAll("\x04[\x05%t\x04]\x05 %t", "tag", "after");
CreateTimer(20.0, RespawnAll);
}

public Action:RespawnAll(Handle:timer)
{
PrintToChatAll("\x04[\x05%t\x04]\x05 %t", "tag", "respawn");
for (new i = 1; i <= MaxClients; i++)
{
if (IsClientInGame(i) || IsPlayerAlive(i))
{
CS_RespawnPlayer(i);
}
}
return Plugin_Stop;
}
 

Hejter

xor ebx, ebx
Сообщения
1,759
Реакции
393
Нужно && и, раз мёртвых, то !IsPlayerAlive(i).

Вроде бы еще нужно таймер убивать, если он хочет один раз за раунд.

PHP:
#include <sourcemod>
#include <cstrike> 

#define Respawn_Timer 20.0

new Handle:respawn

public Plugin:myinfo = {
    name = "AutoRespawn",
    author = "Anubis",
    version = "1.0",
    description = "Respawned player after x seconds every round",
    url = ""
};

public OnPluginStart() 
{ 
    LoadTranslations("anubis.autorespawn.phrases"); 
    HookEvent("round_start", OnRoundStart); 
    HookEvent("round_end", OnRoundEnd);
} 

public Action:OnRoundEnd(Handle:event, const String:name[], bool:dontBroadcast)
{
    if(respawn != INVALID_HANDLE) {
        KillTimer(respawn);
        respawn = INVALID_HANDLE;
    }
}

public Action:OnRoundStart(Handle:event, const String:name[], bool:dontBroadcast) 
{ 
	PrintToChatAll("\x04[\x05%t\x04]\x05 %t", "tag", "after");
	respawn = CreateTimer(Respawn_Timer, RespawnAll); 
} 

public Action:RespawnAll(Handle:timer, any:client) 
{
	respawn = INVALID_HANDLE;

	PrintToChatAll("\x04[\x05%t\x04]\x05 %t", "tag", "respawn"); 
	for (new i = 1; i <= MaxClients; i++)
	{
	if (IsClientInGame(i) && !IsPlayerAlive(i))
		{
			CS_RespawnPlayer(i);
		}
	}
}
 
Последнее редактирование:

Jast Cous

Участник
Сообщения
13
Реакции
0
Вроде бы еще нужно таймер убивать, если он хочет один раз за раунд.

PHP:
#include <sourcemod>
#include <cstrike> 

#define Respawn_Timer 20.0

new Handle:respawn

public Plugin:myinfo = {
    name = "AutoRespawn",
    author = "Anubis",
    version = "1.0",
    description = "Respawned player after x seconds every round",
    url = ""
};

public OnPluginStart() 
{ 
    LoadTranslations("anubis.autorespawn.phrases"); 
    HookEvent("round_start", OnRoundStart); 
    HookEvent("round_end", OnRoundEnd);
} 

public Action:OnRoundEnd(Handle:event, const String:name[], bool:dontBroadcast)
{
    if(respawn != INVALID_HANDLE) {
        KillTimer(respawn);
        respawn = INVALID_HANDLE;
    }
}

public Action:OnRoundStart(Handle:event, const String:name[], bool:dontBroadcast) 
{ 
	PrintToChatAll("\x04[\x05%t\x04]\x05 %t", "tag", "after");
	respawn = CreateTimer(Respawn_Timer, RespawnAll); 
} 

public Action:RespawnAll(Handle:timer, any:client) 
{
	respawn = INVALID_HANDLE;

	PrintToChatAll("\x04[\x05%t\x04]\x05 %t", "tag", "respawn"); 
	for (new i = 1; i <= MaxClients; i++)
	{
	if (IsClientInGame(i) && !IsPlayerAlive(i))
		{
			CS_RespawnPlayer(i);
		}
	}
}
Спасибо большое

Добавлено через 34 минуты
Нужно && и, раз мёртвых, то !IsPlayerAlive(i).

Спасибо
 
Последнее редактирование:

The End Is Near...

Russian Roulette
Сообщения
874
Реакции
691
Hejter
А если клиент в наблюдении? можно обойтись одним событием round_start
 
Последнее редактирование:
Сверху Снизу