Плагин для баланса команд , где не нужно ждать раундов . Он чекает через определенное время игроков в команде .
Квары:
Код
#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