Воскрешение

Тема в разделе "Общие вопросы", создана пользователем Jast Cous, 6 ноя 2015.

  1. Jast Cous

    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;
    }
     
  2. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.509
    Симпатии:
    1.962
    Нужно && и, раз мёртвых, то !IsPlayerAlive(i).
     
  3. Hejter

    Hejter Mapper Source Engine

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

    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_TimerRespawnAll); 


    public 
    Action:RespawnAll(Handle:timerany:client
    {
        
    respawn INVALID_HANDLE;

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

    Jast Cous

    Сообщения:
    13
    Симпатии:
    0
    Спасибо большое

    Добавлено через 34 минуты
    Спасибо
     
    Последнее редактирование: 7 ноя 2015
  5. The End Is Near...

    The End Is Near... Russian Roulette

    Сообщения:
    893
    Симпатии:
    659
    Hejter
    А если клиент в наблюдении? можно обойтись одним событием round_start
     
    Последнее редактирование: 7 ноя 2015
  6. Hejter

    Hejter Mapper Source Engine

    Сообщения:
    1.771
    Симпатии:
    259
    Сделать проверку, в наблюдение он или нет. Хотя я еще учусь, спорить не буду :-D