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

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

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

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

Помогите исправить CSDM Balancer

, Нужна помощь в скриптинге
Статус пользователя MiIIer
сообщение 30.11.2019, 12:12
Сообщение #1


Стаж: 8 лет 1 месяц
Город: Волгоград

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

Доброго времени. Помогите решить проблему сервер .

Есть вот такой плагин csdm_balancer.
Он балансит игроков на ксдм моде по скилу, но балансит их когда они живы. У меня стоит мод с пушками\лазерами и получается, что игрока живого кидает за др команду и все его пушки уничтожаются.

Надо сделать, чтобы игрока перекидывало уже после смерти

Вот сам код плагина

plugins
/*
Код:
* 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
}

Но видимо проверка на жив ли юзер не работает, можете помочь?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя Fullserver
сообщение 30.11.2019, 12:30
Сообщение #2


Иконка группы

Стаж: 9 лет 3 месяца

Сообщений: 5122
Благодарностей: 2100
Полезность: 1394

Что нибудь такого рода.
Cкрытый текст
Код:
* CSDM Balancer V1.0 by Zer0CooL
* <a href="https://c-s.net.ua/url?u=http%3A%2F%2Fforum.alfa-strike.net" target="_blank">http://forum.alfa-strike.net</a>
*/
 
#include <amxmodx>
#include <cstrike>
new moving[33]
new ct[33]
 
#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" )
register_event("DeathMsg", "Death", "a")
}
 
public client_putinserver(id){
ct[id]=0
moving[id]=0
}

public Death(id){
if(moving[id] == 1){
if(ct[id]==0){
cs_set_user_team( id, CS_TEAM_CT )
}else{
cs_set_user_team( id, CS_TEAM_T )
}
moving[id] = 0
}
}

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 )

moving[id] = 1
if(g_lessTeam == CS_TEAM_CT){
ct[id] = 1
}else{
ct[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

ps.gif
Не тестировал.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя MiIIer
сообщение 30.11.2019, 13:35
Сообщение #3


Стаж: 8 лет 1 месяц
Город: Волгоград

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

Fullserver, проверю, спасибо!
Наткнулся на такой пост там пишут попробовать можно так

Вариант
if( cs_get_user_team(player) == g_lessTeam || is_user_alive(player)||is_user_bot(player)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя MiIIer
сообщение 30.11.2019, 13:40
Сообщение #4


Стаж: 8 лет 1 месяц
Город: Волгоград

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

Ваш вариант не сработал.
Прикрепленные файлы:
Прикрепленное изображение Прикрепленное изображение
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Fullserver
сообщение 30.11.2019, 14:01
Сообщение #5


Иконка группы

Стаж: 9 лет 3 месяца

Сообщений: 5122
Благодарностей: 2100
Полезность: 1394

MiIIer, код плагина у вас кривой. он даже без правок не компилируется. Скиньте нормальный код.

MiIIer, нет смысла пробовать, что вы говорите, там смена команды происходит по заданию каждый определенный промежуток времени, а тут нужно, чтобы игрока перекидывало после смерти, а значит нужно отловить момент смерти и только тогда менять. Каким образом каждые 5 минут или сколько там указано человек может оказаться мертвым? Никак, по какому-то уникальному совпадению если только.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя MiIIer
сообщение 30.11.2019, 14:12
Сообщение #6


Стаж: 8 лет 1 месяц
Город: Волгоград

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

Fullserver, да наверное проще заказать новый плагин и всё, спасибо большое за помощь!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Fullserver
сообщение 30.11.2019, 14:14
Сообщение #7


Иконка группы

Стаж: 9 лет 3 месяца

Сообщений: 5122
Благодарностей: 2100
Полезность: 1394

MiIIer, чем этот не подходит?

Код:
#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 перемещен за^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, "Вас перебросило за %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( );
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: