Страница 1 от 1

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

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

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

Публикувано на: 25 Май 2019, 00:16
от OciXCrom
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
}

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

Публикувано на: 25 Май 2019, 10:05
от Dvstoyanov89
Всичко е точно, но как може да се оправи това, че сменя играчите, но си ме оставя във противниковата база. Примерно мести ме терорист, но ме спаунва във базата на CT

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

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

Публикувано на: 25 Май 2019, 13:43
от OciXCrom
Искаш да respawn-ва всеки път ли? Защото смяната може да се случи и по време на рунд.

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

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

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

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

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

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

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

Публикувано на: 25 Май 2019, 21:40
от OciXCrom
Ако искаш, мога да го направя да ги разменя в края на рунда. Обаче ако сървърът е с respawn, по-добре е да се прероди играчът.

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

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

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

Публикувано на: 26 Май 2019, 00:25
от OciXCrom
Ето за двамата вариант, пък изберете си кой ще ползвате.

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
}

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

Публикувано на: 26 Май 2019, 12:49
от Dvstoyanov89
При мен всичко е точно. Благодаря :lock: