Raised This Month: $7 Target: $400
 1% 

super-mapchooser


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
TRUE RED
Senior Member
Join Date: Mar 2012
Location: Ukraine
Old 03-18-2012 , 19:36   super-mapchooser
Reply With Quote #1

Code:
#include <amxmodx>

new const PLUGIN[] = ""
new const VERSION[] = ""
new const AUTHOR[] = ""

#define FLOAT_TIMELIMIT		"mp_timelimit"
#define STRING_NEXTMAP		"amx_nextmap"
#define NUM_MAXROUNDS		"mp_maxrounds"
#define NUM_WINLIMIT		"mp_winlimit"

#define NUM_SM_VOTEMAPS		"mapchooser_votemaps"
#define NUM_SM_LANG		"mapchooser_lang"
#define NUM_SM_TIME		"mapchooser_votetime"

#define NUM_SM_RED		"mapchooser_result_red"
#define NUM_SM_GREEN		"mapchooser_result_green"
#define NUM_SM_BLUE		"mapchooser_result_blue"

#define TASK_PLUGIN_ID		44747477 // +=:D
#define TASK_SCREEN_ID		979699 // +=:D:=+
#define TASK_RESULT_ID		12111 // :o

const HudLen = 512

new Array:g_mapName
new g_mapNums
new g_saveids[10]

new g_voteCount[10]
new g_nextName[10]
new g_lastMap[32]
new g_currentMap[32]
new g_mapVoteNum

new g_votemaps
new g_maxspeed = 320

new bool:hasBlocked = false
new bool:forceBlock = true
new bool:voteStarted = true
new bool:hasExtend = false
new timeleft

new bool:hasBlind[33] = { false, ... }
new g_msgScreenFade

new PlayersVoted = 0
new PlayersNum = 0

new
	g_result_red,
	g_result_green,
	g_result_blue

new MenuName[96]

enum ChatColor
{
	CHATCOLOR_NORMAL = 1, 	// Normal
	CHATCOLOR_GREEN, 	// Green Color
	CHATCOLOR_TEAM_COLOR, 	// Red, grey, blue
	CHATCOLOR_GREY, 	// grey
	CHATCOLOR_RED, 		// Red
	CHATCOLOR_BLUE, 	// Blue
}

new g_TeamName[][] = 
{
	"",
	"TERRORIST",
	"CT",
	"SPECTATOR"
}

new g_msgSayText
new g_msgTeamInfo

public plugin_init()
{
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	register_cvar("amx_extendmap_max",	"90.0")//Максимальное количество минут. Когда несколько раз продлевается карта - это значение будет максимальным в timelimit'е
	register_cvar("amx_extendmap_step",	"15.0")//На сколько минут продлевать карту, если проголосовали за ее продление.
	
	register_cvar(NUM_SM_LANG,		"0")//0-Русский, 1-English
	register_cvar(NUM_SM_TIME,		"15")//Сколько времени в секундах должно идти голосование
	register_cvar(NUM_SM_VOTEMAPS,		"5")//Сколько карт выводить на голосование не считая карты, которую продливают в голосовании
	
	// Каким цветом показывать результаты голосования. Формат RGB
	register_cvar(NUM_SM_RED,		"255")//Красный
	register_cvar(NUM_SM_GREEN,		"255")//Зеленый
	register_cvar(NUM_SM_BLUE,		"255")//Синий
	
	register_event("ScreenFade",	"EVENT_ScreenFade",	"be")
	register_event("TextMsg",	"EVENT_RestartRound",	"a",	"2&#Game_C","2&#Game_w")
	
	g_msgSayText = get_user_msgid("SayText")
	g_msgTeamInfo = get_user_msgid("TeamInfo") 
	g_msgScreenFade = get_user_msgid("ScreenFade")
}

public plugin_cfg()
{
	g_votemaps = get_cvar_num(NUM_SM_VOTEMAPS)
	
	if(g_votemaps > 8)
		set_cvar_num(NUM_SM_VOTEMAPS, 8)
	else if(g_votemaps < 1)
		set_cvar_num(NUM_SM_VOTEMAPS, 1)
	
	g_votemaps = get_cvar_num(NUM_SM_VOTEMAPS)
	
	register_menucmd(register_menuid("superMapChooserMenu"), (-1^(-1<<(g_votemaps + 1))), "countVote")
	
	g_mapName = ArrayCreate(32)
	
	get_localinfo("lastMap", g_lastMap, sizeof g_lastMap -1)
	set_localinfo("lastMap", "")
	
	new maps_ini_file[64]
	get_localinfo("amxx_configsdir", maps_ini_file, sizeof maps_ini_file -1)
	
	format(maps_ini_file, sizeof maps_ini_file -1, "%s/maps.ini", maps_ini_file)
	
	if(!file_exists(maps_ini_file))
		get_cvar_string("mapcyclefile", maps_ini_file, sizeof maps_ini_file -1)
	
	if(loadSettings(maps_ini_file))
		cmdReloadTimer()
	
	g_maxspeed = get_cvar_num("sv_maxspeed")
	
	// bugfix: need for timeleft (cs time == amxx time): !(!(remaining == left)) || !(remaining != left) :o
	server_cmd("sv_restart 1")
	
	get_mapname(g_currentMap, sizeof g_currentMap -1)
}

public client_disconnect(id)
{
	remove_task(id+TASK_SCREEN_ID)
	remove_task(id+TASK_RESULT_ID)
	
	hasBlind[id] = false
}

public EVENT_RestartRound()
	cmdReloadTimer()

public cmdReloadTimer()
{
	if(voteStarted)
	{
		PlayersVoted = 0
		PlayersNum = 0
		
		forceBlock = true
		hasBlocked = false
		voteStarted = false
		
		new players[32], num, pid
		get_players(players, num)
		for(new i=0;i<num;i++)
		{
			pid = players[i]
			
			hasBlind[pid] = false
			
			remove_task(pid+TASK_SCREEN_ID)
			remove_task(pid+TASK_RESULT_ID)
			
			message_begin(MSG_ONE, g_msgScreenFade, _, pid)
			write_short(1<<0)
			write_short(1<<0)
			write_short(1<<0)
			write_byte(0)
			write_byte(0)
			write_byte(0)
			write_byte(0)
			message_end()
		}
		
		if(!hasExtend)
		{
			switch(get_cvar_num(NUM_SM_LANG))
			{
				//Голосование прервано !
				case 0: colorChat(0, CHATCOLOR_RED, "Голосование прервано !")
				case 1: colorChat(0, CHATCOLOR_RED, "Voting is interrupted!")
			}
		}
		
		set_cvar_num("sv_maxspeed", g_maxspeed)
		
		remove_task(TASK_PLUGIN_ID)
		
		set_task(8.0, "taskListening", TASK_PLUGIN_ID, "", 0, "b")
		taskListening()
	}
}

public taskListening()
{
	timeleft = get_timeleft()
	
	if(!hasBlocked && (timeleft <= (get_cvar_num(NUM_SM_TIME) + 14)))
	{
		change_task(TASK_PLUGIN_ID, 1.0)
		
		hasBlocked = true
	}
	else if(timeleft <= (5 + get_cvar_num(NUM_SM_TIME)))//5 sekynd - skoka ostaetsia do smeni karti posle okon4ania golosovania
	{
		remove_task(TASK_PLUGIN_ID)
		
		forceBlock = false
		hasBlocked = false
		hasExtend = false
		
		g_result_red = get_cvar_num(NUM_SM_RED)
		g_result_green = get_cvar_num(NUM_SM_GREEN)
		g_result_blue = get_cvar_num(NUM_SM_BLUE)
		
		set_cvar_num("sv_maxspeed", 0)
		
		switch(get_cvar_num(NUM_SM_LANG))
		{
			//Проголосуйте за следующую карту
			case 0:	format(MenuName, sizeof MenuName -1, "Проголосуйте за следующую карту")
			case 1: format(MenuName, sizeof MenuName -1, "Vote for the next map")
		}
		
		cmdVoteNextmap()
	}
}

