...

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

  1. ilga80

    ilga80

    Сообщения:
    153
    Симпатии:
    827
    ...
     
    Последнее редактирование: 22 фев 2013
  2. Scarface_slv

    Scarface_slv

    Сообщения:
    228
    Симпатии:
    47
    Re: JailbreakTeamBalance

    GetClientOfUserId(GetEventInt(event, "userid"))
    В round_start вроде как нельзя отловить userid и получить индекс игрока.
    new team = GetClientTeam(i) вроде должен быть в самом цикле for.
    ct[GetRandomInt(1, ct)] ct это ведь не массив, он хранит одно число=)
    Если я правильно думаю, я не очень силен в павне)
     
  3. Scarface_slv

    Scarface_slv

    Сообщения:
    228
    Симпатии:
    47
    Re: JailbreakTeamBalance

    new ct[MaxClients+1], t = 0, num = 0; добавь переменные так
    вместо ct++ попробуй ct[num++] = i;
    вместо if (t / ct < 2.75) так if (t / ct[num] < 2.75)
    и замени на это CS_SwitchTeam(ct[GetRandomInt(1, num-1)], 2); может получится компилировать, хз вообщем)
     
    AlmazON нравится это.
  4. Scarface_slv

    Scarface_slv

    Сообщения:
    228
    Симпатии:
    47
    Re: JailbreakTeamBalance

    if (t / ct[num] < 2.75) тут я не правильно написал)
    if (t / num < 2.75) так наверно должно быть
     
  5. Scarface_slv

    Scarface_slv

    Сообщения:
    228
    Симпатии:
    47
    Re: JailbreakTeamBalance

    ct[num++] = i; тут же плюсуем num++ количество кт, и вообще код изначально написан совсем не правильно как мне сказали)
     
  6. EPacker2

    EPacker2 3D-моделист

    Сообщения:
    1.003
    Симпатии:
    608
    Re: JailbreakTeamBalance

    Оффтоп
     
  7. The End Is Near...

    The End Is Near... Russian Roulette

    Сообщения:
    893
    Симпатии:
    659
    Re: JailbreakTeamBalance

    EPacker2
    Именно, код не рабочий дал, как дойдут руки и проверю на сервере, выложу
     
  8. legend1998

    legend1998

    Сообщения:
    292
    Симпатии:
    178
    Re: JailbreakTeamBalance

    Что-то вроде этого:
    PHP:
    #include <sourcemod>

    #define CSS_TEAM_SPECTATOR 1
    #define CSS_TEAM_T 2
    #define CSS_TEAM_CT 3

    new tscts;
    new 
    Float:Ratio 3.6;

    public 
    OnPluginStart()
    {
        
    HookEvent("round_start"Event_RoundStart);
        
    HookEvent("round_end"Event_RoundEnd);
    }

    public 
    Action:Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
    {
        
    ts 0cts 0;

        for (new 
    1<= MaxClientsi++)
        {
            if (
    IsClientInGame(i) && IsPlayerAlive(i))
            {
                if(
    GetClientTeam(i) == CSS_TEAM_T)
                {
                    
    ts++;
                }

                if(
    GetClientTeam(i) == CSS_TEAM_CT)
                {
                    
    cts++;
                }
            }
        }

        
    CheckBalance();

        return 
    Plugin_Continue;
    }

    public 
    CheckBalance()
    {
        if(
    cts < (ts Ratio))
        {
            return 
    false;
        }
        else
        {
            new 
    target GetRandomClient(falsefalseCSS_TEAM_CT);

            if (
    target != -1)
            {
                
    ChangeClientTeam(targetCSS_TEAM_T);

                
    PrintToChatAll("\x03%N \x01был перемещен за команду Заключенных из-за дисбаланса"target);
            }
        }
        return 
    true;
    }

    public 
    Action:Event_RoundEnd(Handle:event, const String:name[], bool:dontBroadcast)
    {
        
    ts 0cts 0;
    }

    // World-Source.Ru
    GetRandomClient(bool:no_bot truebool:alive falseteam 0)
    {
        new 
    num 0players[MaxClients];
        for (new 
    1<= MaxClientsi++)
        {
            if (!
    IsClientInGame(i) || (no_bot && IsFakeClient(i)))
            {
                continue;
            }
            if ((
    alive && !IsPlayerAlive(i)) || (team && GetClientTeam(i) != team))
            {
                continue;
            }
            
    players[num++] = i;
        }
        if (
    num 0) return players[GetRandomInt(0num 1)];

        return -
    1;
    }
     
    AlmazON нравится это.
  9. legend1998

    legend1998

    Сообщения:
    292
    Симпатии:
    178
    Re: JailbreakTeamBalance

    Я проверял CS_SwitchTeam и работает плохо.
    Т.Е. Игрока нужно вернуть в клетку, т.к. он появляется на базе охранников.
    А ChangeClientTeam только для тестирования кода. Позже, можно что нибудь придумать с CS_SwitchTeam
     
  10. legend1998

    legend1998

    Сообщения:
    292
    Симпатии:
    178
    Re: JailbreakTeamBalance

    Там в конце раунда происходит перемещение(наверно)...
     
  11. legend1998

    legend1998

    Сообщения:
    292
    Симпатии:
    178
    Re: JailbreakTeamBalance

    Тогда так:
    PHP:
    #include <sourcemod>
    #include <sdktools_functions>
    #include <cstrike>

    #define CSS_TEAM_SPECTATOR 1
    #define CSS_TEAM_T 2
    #define CSS_TEAM_CT 3

    new Float:Ratio 3.6;

    public 
    OnPluginStart()
    {
        
    HookEvent("round_end"Event_RoundEnd);
    }

    public 
    Action:Event_RoundEnd(Handle:event, const String:name[], bool:dontBroadcast)
    {
        
    CheckBalance();
    }

    public 
    CheckBalance()
    {
        new 
    ts GetTeamClientCount(CSS_TEAM_T);
        new 
    cts GetTeamClientCount(CSS_TEAM_CT);

        if(
    cts RoundFloat((ts Ratio)))
        {
            return 
    false;
        }
        else
        {
            new 
    target GetRandomClient(falsefalseCSS_TEAM_CT);

            if (
    target != -1)
            {
                
    CS_SwitchTeam(targetCS_TEAM_T);

                
    PrintToChatAll("\x03%N \x01был перемещен за команду Заключенных из-за дисбаланса"target);
            }
        }
        return 
    true;
    }

    // World-Source.Ru
    GetRandomClient(bool:no_bot truebool:alive falseteam 0)
    {
        new 
    num 0players[MaxClients];
        for (new 
    1<= MaxClientsi++)
        {
            if (!
    IsClientInGame(i) || (no_bot && IsFakeClient(i)))
            {
                continue;
            }
            if ((
    alive && !IsPlayerAlive(i)) || (team && GetClientTeam(i) != team))
            {
                continue;
            }
            
    players[num++] = i;
        }
        if (
    num 0) return players[GetRandomInt(0num 1)];

        return -
    1;
    }
     
    AlmazON нравится это.
  12. legend1998

    legend1998

    Сообщения:
    292
    Симпатии:
    178
    Re: JailbreakTeamBalance

    Забыл очистить ts и cts в начале раунда... :-D
     
  13. legend1998

    legend1998

    Сообщения:
    292
    Симпатии:
    178
    Re: JailbreakTeamBalance

    Можешь редактировать, как хочешь. Делал под себя.
    P.S. Оно все равно округлится до 3...
     
  14. legend1998

    legend1998

    Сообщения:
    292
    Симпатии:
    178
    Re: JailbreakTeamBalance

    Я про Float:Ratio = 2.75;

    Вот. Должно работать... нормально:
     

    Вложения:

    • disbalance.sp
      Размер файла:
      1,5 КБ
      Просмотров:
      11
    • disbalance.smx
      Размер файла:
      3,3 КБ
      Просмотров:
      6
    Последнее редактирование: 13 янв 2013
  15. legend1998

    legend1998

    Сообщения:
    292
    Симпатии:
    178
    Re: JailbreakTeamBalance

    Странно.
    6/2.7 ~ 2
     
  16. legend1998

    legend1998

    Сообщения:
    292
    Симпатии:
    178
    Re: JailbreakTeamBalance

    Да не может быть такого... Можно попробовать убрать проверку на "жив игрок или нет".