ifx
Пользователь
- Регистрация
- 11 Фев 2018
- Сообщения
- 361
- Симпатии
- 148
Есть вот такой плагин csdm_balancer. Он балансит игроков на ксдм моде по скилу, но балансит их когда они живы. У меня стоит мод с пушками\лазерами и получается, что игрока живого кидает за др команду и все его пушки уничтожаются.
Надо сделать, чтобы игрока перекидывало уже после смерти + добавить игнорирование на перекидывание ботов.
Вот сам код плагина
Я вижу что проверка идет в этом блоке
// Transfer Player
new id = GetPlayer( players, playerCount, g_lessTeam )
if( !is_user_bot(id) ) return PLUGIN_CONTINUE
else if (is_user_alive(id)) return PLUGIN_CONTINUE
else if( g_lessTeam == CS_TEAM_CT && user_has_weapon(id, CSW_C4) )
engclient_cmd( id, "drop", "weapon_c4" )
else if( g_lessTeam == CS_TEAM_T && cs_get_user_defuse(id) )
cs_set_user_defuse( id, 0 )
cs_set_user_team( id, g_lessTeam )
ShowMessage( id )
return PLUGIN_CONTINUE
}
и дописал, но видимо криво, тк проверка на жив ли юзер не работает, можете подсказать, что я делаю не так?
Надо сделать, чтобы игрока перекидывало уже после смерти + добавить игнорирование на перекидывание ботов.
Вот сам код плагина
Код:
/*
* CSDM Balancer V1.0 by Zer0CooL
* http://forum.alfa-strike.net
*/
#include <amxmodx>
#include <cstrike>
#define LAST_PLAYERS_COUNT 4
////////////////// √лобальные переменные//////////////////////
static Float:g_checkInterval, g_maxDisbalance, g_skillPlayer,
g_minPlayers, g_maxPlayers, skillPlayer,
CsTeams:g_lessTeam, g_playerScore, g_worstScore,
g_bestScore, g_lastPlayers[LAST_PLAYERS_COUNT];
new g_num;
//////////////////////////////////////////////////////////////
public plugin_init()
{
register_plugin( "CSDM Balancer", "1.0", "Zer0CooL" )
register_dictionary( "csdmbalancer.txt" )
register_cvar ( "dmb_sound", "0" )
register_cvar ( "dmb_minplayers", "4" )
register_cvar ( "dmb_skillplayer", "1" )
register_cvar ( "dmb_enableplugin", "1" )
register_cvar ( "dmb_checkinterval", "180.0" )
register_cvar ( "dmb_maxdisbalance", "1" )
}
public plugin_cfg()
{
g_maxPlayers = get_maxplayers ()
g_minPlayers = get_cvar_num ( "dmb_minplayers" )
skillPlayer =
g_skillPlayer = get_cvar_num ( "dmb_skillplayer" )
g_maxDisbalance = get_cvar_num ( "dmb_maxdisbalance" )
g_checkInterval = get_cvar_float ( "dmb_checkinterval" )
if( get_cvar_num("dmb_enableplugin") < 1 || g_maxPlayers < 4 )
return 0
if( g_maxDisbalance < 1 )
g_maxDisbalance = 1
if( g_minPlayers < 4 )
g_minPlayers = 4
if( g_checkInterval < 10 )
g_checkInterval = 10.0
server_cmd( "mp_autoteambalance 0;mp_limitteams %d", g_maxDisbalance )
set_task( g_checkInterval, "check", 0, _, _, "b" )
return 0
}
public check()
{
static players[32];
new playerCount = 0,
T_Count = 0, CT_Count = 0;
for( new i = 1; i <= g_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 < g_minPlayers ) return PLUGIN_CONTINUE
else if( (CT_Count - T_Count) > g_maxDisbalance )
g_lessTeam = CS_TEAM_T
else if( (T_Count - CT_Count) > g_maxDisbalance )
g_lessTeam = CS_TEAM_CT
else return PLUGIN_CONTINUE
// Transfer Player
new id = GetPlayer( players, playerCount, g_lessTeam )
else if( g_lessTeam == CS_TEAM_CT && user_has_weapon(id, CSW_C4) )
engclient_cmd( id, "drop", "weapon_c4" )
else if( g_lessTeam == CS_TEAM_T && cs_get_user_defuse(id) )
cs_set_user_defuse( id, 0 )
cs_set_user_team( id, g_lessTeam )
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 ? "Counter-Terrorists" : "Terrorists";
client_print ( 0, print_chat, "%L", LANG_PLAYER, "CHAT_MESSAGE", name, teamName )
console_print ( 0, "%s has been transfered to %s.", name, teamName )
if( !is_user_bot(id) )
{
set_hudmessage ( 255, 140, 0, -1.0, 0.40, 2, 0.02, 5.0, 0.01, 0.1, 2 )
show_hudmessage ( id, "%L", LANG_PLAYER, "HUD_MESSAGE", teamName )
}
else
user_kill( id )
}
GetPlayer( const players[], playerCount, CsTeams:g_lessTeam )
{
if( g_skillPlayer > 1 ) skillPlayer = random_num(0, 1)
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 )
{
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
}
// Transfer Player
new id = GetPlayer( players, playerCount, g_lessTeam )
if( !is_user_bot(id) ) return PLUGIN_CONTINUE
else if (is_user_alive(id)) return PLUGIN_CONTINUE
else if( g_lessTeam == CS_TEAM_CT && user_has_weapon(id, CSW_C4) )
engclient_cmd( id, "drop", "weapon_c4" )
else if( g_lessTeam == CS_TEAM_T && cs_get_user_defuse(id) )
cs_set_user_defuse( id, 0 )
cs_set_user_team( id, g_lessTeam )
ShowMessage( id )
return PLUGIN_CONTINUE
}
и дописал, но видимо криво, тк проверка на жив ли юзер не работает, можете подсказать, что я делаю не так?