public cmdVoteNextmap()
{
	new
		winlimit,
		maxrounds
	
	winlimit = get_cvar_num(NUM_WINLIMIT)
	maxrounds = get_cvar_num(NUM_MAXROUNDS)
	
	new
		mkeys = ((1<<g_votemaps) + 1),
		menu[HudLen],
		a
	
	new pos = format(menu, HudLen -1, "     \r%s:^n^n", MenuName)
	new dmax = (g_mapNums > g_votemaps) ? g_votemaps : g_mapNums
	
	new unki = 0
	
	for(g_mapVoteNum = 0; g_mapVoteNum < dmax; g_mapVoteNum++)
	{
		a = random_num(0, g_mapNums -1)
		
		while(isInMenu(a))
		{
			if(++a >= g_mapNums)
			{
				a = 0
			}
		}
		
		g_nextName[g_mapVoteNum] = a
		
		pos += format(menu[pos], HudLen -1, "     \y%d.\w %a^n", g_mapVoteNum + 1, ArrayGetStringHandle(g_mapName, a))
		
		g_saveids[unki] = a
		unki++
		
		mkeys |= (1<<g_mapVoteNum)
		
		g_voteCount[g_mapVoteNum] = 0
	}
	
	g_voteCount[g_votemaps] = 0
	g_voteCount[g_votemaps + 1] = 0
	
	new language = get_cvar_num(NUM_SM_LANG)
	
	if(((winlimit + maxrounds) == 0) && (get_cvar_float(FLOAT_TIMELIMIT) < get_cvar_float("amx_extendmap_max")))
	{
		switch(language)
		{
			//продлить
			case 0: pos += format(menu[pos], HudLen -1, "     \y%d.\w %s \y[продлить]", g_votemaps + 1, g_currentMap)
			case 1: pos += format(menu[pos], HudLen -1, "     \y%d.\w %s \y[prolong]", g_votemaps + 1, g_currentMap)
		}
		
		mkeys |= (1<<g_votemaps)
	}
	
	set_task(get_cvar_float(NUM_SM_TIME), "checkVotes", TASK_PLUGIN_ID)
	
	new players[32], pid
	get_players(players, PlayersNum)
	for(new i=0;i<PlayersNum;i++)
	{
		pid = players[i]
		
		hasBlind[pid] = true
		
		show_menu(pid, mkeys, menu, get_cvar_num(NUM_SM_TIME), "superMapChooserMenu")
		
		switch(language)
		{
			//Голосование начато !
			case 0: colorChat(pid, CHATCOLOR_GREEN, "Голосование начато !")
			case 1: colorChat(pid, CHATCOLOR_GREEN, "Voting started")
		}
		
		client_cmd(pid, "spk gman/gman_choose1")
		
		message_begin(MSG_ONE, g_msgScreenFade, _, pid)
		write_short(1<<12)	// Duration
		write_short(1<<9)	// Hold time
		write_short(1<<0)	// Fade type
		write_byte(0)		// Red
		write_byte(0)		// Green
		write_byte(0)		// Blue
		write_byte(255)		// Alpha
		message_end()
		
		set_task(1.0, "cmdFadeScreen", pid+TASK_SCREEN_ID, "", 0, "b")
	}
	
	voteStarted = true
	
	log_amx("Super Vote: Voting for the nextmap started")
}

public checkVotes()
{
	new bolt = 0
	
	for(new a = 0; a < g_mapVoteNum; a++)
	{
		if(g_voteCount[bolt] < g_voteCount[a])
		{
			bolt = a
		}
	}
	
	//clear removed channel #2 :/
	set_hudmessage(_,_,_,_,_,_,_,_,_,_,2)
	show_hudmessage(0, " ")
	
	new players[32], num, pid
	get_players(players, num)
	
	if((g_voteCount[g_votemaps] > g_voteCount[bolt]) && (g_voteCount[g_votemaps] > g_voteCount[g_votemaps + 1]))
	{	
		new Float:steptime = get_cvar_float("amx_extendmap_step")
		
		set_cvar_float(FLOAT_TIMELIMIT, get_cvar_float(FLOAT_TIMELIMIT) + steptime)
		
		set_hudmessage(255, 127, 0, -1.0, 0.25, 2, 0.1, 10.0, 0.05, 1.0, 1)
		
		for(new i=0;i<num;i++)
		{
			pid = players[i]
			
			switch(get_cvar_num(NUM_SM_LANG))
			{
				case 0:
				{
					//Голосование завершено. Эта карта продлена на %.0f мин
					colorChat(pid, CHATCOLOR_GREEN, "Голосование завершено.^x01 Р*та карта продлена РЅР° %.0f РјРёРЅ", steptime)
					
					//Эта карта продлена на %.0f мин
					show_hudmessage(pid, "Р*та карта продлена РЅР° %.0f РјРёРЅ", steptime)
				}
				case 1:
				{
					colorChat(pid, CHATCOLOR_GREEN, "Voting is finished. This map is prolonged on %.0f minutes", steptime)
					show_hudmessage(pid, "This map is prolonged on %.0f minutes", steptime)
				}
			}
		}
		
		log_amx("Super Vote: Voting for the nextmap finished. Map %s will be extended to next %.0f minutes", g_currentMap, steptime)
		
		hasExtend = true
		
		cmdReloadTimer()
		
		return
	}
	
	new smap[32]
	
	if(g_voteCount[bolt] && (g_voteCount[g_votemaps + 1] <= g_voteCount[bolt]))
	{
		ArrayGetString(g_mapName, g_nextName[bolt], smap, sizeof smap -1)
		set_cvar_string(STRING_NEXTMAP, smap)
	}
	
	get_cvar_string(STRING_NEXTMAP, smap, sizeof smap -1)
	
	set_hudmessage(255, 127, 0, -1.0, 0.42, 2, 0.1, 10.0, 0.05, 1.0, 1)
	
	for(new i=0;i<num;i++)
	{
		pid = players[i]
		
		remove_task(pid+TASK_RESULT_ID)
		
		switch(get_cvar_num(NUM_SM_LANG))
		{
			case 0:
			{
				//Голосование завершено.^x01 Следующая карта:^x04 %s
				colorChat(pid, CHATCOLOR_GREEN, "Голосование завершено.^x01 Следующая карта:^x04 %s", smap)
				
				//Следующая карта %s
				show_hudmessage(pid, "Следующая карта %s", smap)
			}
			case 1:
			{
				colorChat(pid, CHATCOLOR_GREEN, "Voting is finished.^x01 Nextmap:^x04 %s", smap)
				show_hudmessage(pid, "Nextmap will be %s", smap)
			}
		}
	}
	
	log_amx("Super Vote: Voting for the nextmap finished. The nextmap will be %s", smap)
}

