• Гость, перед открытием темы прочитай описание раздела, чтобы не ошибиться. Любые вопросы по настройке сервера создаются в разделе Технической Поддержки.

Помощь Помогите с компиляцией раунд балансер

s1ngle71rus

Участник
Сообщения
145
Симпатии
1
Баллы
79
#1
Всем привет момогите сделать amxx файл , не получается . Хочу , чтобы людей с иммунитетом A тоже перекидывало . Вроде в сма все верно сделал. помогите
// *************************************************************************************//
// Плагин загружен с www.neugomon.ru //
// Автор: Neygomon [ https://neugomon.ru/members/1/ ] //
// Официальная тема поддержки: [Ссылка] //
// При копировании материала ссылка на сайт www.neugomon.ru ОБЯЗАТЕЛЬНА! //
// *************************************************************************************//

#include amxmodx
#include reapi

//#define ACCESS_IMMUNITY ADMIN_RCON // Иммунитет для админов при балансе (Админы игнорируются любым балансом(по числу/по скиллу))
//#define REPLACED_MENU // Кастомное меню с 2-мя пунктами.
#define SCORE_DIFF 2 // Разница в счете между командами (Вкл. аланс по скиллу, если одна команда перееигрывает другую на n раундов)
#define MIN_PLAYERS 6 // Минимальное кол-во игроков на сервере для баланса по силам ()
#define ROUND_BSKILL 3 // Каждые n раундов баланс по скиллу (Ну а че, нахер каждый раунд по скиллу то уравнивать?)
#define PL_IGNORE_NUM 3 // Каждые n перемещений в командах для одного игрока (баланс по кол-ву игроков) (Чтобы не кидало одного и того же)
#define PL_IGNORE_SKILL 3 // Каждые n замен по скиллу игрока может перемещать (Чтобы не кидало одного и того же)

/* Словарь плагина */
#define MSG_TRANSFER "^1[^4LTB^1] ^3%s ^4будет перенеcён за команду ^3%s ^4в новом раунде."
#define MSG_TRANSFER_CT "контр-террористов"
#define MSG_TRANSFER_T "террористов"
#define MSG_REPLACE "^1[^4LTB^1] ^4Сильный ^3%s ^4будет заменён на слабого ^3%s ^4в новом раунде."
/* Конец словаря */

#if !defined MAX_PLAYERS
#define MAX_PLAYERS 32
#endif

new g_iNumTt, g_iNumCt;
new g_iSkipNPl[MAX_PLAYERS+1], g_iSkipSPl[MAX_PLAYERS+1];
new g_iNewTeam[MAX_PLAYERS+1];

#define msgSayText 76
#define msgTeamInfo 86
#define msgShowOldMenu 96
#define msgShowVGUIMenu 114

public plugin_init()
{
register_plugin("[ReAPI] Round Balancer", "1.1", "neygomon");

RegisterHookChain(RG_CBasePlayer_Spawn, "fwdPlayerSpawnPre", false);
RegisterHookChain(RG_RoundEnd, "fwdRoundEnd", true);
#if defined REPLACED_MENU
register_clcmd("chooseteam", "ShowMenu");

register_menucmd(register_menuid("Team Menu"), MENU_KEY_1|MENU_KEY_6|MENU_KEY_0, "TeamMenuHandler");
register_message(msgShowOldMenu, "mShowMenu");
register_message(msgShowVGUIMenu, "mShowMenu");
#endif
set_task(1.0, "ChangeServerCvars");
}

public ChangeServerCvars()
{
set_cvar_num("mp_autoteambalance", 0);
#if defined REPLACED_MENU
set_cvar_num("mp_limitteams", 0);
#endif
}

public client_putinserver(id)
g_iNewTeam[id] = g_iSkipSPl[id] = g_iSkipNPl[id] = 0;

public fwdRoundEnd()
{
new players[32], pnum, szName[32], iTransferNum;

GetUsersInTeam(g_iNumTt, g_iNumCt);
iTransferNum = abs(g_iNumTt - g_iNumCt) / 2;

if(iTransferNum > 0)
{
get_players(players, pnum, "e", (g_iNumTt > g_iNumCt) ? "TERRORIST" : "CT");
for(new i; i < pnum; i++)
{
if(g_iSkipNPl[players]-- || get_user_flags(players) & ACCESS_IMMUNITY)
continue;

get_user_name(players, szName, charsmax(szName));

if(g_iNumTt > g_iNumCt)
ChatColor(MSG_TRANSFER, szName, MSG_TRANSFER_CT), g_iNewTeam[players] = 2;
else ChatColor(MSG_TRANSFER, szName, MSG_TRANSFER_T), g_iNewTeam[players] = 1;

g_iSkipNPl[players] = PL_IGNORE_NUM;
if(--iTransferNum < 1) break;
}
}

new iCtWins, iTtWins;
iCtWins = get_member_game(m_iNumCTWins);
iTtWins = get_member_game(m_iNumTerroristWins);

if(get_member_game(m_iTotalRoundsPlayed) % ROUND_BSKILL || MIN_PLAYERS > get_playersnum() || SCORE_DIFF > abs(iTtWins - iCtWins))
return;
new iTeam, iLeader = (iTtWins > iCtWins) ? 1 : 2;
new iRatio[MAX_PLAYERS+1];
new pEnt1, pEnt2;

get_players(players, pnum);
for(new i; i < pnum; i++)
{
if(g_iSkipSPl[players]-- || get_user_flags(players) & ACCESS_IMMUNITY)
continue;

iTeam = get_member(players, m_iTeam);
switch(iTeam)
{
case 1, 2:
{
iRatio[players] = get_user_frags(players) - get_user_deaths(players);
if(iTeam == iLeader)
{
if(iRatio[players] > iRatio[pEnt1])
pEnt1 = players;
}
else if(iRatio[pEnt2] > iRatio[players])
pEnt2 = players;
}
}
}
if(!pEnt1 || !pEnt2) return;

static szName1[32], szName2[32];
get_user_name(pEnt1, szName1, charsmax(szName1));
get_user_name(pEnt2, szName2, charsmax(szName2));

ChatColor(MSG_REPLACE, szName1, szName2);
switch(iLeader)
{
case 1: g_iNewTeam[pEnt1] = 2, g_iNewTeam[pEnt2] = 1;
case 2: g_iNewTeam[pEnt1] = 1, g_iNewTeam[pEnt2] = 2;
}
g_iSkipSPl[pEnt1] = g_iSkipSPl[pEnt2] = PL_IGNORE_SKILL;
}

public fwdPlayerSpawnPre(const id)
{
if(g_iNewTeam[id])
{
rg_set_user_team(id, g_iNewTeam[id]);
g_iNewTeam[id] = 0;
}
}
#if defined REPLACED_MENU
new bool:g_bRecursion = false;
public mShowMenu(msgId, msgDest, msgEnt)
{
if(msgId == msgShowOldMenu)
{
static szArg4[20]; get_msg_arg_string(4, szArg4, charsmax(szArg4));
if(contain(szArg4, "Team_Select") == -1)
return PLUGIN_CONTINUE;
}
else if(get_msg_arg_int(1) != 2)
return PLUGIN_CONTINUE;

if(g_bRecursion)
{
g_bRecursion = false;
return PLUGIN_HANDLED;
}

g_bRecursion = true;
ShowMenu(msgEnt);
g_bRecursion = false;

return PLUGIN_HANDLED;
}

public ShowMenu(id)
return show_menu(id, MENU_KEY_0|MENU_KEY_1|MENU_KEY_6, "\d[\rLTB\d] \yВыберите действие:^n^n\y1. \rВойти в игру^n\y6. \wНаблюдение^n^n\y0. \wВыход", -1, "Team Menu");

public TeamMenuHandler(id, iKey)
{
switch(iKey)
{
case 0:
{
GetUsersInTeam(g_iNumTt, g_iNumCt);
set_member(id, m_bTeamChanged, false);
engclient_cmd(id, "jointeam", (g_iNumTt > g_iNumCt) ? "2" : "1");
}
case 5: user_silentkill(id), engclient_cmd(id, "jointeam", "6");
}
return PLUGIN_HANDLED;
}
#endif
stock ChatColor(const szMessage[], any:...)
{
static players[32], pnum; get_players(players, pnum, "c");
static szMsg[190]; vformat(szMsg, charsmax(szMsg), szMessage, 2);

for(new i; i < pnum; i++)
{
message_begin(MSG_ONE_UNRELIABLE, msgSayText, .player = players);
write_byte(players);
write_string(szMsg);
message_end();
}
}

stock GetUsersInTeam(&tt, &ct, players[32]="", pnum=0)
{
tt = ct = 0;
get_players(players, pnum);

for(new i; i < pnum; i++)
{
switch(get_member(players, m_iTeam))
{
case 1: tt++;
case 2: ct++;
}
}
}
 

wantip22

Участник
Сообщения
343
Симпатии
40
Баллы
104
#2
include reapi качни и компили
 
Сверху