Преработка на round Balance ReAPI

В този раздел можете да подавате всякакви заявки за намиране, изработка или преработка на плъгини/модове.
Аватар
HALLO_KITTY
Извън линия
Потребител
Потребител
Мнения: 27
Регистриран на: 19 Авг 2018, 14:48
Се отблагодари: 9 пъти
Получена благодарност: 1 път

Преработка на round Balance ReAPI

Мнение от HALLO_KITTY » 30 Авг 2020, 15:33

Можете ли да махнете съобщенията в чата да остане само това: #define MSG_TRANSFER "^1[^4Devil's^1] ^3%s ^4Team balance ^3%s ^4next round." благодаря ви

Код за потвърждение: Избери целия код

// *************************************************************************************//
// Плагин загружен с  www.neugomon.ru                                                   //
// Автор: Neygomon  [ https://neugomon.ru/members/1/ ]                                  //
// Официальная тема поддержки: https://neugomon.ru/threads/104/	                        //
// При копировании материала ссылка на сайт www.neugomon.ru ОБЯЗАТЕЛЬНА!                //
// *************************************************************************************//

#include amxmodx
#include reapi

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

/* Словарь плагина */
#define MSG_TRANSFER 	"^1[^4Devil's^1] ^3%s ^4Team balance ^3%s ^4next round."
#define MSG_TRANSFER_CT	"counter-terrorists"
#define MSG_TRANSFER_T	"terrorists"
#define MSG_REPLACE	"^1[^4Devil'd^1] ^4Strongest ^3%s ^4will be replaced by a weak one ^3%s ^4next round."
/* Конец словаря */	

#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[i]]-- || get_user_flags(players[i]) & ACCESS_IMMUNITY)
				continue;
			
			get_user_name(players[i], szName, charsmax(szName));
			
			if(g_iNumTt > g_iNumCt)
				ChatColor(MSG_TRANSFER, szName, MSG_TRANSFER_CT), g_iNewTeam[players[i]] = 2;
			else	ChatColor(MSG_TRANSFER, szName, MSG_TRANSFER_T),  g_iNewTeam[players[i]] = 1;
			
			g_iSkipNPl[players[i]] = 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[i]]-- || get_user_flags(players[i]) & ACCESS_IMMUNITY)
			continue;

		iTeam = get_member(players[i], m_iTeam);
		switch(iTeam)
		{
			case 1, 2:
			{
				iRatio[players[i]] = get_user_frags(players[i]) - get_user_deaths(players[i]);
				if(iTeam == iLeader)
				{
					if(iRatio[players[i]] > iRatio[pEnt1])
						pEnt1 = players[i];
				}
				else if(iRatio[pEnt2] > iRatio[players[i]])
					pEnt2 = players[i];			
			}
		}
	}
	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[\DEVIl'S\d] \Choose an action:^n^n\y1. \rEnter the game^n\y6. \wSpectator^n^n\y0. \wExit", -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[i]);
		write_byte(players[i]);
		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[i], m_iTeam))
		{
			case 1: tt++;
			case 2: ct++;
		}
	}
}

Аватар
atmax
Извън линия
Потребител
Потребител
Мнения: 492
Регистриран на: 22 Мар 2018, 15:06
Се отблагодари: 37 пъти
Получена благодарност: 43 пъти

Преработка на round Balance ReAPI

Мнение от atmax » 30 Авг 2020, 18:23

Код за потвърждение: Избери целия код

// *************************************************************************************//
// Плагин загружен с  www.neugomon.ru                                                   //
// Автор: Neygomon  [ https://neugomon.ru/members/1/ ]                                  //
// Официальная тема поддержки: https://neugomon.ru/threads/104/	                        //
// При копировании материала ссылка на сайт www.neugomon.ru ОБЯЗАТЕЛЬНА!                //
// *************************************************************************************//

#include amxmodx
#include reapi

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

/* Словарь плагина */
#define MSG_TRANSFER 	"^1[^4Devil's^1] ^3%s ^4Team balance ^3%s ^4next round."
/* Конец словаря */	