public countVote(id, key)
{
	if(!voteStarted && forceBlock)
		return PLUGIN_HANDLED
	
	if(get_cvar_float("amx_vote_answers"))
	{
		new name[32]
		get_user_name(id, name, sizeof name -1)
		
		if(key == g_votemaps)
		{
			switch(get_cvar_num(NUM_SM_LANG))
			{
				//%s^x01 проголосовал за^x04 продление карты
				case 0: colorChat(0, CHATCOLOR_GREEN, "%s^x01 проголосовал за^x04 продление карты", name)
				case 1: colorChat(0, CHATCOLOR_GREEN, "%s^x01 chose^x04 map extending", name) 
			}
		}
		else if(key < g_votemaps)
		{
			new map[32]
			ArrayGetString(g_mapName, g_nextName[key], map, sizeof map -1)
			
			switch(get_cvar_num(NUM_SM_LANG))
			{
				//%s проголосовал за %s
				case 0: colorChat(0, CHATCOLOR_GREEN, "%s^x01 проголосовал за^x04 %s", name, map)
				case 1: colorChat(0, CHATCOLOR_GREEN, "%s^x01 chose^x04 %s", name, map)
			}
		}
		
		cmdShowResults(id+TASK_RESULT_ID)
		set_task(0.8, "cmdShowResults", id+TASK_RESULT_ID, "", 0, "b")
	}
	
	client_cmd(id, "spk UI/buttonclickrelease")
	
	g_voteCount[key]++
	PlayersVoted++
	
	return PLUGIN_HANDLED
}

public cmdShowResults(pid)
{
	static id
	id = pid-TASK_RESULT_ID
	
	if(is_user_connected(id))
	{
		static i, len, language, message[HudLen]
		
		language = get_cvar_num(NUM_SM_LANG)
		
		switch(language)
		{
			//Результаты голосования
			case 0: len = format(message, sizeof message -1, "Р*езультаты голосования^n^n")
			case 1: len = format(message, sizeof message -1, "Results of voting^n^n")
		}
		
		for(i=0;i<g_votemaps;i++)
		{
			len += format(message[len], HudLen -1, "[%d] | %a^n", g_voteCount[i], ArrayGetStringHandle(g_mapName, g_saveids[i]))
		}
		
		switch(language)
		{
			case 0:
			{
				//продливаемая
				len += format(message[len], HudLen -1, "[%d] | %s [продливаемая]^n^n", g_voteCount[i], g_currentMap)
				//Всего проголосовало: %d из %d
				len += format(message[len], HudLen -1, "Всего проголосовало: %d из %d", PlayersVoted, PlayersNum)
			}
			case 1:
			{
				len += format(message[len], HudLen -1, "[%d] | %s [prolonged]^n^n", g_voteCount[i], g_currentMap)
				len += format(message[len], HudLen -1, "In total has voted: %d from %d", PlayersVoted, PlayersNum)
			}
		}
		
		set_hudmessage(g_result_red, g_result_green, g_result_blue, 0.36, 0.3, 0, 1.0, 4.0, 0.1, 0.2, 2)
		show_hudmessage(id, "%s", message)
	}
}

