Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Авто балансер (no rounds)

Kasper55
сообщение 12.2.2015, 16:16
Сообщение #1
Стаж: 16 лет

Сообщений: 1145
Благодарности: выкл.

Плагин для баланса команд , где не нужно ждать раундов . Он чекает через определенное время игроков в команде .
Квары:

Код
#define LAST_PLAYERS_COUNT 3
#define PRINT_ALL // Закоментировать, если выводить сообщение только игроку, которого перевели!
#define UTIME 30.0 // Интервал времени, между проверками!


Код:
#include <amxmodx>
#include <cstrike>
#include <hamsandwich>

#define LAST_PLAYERS_COUNT 3
#define PRINT_ALL // Закоментировать, если выводить сообщение только игроку, которого перевели!
#define UTIME 30.0 // Интервал времени, между проверками!

static CsTeams:g_lessTeam, g_playerScore, g_worstScore,
g_bestScore, g_lastPlayers[LAST_PLAYERS_COUNT];
new g_num;

public plugin_cfg()
{
register_plugin("[GG] Balance", "0.3b", "ServerBy905 Team & Tom");

if(get_maxplayers() < 4 )
return 0

set_task(UTIME, "check", 0, _, _, "b"); return 0;
}

public check()
{
static players[32];
new playerCount = 0,
T_Count = 0, CT_Count = 0;

for( new i = 1; i < get_maxplayers(); i++ )
{
if ( !is_user_connected(i) || is_user_hltv(i) )
continue

switch( cs_get_user_team(i) )
{
case CS_TEAM_CT: CT_Count++;
case CS_TEAM_T: T_Count++;
default: continue;
}

players[playerCount] = i
playerCount++
}

if( playerCount < 4 ) return PLUGIN_CONTINUE

else if( (CT_Count - T_Count) > 1 )
g_lessTeam = CS_TEAM_T

else if( (T_Count - CT_Count) > 1 )
g_lessTeam = CS_TEAM_CT

else return PLUGIN_CONTINUE

new id = GetPlayer( players, playerCount, g_lessTeam )

if(!is_user_connected(id)) return PLUGIN_HANDLED;
cs_set_user_team(id, g_lessTeam);
ExecuteHam(Ham_CS_RoundRespawn, id);
ShowMessage(id);

return PLUGIN_CONTINUE
}

ShowMessage( id )
{
static name[32], teamName[19];
get_user_name( id, name, charsmax(name) )

teamName = g_lessTeam == CS_TEAM_CT ? "Спецназ" : "Терористов";

#if defined PRINT_ALL
print(0, "^1[^4GGB^1] ^1Игрок ^4%s ^1был переведен за ^4%s^1!", name, teamName);
#else
print(id, "^1[^4GGB^1] ^4%s ^1вы были переведены за ^4%s^1!", name, teamName);
#endif

return PLUGIN_HANDLED;
}

GetPlayer( const players[], playerCount, CsTeams:g_lessTeam )
{
g_bestScore = -9999, g_worstScore = 9999;

static id, player;
for( new i = 0; i < playerCount; i++ )
{
player = players[i]

if( cs_get_user_team(player) == g_lessTeam || IsLastPlayer(player) )
continue

else if( IsSatisfactoryPlayer(player) )
id = player
}

PutLastPlayer( id )
return id
}

bool:IsLastPlayer( id )
{
for( new i = 0; i < LAST_PLAYERS_COUNT; i++ )
if( g_lastPlayers[i] == id )
return true

return false
}

PutLastPlayer( id )
{
if( g_num > (LAST_PLAYERS_COUNT - 1) )
g_num = 0;

g_lastPlayers[g_num] = id
g_num++
}

bool:IsSatisfactoryPlayer( id )
{
new skillPlayer = random_num(0,1);
g_playerScore = ( get_user_frags(id) - get_user_deaths(id) )

switch( skillPlayer )
{
case 0:
{
if( g_playerScore <= g_worstScore )
{
g_worstScore = g_playerScore
return true
}
}
case 1:
{
if( g_playerScore >= g_bestScore )
{
g_bestScore = g_playerScore
return true
}
}
}
return false
}

stock print(const id, const input[], any:...)
{
new iCount = 1, iPlayers[32]

static szMsg[191]
vformat(szMsg, charsmax(szMsg), input, 3)

if(id) iPlayers[0] = id
else get_players(iPlayers, iCount, "ch")

for (new i; i < iCount; i++)
{
if (is_user_connected(iPlayers[i]))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, iPlayers[i])
write_byte(iPlayers[i])
write_string(szMsg)
message_end()
}
}
}


Отредактировал: Kasper55, - 15.2.2015, 17:14
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
VBOY
сообщение 13.2.2015, 6:51
Сообщение #2
Стаж: 16 лет

Сообщений: 77
Благодарностей: 19
Полезность: 0

Это получается бежишь себе с базы теров. чик и очутился у менятов? )
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Set228
сообщение 13.2.2015, 8:03
Сообщение #3


Стаж: 14 лет

Сообщений: 57
Благодарностей: 10
Полезность: 110

Цитата(VBOY @ 13.2.2015, 10:51) *
Это получается бежишь себе с базы теров. чик и очутился у менятов? )


в начале каждого раунда похоже происходит баланс.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 13.2.2015, 8:32
Сообщение #4


Стаж: 12 лет

Сообщений: 15547
Благодарностей: 6971
Полезность: 1206

Цитата
Плагин для баланса команд , где не нужно ждать раундов . Он чекает через определенное время игроков в команде .

Цитата(Set228 @ 13.2.2015, 10:03) *
в начале каждого раунда похоже происходит баланс.

Гениально, как же мы раньше не додумались...
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
6yxoudbdarg
сообщение 13.2.2015, 9:23
Сообщение #5
Стаж: 13 лет

Сообщений: 912
Благодарностей: 168
Полезность: < 0

Цитата(VBOY @ 13.2.2015, 7:51) *
Это получается бежишь себе с базы теров. чик и очутился у менятов? )

и как мудак хД
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Kasper55
сообщение 14.2.2015, 7:58
Сообщение #6
Стаж: 16 лет

Сообщений: 1145
Благодарности: выкл.

после смерти , появляешься уже в автобалансировой команде и меняется скин
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
VBOY
сообщение 14.2.2015, 9:24
Сообщение #7
Стаж: 16 лет

Сообщений: 77
Благодарностей: 19
Полезность: 0

Каждые 30 секунд проверка, было бы раз в конце раунда , а так нагрузка на сервер излишняя
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя DezoKcu
сообщение 14.2.2015, 9:47
Сообщение #8


Стаж: 11 лет

Сообщений: 383
Благодарностей: 211
Полезность: 602

Зачем? Лучше делать перекид при смерти или новом раунде, а во время раунда - неахты.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Kasper55
сообщение 15.2.2015, 17:13
Сообщение #9
Стаж: 16 лет

Сообщений: 1145
Благодарности: выкл.

Цитата(DezoKcu @ 14.2.2015, 10:47) *
Зачем? Лучше делать перекид при смерти или новом раунде, а во время раунда - неахты.

а если нету вообще раундов , этот плагин делался где нету раундов
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: