[Sourcepawn][CSS и ZR]Убийство людей в конце раунда

Тема в разделе "Программирование / Скриптинг", создана пользователем TheRunningMan, 12 ноя 2011.

  1. TheRunningMan

    TheRunningMan

    Сообщения:
    163
    Симпатии:
    9
    Извините конечно, что задаю много вопросов по поводу программирования, но я не могу понять как исправить....
    Вот то, что я написал, возможно можно сделать проще....
    PHP:
    new Handle:t_timer[MAXPLAYERS+1] = INVALID_HANDLE;   
    new 
    Float:g_cvarRoundTime
    new 
    Float:ForTimer;
    new 
    boolzombie[MAXPLAYERS+1];    
    public 
    OnPluginStart()   
    {
        
    HookEvent("round_freeze_end"RoundStart);
        
    HookEvent("round_end"roundend);
    }   

    public 
    Action:RoundStart(Handle:event, const String:name[], bool:dontBroadcast)   
    {
        new 
    client GetClientOfUserId(GetEventInt(event"userid"));
        
        if (
    t_timer[client] != INVALID_HANDLE) { 
            
    KillTimer(t_timer[client]); 
            
    t_timer[client] = INVALID_HANDLE
        }
        
        
    g_cvarRoundTime GetConVarFloat(FindConVar("mp_roundtime"));
        
        
    ForTimer = (g_cvarRoundTime*60.0 2.0); 
        
        for(new 
    Client 1Client <= MaxClientsClient++)  
        {  
            if (
    IsClientInGame(Client)) 
            { 
                if (
    IsPlayerAlive(Client))
                {
                    if (
    ZR_IsClientHuman(Client))
                    {
                        
    t_timer[Client] = CreateTimer(ForTimerkillerClient);
                        
    zombie[Client] = false
                    
    }
                }  
            } 
        }
    }   

    public 
    Action:ZR_OnClientInfect(&client, &attacker, &bool:motherInfect, &bool:respawnOverride, &bool:respawn)
    {
        if (
    t_timer[client] != INVALID_HANDLE) { 
            
    KillTimer(t_timer[client]); 
            
    t_timer[client] = INVALID_HANDLE;
        }
        
    zombie[client] = true;
        
        return 
    Plugin_Continue;
    }

    public 
    Actionkiller(Handle:timer)   
    {
        for(new 
    client 1client <= MaxClientsclient++)  
            {  
                if (
    IsClientInGame(client)) 
                { 
                    if (
    IsPlayerAlive(client))
                    {
                        if (
    ZR_IsClientHuman(client) && (zombie[client] == false))
                        {
                            
    ForcePlayerSuicide(client);
                    
                            if (
    t_timer[client] != INVALID_HANDLE) { 
                            
    KillTimer(t_timer[client]); 
                            
    t_timer[client] = INVALID_HANDLE
                            }
                        }
                    }
                }
            }
        return 
    Plugin_Handled;   
    }

    public 
    roundend(Handle:event, const String:name[], bool:dontBroadcast
    {
        new 
    client GetClientOfUserId(GetEventInt(event"userid"));
        
        if (
    t_timer[client] != INVALID_HANDLE) { 
            
    KillTimer(t_timer[client]); 
            
    t_timer[client] = INVALID_HANDLE
        }
    }
    Идея такого, что когда время раунда приближается к 0 людей убивает, зомби остаются в живых, это у меня всегда все работает, но в функции killer есть условие ZR_IsClientHuman(client), он его просто игнорирует(следовательно не убивает), я сделал переменную, котора определят зомб клиент или нет, если ее значение ложь, то его убьет, но это не суть проблемы, главная проблема заключается в том, что по началу таймер срабатывает вовремя, но спустя несколько игр, он начинает жестоко тупить, и убивает то сразу после начала раунда, то секунд через 30(когда время раунда 2 минуты)или через минут, вообщем срабатывает раньше времени.....

    P.S. Подскажите разбирающиеся люди имеющие опыт в программировании для игры CS Source!
     
    Последнее редактирование: 12 ноя 2011
  2. FrozDark

    FrozDark Команда сайта HLMod Модератор

    Сообщения:
    1.761
    Симпатии:
    1.915
    PHP:
    new Handle:hTimer;
    new 
    Handle:mp_roundtime;

    public 
    OnPluginStart()

        
    HookEvent("round_start"RoundStart); 
        
    HookEvent("round_freeze_end"RoundStart);
        
    mp_roundtime FindConVar("mp_roundtime");
        if (
    mp_roundtime == INVALID_HANDLE)
            
    SetFailState("Couldn't find 'mp_roundtime' cvar");
    }

    public 
    OnMapEnd()
        
    hTimer INVALID_HANDLE;

    public 
    RoundStart(Handle:event, const String:name[], bool:dontBroadcast)    

        new 
    client GetClientOfUserId(GetEventInt(event"userid")); 
         
        if (
    hTimer != INVALID_HANDLE) {  
            
    KillTimer(hTimer);  
            
    hTimer INVALID_HANDLE;  
        } 
         
        
    hTimer CreateTimer(GetConVarFloat(mp_roundtime)*60.0 1.0OnRoundEnd_TIMER_FLAG_NO_MAPCHANGE);
    }

    public 
    Action:OnRoundEnd(Handle:timer)    

        for(new 
    client 1client <= MaxClientsclient++)   
        {   
            if (
    IsClientInGame(client) && IsPlayerAlive(client) && ZR_IsClientHuman(client))  
                
    ForcePlayerSuicide(client); 
        }
        
    hTimer INVALID_HANDLE;
        return 
    Plugin_Stop;    
    }
     
    TheRunningMan нравится это.
  3. Fab3r

    Fab3r

    Сообщения:
    1.516
    Симпатии:
    367
    TheRunningMan, код под spoiler спрячь, и на форуме большие коды не выкладывай без спойлера!
     
    TheRunningMan нравится это.
  4. TheRunningMan

    TheRunningMan

    Сообщения:
    163
    Симпатии:
    9
    Потестил(с ботами), вроде убивает вовремя, но когда я остаюсь одни человеком, плагин почемуто убивает меня и зомби-ботов тоже....
    Потестил с льдьми, все также....
    Получается что он игнорирует условие что клиент должен быть зомби...
     
    Последнее редактирование: 12 ноя 2011
  5. FrozDark

    FrozDark Команда сайта HLMod Модератор

    Сообщения:
    1.761
    Симпатии:
    1.915
    получается что мод ZR глючный
     
  6. TheRunningMan

    TheRunningMan

    Сообщения:
    163
    Симпатии:
    9
    хмм..странно
    Но я уже писал плагин против возрождения зомби когда людей мало, использовал функции IsClientHuman(Zombie) и все работает отлично....