public EVENT_ScreenFade(id)
{
	if(hasBlind[id])
	{
		set_task(0.6, "cmdFadeScreen", id+TASK_SCREEN_ID)
	}
}

public cmdFadeScreen(pid)
{
	new id = pid-TASK_SCREEN_ID
	
	if(is_user_connected(id))
	{
		message_begin(MSG_ONE, g_msgScreenFade, _, id)
		write_short(1<<0)	// Duration
		write_short(1<<0)	// Hold time
		write_short(1<<2)	// Fade type
		write_byte(0)		// Red
		write_byte(0)		// Green
		write_byte(0)		// Blue
		write_byte(255)		// Alpha
		message_end()
	}
}

public plugin_end()
{
	new current_map[32]
	
	set_cvar_num("sv_maxspeed", g_maxspeed)
	
	get_mapname(current_map, sizeof current_map -1)
	set_localinfo("lastMap", current_map)
}

stock bool:ValidMap(mapname[])
{
	if(is_map_valid(mapname))
	{
		return true
	}
	
	new len = strlen(mapname) -4
	
	if(len < 0)
	{
		return false
	}
	
	if(equali(mapname[len], ".bsp"))
	{
		mapname[len] = '^0'
		
		if(is_map_valid(mapname))
		{
			return true
		}
	}
	
	return false
}

loadSettings(filename[])
{
	if(!file_exists(filename))
		return 0

	new
		currentMap[32],
		szText[32],
		buff[256]
	
	get_mapname(currentMap, sizeof currentMap -1)

	new fp = fopen(filename, "r")
	
	while(!feof(fp))
	{
		buff[0] = '^0'
		
		fgets(fp, buff, sizeof buff -1)
		
		parse(buff, szText, sizeof szText -1)
		
		if((szText[0] != ';') && ValidMap(szText) && !equali(szText, g_lastMap) && !equali(szText, currentMap))
		{
			ArrayPushString(g_mapName, szText)
			
			g_mapNums++
		}
	}
	
	fclose(fp)

	return g_mapNums
}

bool:isInMenu(id)
{
	for(new a = 0; a < g_mapVoteNum; a++)
	{
		if(id == g_nextName[a])
		{
			return true
		}
	}
	
	return false
}

colorChat(id, ChatColor:color, const msg[], {Float,Sql,Result,_}:...)
{
	new team, index, MSG_Type
	new bool:teamChanged = false
	static message[192]
	
	switch(color)
	{
		case CHATCOLOR_NORMAL: // Normal
		{
			message[0] = 0x01;
		}
		case CHATCOLOR_GREEN: // Green
		{
			message[0] = 0x04;
		}
		default: // Grey, Red, Blue
		{
			message[0] = 0x03;
		}
	}
	
	vformat(message[1], 190, msg, 4);
	
	if(id == 0)
	{
		index = findAnyPlayer();
		MSG_Type = MSG_ALL;
	}
	else
	{
		index = id;
		MSG_Type = MSG_ONE;
	}
	if(index != 0)
	{
		team = get_user_team(index);	
		if(color == CHATCOLOR_RED && team != 1)
		{
			messageTeamInfo(index, MSG_Type, g_TeamName[1])
			teamChanged = true
		}
		else
		if(color == CHATCOLOR_BLUE && team != 2)
		{
			messageTeamInfo(index, MSG_Type, g_TeamName[2])
			teamChanged = true
		}
		else
		if(color == CHATCOLOR_GREY && team != 0)
		{
			messageTeamInfo(index, MSG_Type, g_TeamName[0])
			teamChanged = true
		}
		messageSayText(index, MSG_Type, message);
		if(teamChanged)
		{
			messageTeamInfo(index, MSG_Type, g_TeamName[team])
		}
	}
}

messageSayText(id, type, message[])
{
	message_begin(type, g_msgSayText, _, id)
	write_byte(id)		
	write_string(message)
	message_end()
}
	
messageTeamInfo(id, type, team[])
{
	message_begin(type, g_msgTeamInfo, _, id)
	write_byte(id)
	write_string(team)
	message_end()
}
	