#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[i]]-- || get_user_flags(players[i]) & ACCESS_IMMUNITY)
				continue;
			
			get_user_name(players[i], szName, charsmax(szName));
			
			if(g_iNumTt > g_iNumCt)
				ChatColor(MSG_TRANSFER, szName), g_iNewTeam[players[i]] = 2;
			else	ChatColor(MSG_TRANSFER, szName),  g_iNewTeam[players[i]] = 1;
			
			g_iSkipNPl[players[i]] = 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[i]]-- || get_user_flags(players[i]) & ACCESS_IMMUNITY)
			continue;

		iTeam = get_member(players[i], m_iTeam);
		switch(iTeam)
		{
			case 1, 2:
			{
				iRatio[players[i]] = get_user_frags(players[i]) - get_user_deaths(players[i]);
				if(iTeam == iLeader)
				{
					if(iRatio[players[i]] > iRatio[pEnt1])
						pEnt1 = players[i];
				}
				else if(iRatio[pEnt2] > iRatio[players[i]])
					pEnt2 = players[i];			
			}
		}
	}
	if(!pEnt1 || !pEnt2) return;
	
	static szName1[32], szName2[32];
	get_user_name(pEnt1, szName1, charsmax(szName1));
	get_user_name(pEnt2, szName2, charsmax(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[\DEVIl'S\d] \Choose an action:^n^n\y1. \rEnter the game^n\y6. \wSpectator^n^n\y0. \wExit", -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[i]);
		write_byte(players[i]);
		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[i], m_iTeam))
		{
			case 1: tt++;
			case 2: ct++;
		}
	}
}
Rest in peace my friend I always will remember you! 🖤👊

Аватар
HALLO_KITTY
Извън линия
Потребител
Потребител
Мнения: 27
Регистриран на: 19 Авг 2018, 14:48
Се отблагодари: 9 пъти
Получена благодарност: 1 път

Преработка на round Balance ReAPI

Мнение от HALLO_KITTY » 30 Авг 2020, 19:40

Welcome to the AMX Mod X 1.8.1-300 Compiler.
Copyright (c) 1997-2013 ITB CompuPhase, AMX Mod X Team

D:\Games\Counter-Strike WaRzOnE\cstrike\addons\amxmodx\scripting\include\reapi_gamedll_const.inc(408) : error 017: undefined symbol "ht_grenade"
D:\Games\Counter-Strike WaRzOnE\cstrike\addons\amxmodx\scripting\include\reapi_gamedll_const.inc(450) : error 017: undefined symbol "ht_weaponbox"
D:\Games\Counter-Strike WaRzOnE\cstrike\addons\amxmodx\scripting\include\reapi_gamedll_const.inc(783) : error 017: undefined symbol "ht_weapon"
D:\Games\Counter-Strike WaRzOnE\cstrike\addons\amxmodx\scripting\include\reapi_gamedll_const.inc(790) : warning 200: symbol "RG_CBasePlayerWeapon_DefaultDep" is truncated to 31 characters
D:\Games\Counter-Strike WaRzOnE\cstrike\addons\amxmodx\scripting\include\reapi_gamedll_const.inc(797) : warning 200: symbol "RG_CBasePlayerWeapon_DefaultRel" is truncated to 31 characters
D:\Games\Counter-Strike WaRzOnE\cstrike\addons\amxmodx\scripting\include\reapi_gamedll_const.inc(804) : warning 200: symbol "RG_CBasePlayerWeapon_DefaultSho" is truncated to 31 characters

3 Errors.
Could not locate output file D:\COUNTER_STRIKE\neuupdate\ultimate_vip.amx (compile failed).



дава ми тези ерори и ако може админите да избират в кои team влизат мерси

Аватар
impossible
Извън линия
Потребител
Потребител
Мнения: 488
Регистриран на: 15 Юни 2019, 12:41
Се отблагодари: 23 пъти
Получена благодарност: 47 пъти

Преработка на round Balance ReAPI

Мнение от impossible » 30 Авг 2020, 19:56

Пробвай с по-нова версия компилатор
image.png
image.png (48.36 KiB) Преглеждано 2457 пъти
image.png
image.png (48.36 KiB) Преглеждано 2457 пъти
Последно промяна от impossible на 31 Авг 2020, 10:36, променено общо 1 път.

Аватар
atmax
Извън линия
Потребител
Потребител
Мнения: 492
Регистриран на: 22 Мар 2018, 15:06
Се отблагодари: 37 пъти
Получена благодарност: 43 пъти

Преработка на round Balance ReAPI

Мнение от atmax » 30 Авг 2020, 20:29

Компилирай локално или смени както в горния пост ти казаха не забелязах останалото от телефона :д
Rest in peace my friend I always will remember you! 🖤👊

Аватар
HALLO_KITTY
Извън линия
Потребител
Потребител
Мнения: 27
Регистриран на: 19 Авг 2018, 14:48
Се отблагодари: 9 пъти
Получена благодарност: 1 път

Преработка на round Balance ReAPI

Мнение от HALLO_KITTY » 31 Авг 2020, 09:24

Ок
може ли да го направиш админите да избират в кои team да играят мерси @atmax :tnx:

Публикувай отговор
  • Подобни теми
    Отговори
    Преглеждания
     Последно мнение

Обратно към “Заявки за плъгини”

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 15 госта