Плъгин да завърта на определено време най-добрите играчи в сървъра

В този раздел можете да подавате всякакви заявки за намиране, изработка или преработка на плъгини/модове.
Заключена
Потребителски аватар

Автор на темата
Dvstoyanov89
Потребител
Потребител
Мнения: 41
Регистриран: 11 май 2019, 14:04
Се отблагодари: 11 пъти
Получена благодарност: 6 пъти

Плъгин да завърта на определено време най-добрите играчи в сървъра

Мнение от Dvstoyanov89 » 24 май 2019, 17:21

Здравейте, преди време бях видял във един сървър подобен плъгин, но не мога да го намеря. Идеята е следната, примерно на 5-10 минути да смени 1вите играчи в TABSCORE от Т на CT и обратно.
Поздрави!

Потребителски аватар

OciXCrom TM
Администратор
Администратор
Мнения: 5385
Регистриран: 06 окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 87 пъти
Получена благодарност: 601 пъти
Години: 21
Контакти:

Плъгин да завърта на определено време най-добрите играчи в сървъра

Мнение от OciXCrom TM » 25 май 2019, 00:16

Cvar: sbp_swap_delay = 600 -- през колко секунди да сменя играчите.

Ще смени първия играч от всеки отбор според броя на убийства.
Ако има повече от един човек със същия брой на убийства, ще избере този с най-малкия брой на умирания.

Код: Избери всички

#include <amxmodx>
#include <cromchat>
#include <cstrike>

new g_pSwapDelay

public plugin_init()
{
	register_plugin("Swap Best Players", "1.0", "OciXCrom")
	g_pSwapDelay = register_cvar("sbp_swap_delay", "600")
	CC_SetPrefix("&x04[SBP]")
}

public plugin_cfg()
{
	set_task(get_pcvar_float(g_pSwapDelay), "swap_best_players", .flags = "b")
}

public swap_best_players()
{
	new iPlayers[32], id[2], iPnum
	get_players(iPlayers, iPnum, "e", "CT")

	if(!iPnum)
	{
		return
	}

	SortCustom1D(iPlayers, iPnum, "sort_players")
	id[0] = iPlayers[0]

	get_players(iPlayers, iPnum, "e", "TERRORIST")

	if(!iPnum)
	{
		return
	}

	SortCustom1D(iPlayers, iPnum, "sort_players")
	id[1] = iPlayers[0]

	cs_set_user_team(id[0], CS_TEAM_T)
	cs_set_user_team(id[1], CS_TEAM_CT)

	new szName[2][32]
	get_user_name(id[0], szName[0], charsmax(szName[]))
	get_user_name(id[1], szName[1], charsmax(szName[]))

	CC_SendMessage(0, "&x03%s &x01and &x03%s &x01have swapped teams!", szName[0], szName[1])
}

public sort_players(id1, id2)
{
	if(get_user_frags(id1) > get_user_frags(id2))
	{
		return -1
	}
	else if(get_user_frags(id1) < get_user_frags(id2))
	{
		return 1
	}
	else
	{
		if(cs_get_user_deaths(id1) < cs_get_user_deaths(id2))
		{
			return -1
		}
		else if(cs_get_user_deaths(id1) > cs_get_user_deaths(id2))
		{
			return 1
		}
	}

	return 0
}

Потребителски аватар

Автор на темата
Dvstoyanov89
Потребител
Потребител
Мнения: 41
Регистриран: 11 май 2019, 14:04
Се отблагодари: 11 пъти
Получена благодарност: 6 пъти

Плъгин да завърта на определено време най-добрите играчи в сървъра

Мнение от Dvstoyanov89 » 25 май 2019, 10:05

Всичко е точно, но как може да се оправи това, че сменя играчите, но си ме оставя във противниковата база. Примерно мести ме терорист, но ме спаунва във базата на CT

Друг проблем е, че сменя играчите само 1 път, след това през целия мап плъгина е неактивен.

Потребителски аватар

OciXCrom TM
Администратор
Администратор
Мнения: 5385
Регистриран: 06 окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 87 пъти
Получена благодарност: 601 пъти
Години: 21
Контакти:

Плъгин да завърта на определено време най-добрите играчи в сървъра

Мнение от OciXCrom TM » 25 май 2019, 13:43

Искаш да respawn-ва всеки път ли? Защото смяната може да се случи и по време на рунд.

Сигурен ли си, че става само един път? Ако да, има ли някакви грешки в конзолата?

Имай предвид, че смяната няма да се случи ако няма поне един играч във всеки отбор.

Потребителски аватар

Автор на темата
Dvstoyanov89
Потребител
Потребител
Мнения: 41
Регистриран: 11 май 2019, 14:04
Се отблагодари: 11 пъти
Получена благодарност: 6 пъти

Плъгин да завърта на определено време най-добрите играчи в сървъра

Мнение от Dvstoyanov89 » 25 май 2019, 14:40

Искам да кажа, че когато започне нов рунд, тогава ни разменя. До тук ок, но аз съм вече във противниковата база и ги избивам изненадващо :D

Потребителски аватар

iv69
Потребител
Потребител
Мнения: 429
Регистриран: 17 мар 2018, 15:34
Се отблагодари: 120 пъти
Получена благодарност: 12 пъти

Плъгин да завърта на определено време най-добрите играчи в сървъра

Мнение от iv69 » 25 май 2019, 17:15

Dvstoyanov89 написа:
25 май 2019, 14:40
Искам да кажа, че когато започне нов рунд, тогава ни разменя. До тук ок, но аз съм вече във противниковата база и ги избивам изненадващо :D
Може би е от значение и дали сървъра е Classic или Respawn ??? При втория случай рунда започва малко по-различно...

Потребителски аватар

OciXCrom TM
Администратор
Администратор
Мнения: 5385
Регистриран: 06 окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 87 пъти
Получена благодарност: 601 пъти
Години: 21
Контакти:

Плъгин да завърта на определено време най-добрите играчи в сървъра

Мнение от OciXCrom TM » 25 май 2019, 21:40

Ако искаш, мога да го направя да ги разменя в края на рунда. Обаче ако сървърът е с respawn, по-добре е да се прероди играчът.

Потребителски аватар

iv69
Потребител
Потребител
Мнения: 429
Регистриран: 17 мар 2018, 15:34
Се отблагодари: 120 пъти
Получена благодарност: 12 пъти

Плъгин да завърта на определено време най-добрите играчи в сървъра

Мнение от iv69 » 25 май 2019, 22:33

OciXCrom написа:
25 май 2019, 21:40
Ако искаш, мога да го направя да ги разменя в края на рунда. Обаче ако сървърът е с respawn, по-добре е да се прероди играчът.
Така, как обясни човека на мене ми прозвуча, че сървъра му е Classic (.. но аз съм вече във противниковата база...) или пък е Respawn, но е с spawnmode = none , тоест се прераждат само в базите си. При мен е с spawnmode = preset , тоест използвам си predefined spawns , но понякога като сложа нов плъгин и само сменя картата а не ресвам сървъра, нещо ми се бъгва и започват да се раждат в базите си... и става интересното... с активиран FFA :). Не е изключено и на него нещо да се е бъгнало?

Потребителски аватар

OciXCrom TM
Администратор
Администратор
Мнения: 5385
Регистриран: 06 окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 87 пъти
Получена благодарност: 601 пъти
Години: 21
Контакти:

Плъгин да завърта на определено време най-добрите играчи в сървъра

Мнение от OciXCrom TM » 26 май 2019, 00:25

Ето за двамата вариант, пък изберете си кой ще ползвате.

Cvar: sbp_respawn:
  • ако е сложено на 1, ще замени играчите веднага когато минат дадените секунди и ще ги съживи в новите им бази;
  • ако е сложено на 0, ще изчака до края на рунда да замени играчите, обаче няма да ги съживи.

Код: Избери всички

#include <amxmodx>
#include <cromchat>
#include <cstrike>
#include <hamsandwich>

new bool:g_bShouldSwap, g_pSwapDelay, g_pRespawn

public plugin_init()
{
	register_plugin("Swap Best Players", "1.1", "OciXCrom")
	register_logevent("OnRoundEnd", 2, "1=Round_End")
	g_pSwapDelay = register_cvar("sbp_swap_delay", "600")
	g_pRespawn = register_cvar("sbp_respawn", "1")
	CC_SetPrefix("&x04[SBP]")
}

public plugin_cfg()
{
	set_task(get_pcvar_float(g_pSwapDelay), "time_to_swap", .flags = "b")
}

public time_to_swap()
{
	if(get_pcvar_num(g_pRespawn) == 1)
	{
		swap_best_players(true)
	}
	else
	{
		CC_SendMessage(0, "The game will attempt to swap the best players when the &x03round ends&x01.")
		g_bShouldSwap = true
	}
}

public OnRoundEnd()
{
	if(g_bShouldSwap)
	{
		swap_best_players(false)
		g_bShouldSwap = false
	}
}

public swap_best_players(bool:bRespawn)
{
	new iPlayers[32], id[2], iPnum
	get_players(iPlayers, iPnum, "e", "CT")

	if(!iPnum)
	{
		return
	}

	SortCustom1D(iPlayers, iPnum, "sort_players")
	id[0] = iPlayers[0]

	get_players(iPlayers, iPnum, "e", "TERRORIST")

	if(!iPnum)
	{
		return
	}

	SortCustom1D(iPlayers, iPnum, "sort_players")
	id[1] = iPlayers[0]

	cs_set_user_team(id[0], CS_TEAM_T)
	cs_set_user_team(id[1], CS_TEAM_CT)

	if(bRespawn)
	{
		ExecuteHam(Ham_CS_RoundRespawn, id[0])
		ExecuteHam(Ham_CS_RoundRespawn, id[1])
	}

	new szName[2][32]
	get_user_name(id[0], szName[0], charsmax(szName[]))
	get_user_name(id[1], szName[1], charsmax(szName[]))

	CC_SendMessage(0, "&x03%s &x01and &x03%s &x01have swapped teams!", szName[0], szName[1])
}

public sort_players(id1, id2)
{
	if(get_user_frags(id1) > get_user_frags(id2))
	{
		return -1
	}
	else if(get_user_frags(id1) < get_user_frags(id2))
	{
		return 1
	}
	else
	{
		if(cs_get_user_deaths(id1) < cs_get_user_deaths(id2))
		{
			return -1
		}
		else if(cs_get_user_deaths(id1) > cs_get_user_deaths(id2))
		{
			return 1
		}
	}

	CC_SendMessage(0, "Unable to swap players because &x032 or more &x01of them have the exact same score.")
	return 0
}

Потребителски аватар

Автор на темата
Dvstoyanov89
Потребител
Потребител
Мнения: 41
Регистриран: 11 май 2019, 14:04
Се отблагодари: 11 пъти
Получена благодарност: 6 пъти

Плъгин да завърта на определено време най-добрите играчи в сървъра

Мнение от Dvstoyanov89 » 26 май 2019, 12:49

При мен всичко е точно. Благодаря :lock:

Заключена

Върни се в “Заявки за плъгини”

Кой е на линия

Потребители, разглеждащи този форум: Няма регистрирани потребители и 2 госта