Код:
#include < amxmodx > #include < cstrike > #include < csdm > #define BALANCE_IMMUNITY ADMIN_IMMUNITY /* csdm_auto_balance - 0: Disabled - 1: Enabled - 2: Enabled, obey immunity */ new bool:g_bConnected[ 33 ], bool:g_bImmunity[ 33 ], CsTeams:g_iNewTeam[ 33 ]; new g_pCvar, g_iMaxPlayers, g_iMsgSayText, g_iMsgScreenFade, g_iPlayers; public plugin_init( ) { register_plugin( "CSDM Auto Balance", "1.0", "xPaw" ); g_pCvar = register_cvar( "csdm_auto_balance", "1" ); g_iMsgScreenFade = get_user_msgid( "ScreenFade" ); g_iMsgSayText = get_user_msgid( "SayText" ); g_iMaxPlayers = get_maxplayers( ); } public client_authorized( id ) g_bImmunity[ id ] = bool:( get_user_flags( id ) & BALANCE_IMMUNITY ); public client_putinserver( id ) { g_bConnected[ id ] = true; // bool:!is_user_bot( id ); g_iPlayers++; } public client_disconnect( id ) { g_iNewTeam[ id ] = CS_TEAM_UNASSIGNED; g_bImmunity[ id ] = false; g_bConnected[ id ] = false; g_iPlayers--; } public csdm_PostDeath( iKiller, id, bHeadShot, const szWeapon[ ] ) { if( g_iPlayers < 4 || iKiller == id || !g_bConnected[ id ] ) return; new iCvar = get_pcvar_num( g_pCvar ); if( iCvar <= 0 || iCvar == 2 && g_bImmunity[ id ] ) return; new iPlayers[ 2 ]; for( new i = 1; i <= g_iMaxPlayers; i++ ) { if( !g_bConnected[ i ] ) continue; switch( cs_get_user_team( i ) ) { case CS_TEAM_T: iPlayers[ 0 ]++; case CS_TEAM_CT: iPlayers[ 1 ]++; } } new CsTeams:iCheck, iDifference = iPlayers[ 1 ] - iPlayers[ 0 ]; if( iDifference > 0 ) iCheck = CS_TEAM_T; else if( iDifference < 0 ) iCheck = CS_TEAM_CT; else return; if( abs( iDifference ) < 2 || cs_get_user_team( id ) == iCheck ) return; cs_set_user_team( id, iCheck ); new szName[ 32 ]; get_user_name( id, szName, 31 ); UTIL_GreenPrintAll( id, "^4[CSDM]^3 %s^1 has been transfered to^3 %s^1.", szName, iCheck == CS_TEAM_T ? "Terrorists" : "Counter-Terrorists" ); g_iNewTeam[ id ] = iCheck; } public csdm_PostSpawn( id, bool:bFake ) { new CsTeams:iNewTeam = g_iNewTeam[ id ]; if( iNewTeam > CS_TEAM_UNASSIGNED ) { g_iNewTeam[ id ] = CS_TEAM_UNASSIGNED; set_hudmessage( 0, 127, 255, 0.42, 0.53, 2, 6.0, 4.0, 0.1, 0.2, -1 ); show_hudmessage( id, "You have been transfered to %s!", iNewTeam == CS_TEAM_T ? "Terrorists" : "Counter-Terrorists" ); UTIL_ScreenFade( id, iNewTeam == CS_TEAM_T ? 175 : 0, 0, iNewTeam == CS_TEAM_CT ? 175 : 0 ); } } UTIL_GreenPrintAll( const iSender, const Message[ ], any:... ) { new szMessage[ 192 ]; vformat( szMessage, 191, Message, 3 ); message_begin( MSG_BROADCAST, g_iMsgSayText ); write_byte( iSender ); write_string( szMessage ); message_end( ); } UTIL_ScreenFade( const id, const iRed, const iGreen, const iBlue ) { message_begin( MSG_ONE_UNRELIABLE, g_iMsgScreenFade, _, id ); write_short( 2000 ); write_short( 2000 ); write_short( 0 ); write_byte( iRed ); write_byte( iGreen ); write_byte( iBlue ); write_byte( 175 ); message_end( ); } При убийстве игрока пишет постоянно что я убил своего , перед тем как его перекидывает за мою команду)
и вот насчёт этого не понял csdm_postDeath, говорят что надо убрать
*PS. нашёл замену
Код:
/* * CSDM Balancer V1.0 by Zer0CooL * http://forum.alfa-strike.net */ #include <amxmodx> #include <cstrike> #define LAST_PLAYERS_COUNT 3 ////////////////// √лобальные переменные////////////////////// static Float:g_checkInterval, g_maxDisbalance, g_skillPlayer, g_minPlayers, g_maxPlayers, skillPlayer, g_sound, 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", "1" ) register_cvar ( "dmb_minplayers", "4" ) register_cvar ( "dmb_skillplayer", "2" ) register_cvar ( "dmb_enableplugin", "1" ) register_cvar ( "dmb_checkinterval", "40.0" ) register_cvar ( "dmb_maxdisbalance", "1" ) } public plugin_precache() { precache_sound( "misc/massteleporttarget.wav" ) return PLUGIN_CONTINUE } public plugin_cfg() { g_sound = get_cvar_num ( "dmb_sound" ) 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 ) 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 ) if( g_sound > 0 ) client_cmd( id, "speak misc/massteleporttarget" ) } 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 } незнаю,стоит или нет)
Отредактировал: andreiwiz, - 26.7.2014, 14:04