findAnyPlayer()
{
	static players[32], inum, pid
	
	get_players(players, inum, "ch")
	
	for (new a = 0; a < inum; a++)
	{
		pid = players[a]
		if(is_user_connected(pid))
			return pid
	}
	
	return 0
}
Guys I really need halp, this is very good plugin, but is miss a lot of things like /rtv and nominations. Please take a look. I think it's cool.

Last edited by TRUE RED; 03-19-2012 at 03:20. Reason: Added code tags
TRUE RED is offline
Send a message via ICQ to TRUE RED Send a message via Skype™ to TRUE RED
quark
Veteran Member
Join Date: Oct 2011
Location: Your mind.
Old 03-18-2012 , 19:39   Re: super-mapchooser
Reply With Quote #2

Remove long code and upload sma!
__________________

Check out My Plugins:
qServerInfo ; ASKTAG
quark is offline
fysiks
Veteran Member
Join Date: Sep 2007
Location: Flatland, USA
Old 03-18-2012 , 21:21   Re: super-mapchooser
Reply With Quote #3

Quote:
Originally Posted by TRUE RED View Post
Guys I really need halp, this is very good plugin, but is miss a lot of things like /rtv and nominations. Please take a look. I think it's cool.
What exactly do you need help with. In the Scripting Help forum we don't just do things for you. We can give you some advice then you write the code. Most of the time you need to first search for examples of what you are looking for. Study them and see how they work. Then, try and implement it in your own code. If you have honestly put all your effort into it and still can't get it working then you can post here and ask for help.

As the previous poster said, attach the .sma file instead of posting the code in plain text.
__________________
fysiks is offline
TRUE RED
Senior Member
Join Date: Mar 2012
Location: Ukraine
Old 03-19-2012 , 01:10   Re: super-mapchooser
Reply With Quote #4

Ok. Here you go. If somebody interested in it take a look.
Attached Files
File Type: sma Get Plugin or Get Source (super_mapchooser.sma - 567 views - 17.4 KB)
TRUE RED is offline
Send a message via ICQ to TRUE RED Send a message via Skype™ to TRUE RED
fysiks
Veteran Member
Join Date: Sep 2007
Location: Flatland, USA
Old 03-19-2012 , 02:15   Re: super-mapchooser
Reply With Quote #5

Quote:
Originally Posted by fysiks View Post
What exactly do you need help with?
__________________
fysiks is offline
TRUE RED
Senior Member
Join Date: Mar 2012
Location: Ukraine
Old 03-19-2012 , 02:35   Re: super-mapchooser
Reply With Quote #6

I would like to add rtv and nominations. I think it could be the best vote map plugin. It's really good designed what do you think. I can post print screen later just for checking it out... How about the code, is it clear enough?
TRUE RED is offline
Send a message via ICQ to TRUE RED Send a message via Skype™ to TRUE RED
Xvil
BANNED
Join Date: Feb 2012
Old 03-19-2012 , 02:59   Re: super-mapchooser
Reply With Quote #7

Rocket the Vote Plugin is Already Made.

Last edited by Xvil; 03-19-2012 at 03:00.
Xvil is offline
TRUE RED
Senior Member
Join Date: Mar 2012
Location: Ukraine
Old 03-19-2012 , 03:11   Re: super-mapchooser
Reply With Quote #8

Can you post the link to that rock the vote plugin? Anyway, I mean to make one large plugin that will have all this options
TRUE RED is offline
Send a message via ICQ to TRUE RED Send a message via Skype™ to TRUE RED
TRUE RED
Senior Member
Join Date: Mar 2012
Location: Ukraine
Old 03-19-2012 , 12:25   Re: super-mapchooser
Reply With Quote #9

I would like to have /rtv in this plugin, that will do the next map vote like this plugin do when time is left. And put it in one plugin. Please help!
TRUE RED is offline
Send a message via ICQ to TRUE RED Send a message via Skype™ to TRUE RED
fysiks
Veteran Member
Join Date: Sep 2007
Location: Flatland, USA
Old 03-19-2012 , 19:38   Re: super-mapchooser
Reply With Quote #10

Nominations is not an easy thing to add.

Also, there are many plugins that already have both nominations and rtv already built in. Use one of those because it is highly unlikely that you will find someone to add those things for you (for free).

Also, if you are not going to write the code then you should be posting requests in the "Suggestions/Requests" forum.
__________________
fysiks is offline
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 03:38.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode