...

Scarface_slv

Участник
Сообщения
222
Реакции
47
Re: JailbreakTeamBalance

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

Scarface_slv

Участник
Сообщения
222
Реакции
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); может получится компилировать, хз вообщем)
 

Scarface_slv

Участник
Сообщения
222
Реакции
47
Re: JailbreakTeamBalance

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

Scarface_slv

Участник
Сообщения
222
Реакции
47
Re: JailbreakTeamBalance

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

EPacker2

3D-моделист
Сообщения
1,040
Реакции
759
Re: JailbreakTeamBalance

AlmazON, Оффтоп
Оффтоп
 

The End Is Near...

Russian Roulette
Сообщения
874
Реакции
691
Re: JailbreakTeamBalance

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

legend1998

Участник
Сообщения
286
Реакции
187
Re: JailbreakTeamBalance

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

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

new ts, cts;
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 = 0; cts = 0;

    for (new i = 1; i <= MaxClients; i++)
    {
        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(false, false, CSS_TEAM_CT);

        if (target != -1)
        {
            ChangeClientTeam(target, CSS_TEAM_T);

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

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

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

    return -1;
}
 

legend1998

Участник
Сообщения
286
Реакции
187
Re: JailbreakTeamBalance

ChangeClientTeam - если не ошибаюсь, ты же и говорил, что с таким перебросом этот игрок будет умирать... Не знаю, устроит ли ilga80 такое.
Я проверял CS_SwitchTeam и работает плохо.
Т.Е. Игрока нужно вернуть в клетку, т.к. он появляется на базе охранников.
А ChangeClientTeam только для тестирования кода. Позже, можно что нибудь придумать с CS_SwitchTeam
 

legend1998

Участник
Сообщения
286
Реакции
187
Re: JailbreakTeamBalance

В плагине из 1 поста, по утверждению автора последнего, весьма хорошо работает данная команда. Если что - возьми и глянь, как там устроена)
Оффтоп

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

legend1998

Участник
Сообщения
286
Реакции
187
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(false, false, CSS_TEAM_CT);

        if (target != -1)
        {
            CS_SwitchTeam(target, CS_TEAM_T);

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

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

    return -1;
}
 

legend1998

Участник
Сообщения
286
Реакции
187
Re: JailbreakTeamBalance

Лучше, но что-то с условиями баланса не так - перемещает по 1 КТ каждый раунд... Все в Т оказались. Невыполнение скрипта при балансе 1 КТ = 3 Т (1 к 3) нужно.

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

legend1998

Участник
Сообщения
286
Реакции
187

Вложения

  • disbalance.sp
    1.5 КБ · Просмотры: 20
  • disbalance.smx
    3.3 КБ · Просмотры: 13
Последнее редактирование:
Сверху Снизу