Counter-Strike 1.6
Godlike # Dust2 by Day, Classic by Night
45.144.155.164:27015
de_dust2
Играчи: 10/32
de_dust2
Counter-Strike 1.6
HH-GaminG #GunGame 91.134.123.43:27015 gg_flatiron Играчи: 8/28
Counter-Strike 1.6
CS1.BG | DUST2 NOSHTA GARMI [RANKED PLAY] 45.144.155.113:27015 de_dust2 Играчи: 2/32
Counter-Strike 1.6
Cs-PlovdiV.com - Aim Attack 93.123.16.4:27022 aim_map2 Играчи: 4/16
Counter-Strike 1.6
VIP
45.144.155.171:27015 ★ [ZM]ImperialCS Zombie Plague Mega|Fast SaveAP Jetpack+GoldenAK zm_effect 13/32

no_players_map с обратна функция?

В този раздел можете да подавате всякакви заявки за намиране, изработка или преработка на плъгини/модове.
Аватар
iv69
Извън линия
Потребител
Потребител
Мнения: 744
Регистриран на: 17 Мар 2018, 15:34
Се отблагодари: 214 пъти
Получена благодарност: 39 пъти

no_players_map с обратна функция?

Мнение от iv69 » 22 Авг 2020, 18:15

Здравейте,
Има плъгин от Неугомон, който сменява картата когато или сървъра е празен или има малко играчи.
Това е и кода:

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

/*
	neygomon created ^_^ | http://www.neugomon.ru
	
	No Players Map - для пустых серверов =) Меняет карту на заданную
	Особенности:
		* Вызывает голосование если на сервере игроков меньше чем указано
		* Если сервер пустой, то карта меняется на указанную
		* Если карта в плагине и текущая карта на сервере совпадают - плагин отключается
		* Карту меняет в начале раунда, аля Last Round
		* Сообщения в чат о результатах голосования

	Credits: 
		* death_error. За идею
	
	Information: 
		* Скальпель, соси болт причмокивая :)
*/


#include <amxmodx>

#if AMXX_VERSION_NUM < 183
	#define engine_changelevel(%0) server_cmd("changelevel %s", %0)
#endif

#define MIN_PLAYERS	5		// Минимум игроков, после которых начинают считаться проверки
#define NUM_CHECKS	3		// Число проверок пустого сервера или с малым кол-вом игроков. Далее запуск голосования.
#define VOTETIME	20		// Время голосования
#define MAP		"de_dust2_2x2"	// Карта, на которую менять
// #define NO_ROUND			// Поддержка бесконечного раунда

new iSelectKey[2];
#if !defined NO_ROUND
new bool:g_bChangeMap;
new bool:g_bFirstRound = true;
#endif
public plugin_init()
{
#define PLUGIN 	"No Players Map"
#define VERSION "1.03"
	register_plugin(PLUGIN, VERSION, "neygomon");

	new map[32]; get_mapname(map, charsmax(map));
	if(!strcmp(map, MAP))
	{
		log_amx("Plugin %s[%s] stopped! Curr map %s contains in plugin %s", PLUGIN, VERSION, map, MAP);
		pause("ad");
		return;
	}
#if defined NO_ROUND
	set_task(60.0, "eRoundStart", .flags="b");
#else	
	register_event("HLTV", "eRoundStart", "a", "1=0", "2=0");
	register_logevent("LeRestartRound", 2, "1&Restart_Round_");
#endif
	register_menucmd(register_menuid(PLUGIN), MENU_KEY_1|MENU_KEY_2, "NPMHandler");	
}
#if !defined NO_ROUND
public LeRestartRound()
	g_bFirstRound = true;
#endif
public eRoundStart()
{
	static players[32], iCheck, iCheck2, pl; 
#if !defined NO_ROUND
	if(g_bChangeMap)
	{
		engine_changelevel(MAP);
		return PLUGIN_CONTINUE;
	}
	if(g_bFirstRound)
	{
		iCheck = iCheck2 = 0;
		g_bFirstRound = false;
	}
#endif	
	get_players(players, pl, "ch");
	if(!pl)
	{
		if(++iCheck >= NUM_CHECKS)
			engine_changelevel(MAP);
	}
	else if(pl < MIN_PLAYERS)
	{
		if(++iCheck2 >= NUM_CHECKS)
		{
			new szMenu[256], iLen, iKeys = MENU_KEY_1|MENU_KEY_2;
			iLen = formatex(szMenu, charsmax(szMenu), "\d[\r%s\d] \yНа сервере мало игроков \d[\r%d чел\d]^n\wСменить карту на \r%s\w?^n^n", PLUGIN, pl, MAP);
			iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r1. \wДа^n");
			iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r2. \wНет^n");
			
			set_task(float(VOTETIME), "CheckResult");
			return show_menu(0, iKeys, szMenu, VOTETIME, PLUGIN);
		}
	}
	return PLUGIN_CONTINUE;
}

public NPMHandler(id, iKey)
{
	switch(iKey)
	{
		case 0: iSelectKey[0]++;
		case 1: iSelectKey[1]++;
	}
	return PLUGIN_HANDLED;
}

public CheckResult()
{
	if((iSelectKey[0] > iSelectKey[1]) || (!iSelectKey[0] && !iSelectKey[1]))
	{
		ChatColor("^1[^4%s^1] ^4Голосование состоялось! Следующая карта ^3%s", PLUGIN, MAP);
#if defined NO_ROUND
		engine_changelevel(MAP);
#else		
		g_bChangeMap = true;
#endif		
		return;
	}
	ChatColor("^1[^4%s^1] ^4Голосование ^3не ^4состоялось! В след. раунде спрошу еще раз :D", PLUGIN);
	arrayset(iSelectKey, 0, sizeof iSelectKey);
}

