Последний раунд карты(Вопрос)

Тема в разделе "Программирование / Скриптинг", создана пользователем R1KO, 25 май 2013.

  1. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.972
    Симпатии:
    2.978
    Как отловить конец последнего раунда карты ?
    Смотрел RoundEndSounds и MapChooser, нашел этот код, но он больно уж сложный для восприятия и не могу в нем разобраться.
     
  2. The End Is Near...

    The End Is Near... Russian Roulette

    Сообщения:
    893
    Симпатии:
    659
    Отлавливаешь раунд, получаешь время до конца карты, если конец карты - твой код
     
  3. Черная вдова

    Черная вдова

    Сообщения:
    1.621
    Симпатии:
    234
    фишка в том, что допустим осталась 1 минута и раунд может либо кончиться быстро те менее 1 минуты и будет еще 1 раунд или раунд будет длится больше 1 минуты и наступит конец карты
    Я думаю сервер вряд ли может знать будущее,хотя возможно тебе это не понадобиться если тебе нужен конец последнего раунда, а не его начало
     
  4. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.972
    Симпатии:
    2.978
    The End Is Near..., Дело в том, что я пробывал, вот код:

    PHP:
    #pragma semicolon 1
    #include <sourcemod>

    new g_TotalRounds;
    new 
    Handle:g_Cvar_WinLimit;
    new 
    Handle:g_Cvar_MaxRounds;

    public 
    OnPluginStart()
    {
        
    HookEvent("round_end"OnRoundEnd);
        
    g_Cvar_WinLimit FindConVar("mp_winlimit");
        
    g_Cvar_MaxRounds FindConVar("mp_maxrounds");
    }

    public 
    OnMapStart()
        
    g_TotalRounds 0;

    public 
    Action:OnRoundEnd(Handle:event, const String:name[], bool:dontBroadcast)
    {
        
    g_TotalRounds++;
        
        if (
    CheckMapEnd()) PrintToChatAll("\x03Конец рануда. \x04Последний");
        else 
    PrintToChatAll("\x03Конец рануда. \x04Не последний");
    }

    bool:CheckMapEnd()
    {
        new 
    bool:lastround false;
        new 
    bool:notimelimit false;
        new 
    timeleft;
        
        if (
    GetMapTimeLeft(timeleft))
        {
            new 
    timelimit;
            
            if (
    timeleft 0)
                return 
    false;
            
            else if (
    GetMapTimeLimit(timelimit) && !timelimit)
                
    notimelimit true;
            
            else
                
    lastround true;
        }
        
        if (!
    lastround)
        {
            if (
    g_Cvar_WinLimit != INVALID_HANDLE)
            {
                new 
    winlimit GetConVarInt(g_Cvar_WinLimit);
                
                if (
    winlimit 0)
                {
                    if (
    GetTeamScore(2) >= winlimit || GetTeamScore(3) >= winlimit)
                        
    lastround true;
                }
            }
            
            if (
    g_Cvar_MaxRounds != INVALID_HANDLE)
            {
                new 
    maxrounds GetConVarInt(g_Cvar_MaxRounds);
                
                if (
    maxrounds 0)
                {
                    
    //new remaining = maxrounds - (g_TotalRounds+1);
                    
    new remaining maxrounds g_TotalRounds;
                    
                    if (!
    remaining)
                        
    lastround true;
                }        
            }
        }
        
        if (
    lastround)
            return 
    true;
            
        else if (
    notimelimit)
            return 
    false;
        
        return 
    true;
    }

    И проблема в том, что выводит о конце последнего раунда, в последнем и предпоследнем раунде. И к тому же код, больно уж сложный, как по мне.