stock ChatColor(const szMessage[], any:...)
{
	static pnum, players[32], szMsg[190], IdMsg; 
	vformat(szMsg, charsmax(szMsg), szMessage, 2);
	
	if(!IdMsg) IdMsg = get_user_msgid("SayText");
	
	get_players(players, pnum, "ch");
	
	for(new i; i < pnum; i++)
	{
		message_begin(MSG_ONE, IdMsg, .player = players[i]);
		write_byte(players[i]);
		write_string(szMsg);
		message_end();
	}
}
Молбата ми е: може ли да се направи плъгин, който да действа в обратна посока? Т.е. , ако сървъра засече с определен брой проверки(примерно с 3 проверки - #define NUM_CHECKS 3) над даден брой(например минимум 15)играчи : #define MIN_PLAYERS 15 , то да се пуска вот за посочена в плъгина карта, на същия принцип подобен на този в плъгина на Неугомон.
Благодаря.

p.s.Сега ми хрумна идеята: Ако не е проблем, ще може ли да се доработи плъгина, като в него се добави и желаната функция за вот за смяна на карта при повече играчи в сървъра? Плъгина работи точно и коректно, но се чудя дали е възможно да действа коректно и в "обратна поосока" ?

Аватар
iv69
Извън линия
Потребител
Потребител
Мнения: 744
Регистриран на: 17 Мар 2018, 15:34
Се отблагодари: 214 пъти
Получена благодарност: 39 пъти

no_players_map с обратна функция?

Мнение от iv69 » 22 Авг 2020, 22:36

iv69 написа: 22 Авг 2020, 18:15 Здравейте,
Има плъгин от Неугомон, който сменява картата когато или сървъра е празен или има малко играчи.
Това е и кода:

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

/*
	neygomon created ^_^ | http://www.neugomon.ru
	
	No Players Map - для пустых серверов =) Меняет карту на заданную
	Особенности:
		* Вызывает голосование если на сервере игроков меньше чем указано
		* Если сервер пустой, то карта меняется на указанную
		* Если карта в плагине и текущая карта на сервере совпадают - плагин отключается
		* Карту меняет в начале раунда, аля Last Round
		* Сообщения в чат о результатах голосования

	Credits: 
		* death_error. За идею
	
	Information: 
		* Скальпель, соси болт причмокивая :)
*/


#include <amxmodx>

#if AMXX_VERSION_NUM < 183
	#define engine_changelevel(%0) server_cmd("changelevel %s", %0)
#endif

#define MIN_PLAYERS	5		// Минимум игроков, после которых начинают считаться проверки
#define NUM_CHECKS	3		// Число проверок пустого сервера или с малым кол-вом игроков. Далее запуск голосования.
#define VOTETIME	20		// Время голосования
#define MAP		"de_dust2_2x2"	// Карта, на которую менять
// #define NO_ROUND			// Поддержка бесконечного раунда

new iSelectKey[2];
#if !defined NO_ROUND
new bool:g_bChangeMap;
new bool:g_bFirstRound = true;
#endif
public plugin_init()
{
#define PLUGIN 	"No Players Map"
#define VERSION "1.03"
	register_plugin(PLUGIN, VERSION, "neygomon");

	new map[32]; get_mapname(map, charsmax(map));
	if(!strcmp(map, MAP))
	{
		log_amx("Plugin %s[%s] stopped! Curr map %s contains in plugin %s", PLUGIN, VERSION, map, MAP);
		pause("ad");
		return;
	}
#if defined NO_ROUND
	set_task(60.0, "eRoundStart", .flags="b");
#else	
	register_event("HLTV", "eRoundStart", "a", "1=0", "2=0");
	register_logevent("LeRestartRound", 2, "1&Restart_Round_");
#endif
	register_menucmd(register_menuid(PLUGIN), MENU_KEY_1|MENU_KEY_2, "NPMHandler");	
}
#if !defined NO_ROUND
public LeRestartRound()
	g_bFirstRound = true;
#endif
public eRoundStart()
{
	static players[32], iCheck, iCheck2, pl; 
#if !defined NO_ROUND
	if(g_bChangeMap)
	{
		engine_changelevel(MAP);
		return PLUGIN_CONTINUE;
	}
	if(g_bFirstRound)
	{
		iCheck = iCheck2 = 0;
		g_bFirstRound = false;
	}
#endif	
	get_players(players, pl, "ch");
	if(!pl)
	{
		if(++iCheck >= NUM_CHECKS)
			engine_changelevel(MAP);
	}
	else if(pl < MIN_PLAYERS)
	{
		if(++iCheck2 >= NUM_CHECKS)
		{
			new szMenu[256], iLen, iKeys = MENU_KEY_1|MENU_KEY_2;
			iLen = formatex(szMenu, charsmax(szMenu), "\d[\r%s\d] \yНа сервере мало игроков \d[\r%d чел\d]^n\wСменить карту на \r%s\w?^n^n", PLUGIN, pl, MAP);
			iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r1. \wДа^n");
			iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r2. \wНет^n");
			
			set_task(float(VOTETIME), "CheckResult");
			return show_menu(0, iKeys, szMenu, VOTETIME, PLUGIN);
		}
	}
	return PLUGIN_CONTINUE;
}

public NPMHandler(id, iKey)
{
	switch(iKey)
	{
		case 0: iSelectKey[0]++;
		case 1: iSelectKey[1]++;
	}
	return PLUGIN_HANDLED;
}

public CheckResult()
{
	if((iSelectKey[0] > iSelectKey[1]) || (!iSelectKey[0] && !iSelectKey[1]))
	{
		ChatColor("^1[^4%s^1] ^4Голосование состоялось! Следующая карта ^3%s", PLUGIN, MAP);
#if defined NO_ROUND
		engine_changelevel(MAP);
#else		
		g_bChangeMap = true;
#endif		
		return;
	}
	ChatColor("^1[^4%s^1] ^4Голосование ^3не ^4состоялось! В след. раунде спрошу еще раз :D", PLUGIN);
	arrayset(iSelectKey, 0, sizeof iSelectKey);
}

stock ChatColor(const szMessage[], any:...)
{
	static pnum, players[32], szMsg[190], IdMsg; 
	vformat(szMsg, charsmax(szMsg), szMessage, 2);
	
	if(!IdMsg) IdMsg = get_user_msgid("SayText");
	
	get_players(players, pnum, "ch");
	
	for(new i; i < pnum; i++)
	{
		message_begin(MSG_ONE, IdMsg, .player = players[i]);
		write_byte(players[i]);
		write_string(szMsg);
		message_end();
	}
}
Молбата ми е: може ли да се направи плъгин, който да действа в обратна посока? Т.е. , ако сървъра засече с определен брой проверки(примерно с 3 проверки - #define NUM_CHECKS 3) над даден брой(например минимум 15)играчи : #define MIN_PLAYERS 15 , то да се пуска вот за посочена в плъгина карта, на същия принцип подобен на този в плъгина на Неугомон.
Благодаря.

p.s.Сега ми хрумна идеята: Ако не е проблем, ще може ли да се доработи плъгина, като в него се добави и желаната функция за вот за смяна на карта при повече играчи в сървъра? Плъгина работи точно и коректно, но се чудя дали е възможно да действа коректно и в "обратна поосока" ?
Това дали ще върви:

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

#include <amxmodx>

new szMap[32];

public plugin_init() {
register_logevent("RoundEnd", 2, "1=Round End");

get_mapname(szMap, 31);
}

public RoundEnd() {
if(get_playersnum() <= 15 || equali(szMap, "de_dust2")) return;

set_task(0.15, "ChangeMap");
}

public ChangeMap() server_cmd("gal_startvote");
:confused:

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

no_players_map с обратна функция?

Мнение от atmax » 22 Авг 2020, 23:20

Ти ли го прави? Горе/долу си се справил, но пак е зле написано.
Аз не мога да разбера каква ти е целта когато са повече от 15 или 15 играча в сървъра да смени картата? И също така картата трябва да е различна от д2?
А и след като я смени после какво? По тоя начин дето си го направил ще я смени и като зареди пак плъгина, пак ще засече че са 15 и пак ще смени и пак и пак... Така ще си изгониш играчите, постоянно ще сменяш картата, каква е логиката тука обясни ми?
Rest in peace my friend I always will remember you! 🖤👊

Аватар
iv69
Извън линия
Потребител
Потребител
Мнения: 744
Регистриран на: 17 Мар 2018, 15:34
Се отблагодари: 214 пъти
Получена благодарност: 39 пъти

no_players_map с обратна функция?

Мнение от iv69 » 22 Авг 2020, 23:43

Ми за съжаление аз не разбирам как е правилно да се напише искания от мен плъгин. Опитах така и се комилира, но наистина ми прави проблеми.
А за идеята: Ми целта общо взето е когато има над определен брой играчи(сървъра е DM only de_dust2), да речем 15 - да си се пуска нормалния de_dust2(защото все пак е по-голям и си е класика), а когато броя на играчите слезе под някакъв минимум, да речем под 4-ма играча: да се включи директно(ако няма никой) de_dust2_2x2 защото е по-малък и по-подходящ за малко хора, или вот за нея ако има все пак някой.
Може би трябва да се "поясни" в плъгина, че ако броя на играчите е над дадена стойност , но картата в момента на проверката е исканата, плъгина да се изключва? Не знам как е правилно, ти нямаш ли идея за това как да стане цялата система? Първия плъгин май влиза "в противоречие" с този който се опитах "да направя".....

p.s. Преди маалко намерих един подобен и работещ плъгин тук в сайта писан на подобна тематика от Veco. Прилагам го, но той следи само за минимален брой играчи, под който винаги се включва awp_india. Пак съм го искал аз: е ако има начин да се доработи ще съм безкрайно доволен. В тази тема е https://amxx-bg.info/forum/viewtopic.php?f=33&t=6838 :

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

#include <amxmodx>

#define MIN_PLAYERS 3
#define CHANGE_TIME 30.0
new const preferred_map[] = "awp_india"

new real_players_num = 0

public plugin_init()
{
    register_plugin("Auto Map Change", "1.1","<VeCo>")
    
    new current_map[sizeof preferred_map]
    get_mapname(current_map, charsmax(current_map))
    if(equal(current_map, preferred_map)) pause("ad")
}

public client_connect(id)
{
    if(is_user_bot(id)) return
    
    if(++real_players_num >= MIN_PLAYERS) remove_task()
    else if(real_players_num < MIN_PLAYERS && !task_exists()) start_task()
}
public client_disconnected(id) if(!is_user_bot(id) && --real_players_num < MIN_PLAYERS && !task_exists()) start_task()

public start_task() set_task(CHANGE_TIME, "change_map")
public change_map() server_cmd("amx_map ^"%s^"", preferred_map)

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

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

Кой е на линия

Потребители разглеждащи този форум: Semrush [Bot] и 5 госта