Simple Menu Builder

Одобрените от нас плъгини. Моля, докладвайте ако забележите бъг с някой от плъгините в този раздел.
Аватар
deadlylord
Извън линия
Потребител
Потребител
Мнения: 572
Регистриран на: 04 Апр 2017, 16:35
Местоположение: Бургас, България
Получена благодарност: 2 пъти
Обратна връзка:

Simple Menu Builder

Мнение от deadlylord » 30 Сеп 2017, 22:44

А с проблема с #blank 1, където функциите не работят, има ли някаква яснота дали се работи по този проблем от amxx
Последно промяна от deadlylord на 01 Окт 2017, 20:08, променено общо 1 път.

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

Simple Menu Builder

Мнение от OciXCrom » 01 Окт 2017, 15:06

Това не е правилно. Вероятно ти изкарва грешка в конзолата. С do.func можеш да ползваш public функция, която я има в някой плъгин, и то от вида на function(id), а не натив с параметър за меню. Примерно можеш да направиш функция:

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

public player_close_menu(id)
    menu_cancel(id)
... и във файла да добавиш "Exit" "do.func(myplugin.amxx, player_close_menu)". Обаче със slot10 би трябвало да стане.

За проблема не съм много сигурен какво се случва. Вероятно е оправен в AMXX 1.8.3, тъй като са добавили menu_addblank2 и menu_addtext2 функции, обаче при тези няма опция да не се променят числата в менюто, което не ми харесва.

Аватар
deadlylord
Извън линия
Потребител
Потребител
Мнения: 572
Регистриран на: 04 Апр 2017, 16:35
Местоположение: Бургас, България
Получена благодарност: 2 пъти
Обратна връзка:

Simple Menu Builder

Мнение от deadlylord » 01 Окт 2017, 20:08

@OciXCrom™ Благодаря! Но дори и когато ползвам правилния начин, излиза следната грешка:

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

L 10/01/2017 - 20:11:55: callfunc_push_xxx called without callfunc_begin
L 10/01/2017 - 20:11:55: [AMXX] Displaying debug trace (plugin "crx_simplemenu.amxx")
L 10/01/2017 - 20:11:55: [AMXX] Run time error 10: native error (native "callfunc_push_int")
L 10/01/2017 - 20:11:55: [AMXX]    [0] crx_simplemenu.sma::handlerMain (line 467) 
.сма

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

#include <amxmodx>
#include <amxmisc>

#define PLUGIN_VERSION "2.1"
#define MAX_MENUS 20

enum
{
	SECTION_DEFAULTS = 0,
	SECTION_SETTINGS,
	SECTION_MENUITEMS
}

enum _:Settings
{
	MENU_TITLE[128],
	MENU_TITLE_PAGE[128],
	MENU_PREFIX[32],
	MENU_BACKK[32],
	MENU_NEXT[32],
	MENU_EXITT[32],
	MENU_FLAG,
	MENU_TEAM,
	MENU_ALIVEONLY,
	MENU_ITEMS_PER_PAGE,
	MENU_REOPEN,
	MENU_ITEM_FORMAT[64],
	MENU_NOACCESS[160],
	MENU_NOTEAM[160],
	MENU_ALIVE[160],
	MENU_DEAD[160],
	MENU_SOUND[128]
}

enum _:Items
{
	Name[64],
	Command[32],
	Flag[5],
	Team,
	bool:UseFunc,
	Plugin[64],
	Function[64]
}

new g_eDefaults[Settings],
	g_eSettings[MAX_MENUS][Settings],
	g_iTotalItems[MAX_MENUS],
	g_szMap[32],
	g_msgSayText
	
new Trie:g_tCommands,
	Array:g_aMenuItems[MAX_MENUS]

new const g_szAll[] = "#all"
new const g_szItemField[] = "%item%"
new const g_szNameField[] = "%name%"
new const g_szUserIdField[] = "%userid%"
new const g_szBlankField[] = "#blank"
new const g_szTextField[] = "#text"
new const g_szPlayersField[] = "#addplayers"
new const g_szFunc[] = "do.func"
new const g_szAMXX[] = ".amxx"
new const g_szNewLine[2][] = { "%newline%", "^n" }
new const g_szSayStuff[2][] = { "say ", "say_team " }

public plugin_init()
{
	register_plugin("Simple Menu", PLUGIN_VERSION, "OciXCrom")
	register_cvar("SimpleMenu", PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED)
	g_msgSayText = get_user_msgid("SayText")
}

public plugin_precache()
{
	for(new i; i < MAX_MENUS; i++)
		g_aMenuItems[i] = ArrayCreate(Items)
		
	get_mapname(g_szMap, charsmax(g_szMap))
	g_tCommands = TrieCreate()
	fileRead()
}

public plugin_end()
{
	for(new i; i < MAX_MENUS; i++)
		ArrayDestroy(g_aMenuItems[i])
		
	TrieDestroy(g_tCommands)
}

fileRead()
{
	new szConfigsName[256], szFilename[256]
	get_configsdir(szConfigsName, charsmax(szConfigsName))
	formatex(szFilename, charsmax(szFilename), "%s/SimpleMenu.ini", szConfigsName)
	new iFilePointer = fopen(szFilename, "rt")
	
	if(iFilePointer)
	{
		new szData[160], szKey[32], szValue[128], szTeam[2], iSection, iSize
		new eItem[Items], iMenuId = -1, bool:blRead = true
		
		while(!feof(iFilePointer))
		{
			fgets(iFilePointer, szData, charsmax(szData))
			trim(szData)
			
			switch(szData[0])
			{
				case EOS, ';': continue
				case '-':
				{
					iSize = strlen(szData)
					
					if(szData[iSize - 1] == '-')
					{
						szData[0] = ' '
						szData[iSize - 1] = ' '
						trim(szData)
						
						if(contain(szData, "*") != -1)
						{
							strtok(szData, szKey, charsmax(szKey), szValue, charsmax(szValue), '*')
							copy(szValue, strlen(szKey), g_szMap)
							blRead = equal(szValue, szKey) ? true : false
						}
						else
							blRead = equal(szData, g_szAll) || equali(szData, g_szMap)
					}
					else continue
				}
				case '[':
				{
					if(szData[strlen(szData) - 1] == ']')
					{
						if(containi(szData, "default settings") != -1)
							iSection = SECTION_DEFAULTS
						else if(containi(szData, "new menu") != -1)
						{
							iMenuId++
							
							for(new i; i < sizeof(g_eDefaults); i++)
								g_eSettings[iMenuId][i] = g_eDefaults[i]
						}
						else if(containi(szData, "menu settings") != -1)
						{
							if(iMenuId < 0)
								iMenuId = 0
								
							iSection = SECTION_SETTINGS
						}
						else if(containi(szData, "menu items") != -1)
						{
							if(iMenuId < 0)
								iMenuId = 0
								
							iSection = SECTION_MENUITEMS
						}
					}
					else continue
				}
				default:
				{
					if(!blRead)
						continue
						
					switch(iSection)
					{
						case SECTION_DEFAULTS:
						{
							strtok(szData, szKey, charsmax(szKey), szValue, charsmax(szValue), '=')
							trim(szKey); trim(szValue)
							
							if(szValue[0] == EOS)
								continue
							
							if(equal(szKey, "MENU_TITLE"))
							{
								if(contain(szValue, g_szNewLine[0]) != -1)
									replace_all(szValue, charsmax(szValue), g_szNewLine[0], g_szNewLine[1])
									
								copy(g_eDefaults[MENU_TITLE], charsmax(g_eDefaults[MENU_TITLE]), szValue)
							}
							if(equal(szKey, "MENU_TITLE_PAGE"))
							{
								if(contain(szValue, g_szNewLine[0]) != -1)
									replace_all(szValue, charsmax(szValue), g_szNewLine[0], g_szNewLine[1])
									
								copy(g_eDefaults[MENU_TITLE_PAGE], charsmax(g_eDefaults[MENU_TITLE_PAGE]), szValue)
							}
							else if(equal(szKey, "MENU_PREFIX"))
								copy(g_eDefaults[MENU_PREFIX], charsmax(g_eDefaults[MENU_PREFIX]), szValue)
							else if(equal(szKey, "MENU_BACK"))
								copy(g_eDefaults[MENU_BACKK], charsmax(g_eDefaults[MENU_BACKK]), szValue)
							else if(equal(szKey, "MENU_NEXT"))
								copy(g_eDefaults[MENU_NEXT], charsmax(g_eDefaults[MENU_NEXT]), szValue)
							else if(equal(szKey, "MENU_EXIT"))
								copy(g_eDefaults[MENU_EXITT], charsmax(g_eDefaults[MENU_EXITT]), szValue)
							else if(equal(szKey, "MENU_FLAG"))
								g_eDefaults[MENU_FLAG] = szValue[0] == '0' ? 0 : read_flags(szValue)
							else if(equal(szKey, "MENU_TEAM"))
								g_eDefaults[MENU_TEAM] = clamp(str_to_num(szValue), 0, 3)
							else if(equal(szKey, "MENU_ALIVEONLY"))
								g_eDefaults[MENU_ALIVEONLY] = str_to_num(szValue)
							else if(equal(szKey, "MENU_ITEMS_PER_PAGE"))
								g_eDefaults[MENU_ITEMS_PER_PAGE] = str_to_num(szValue)
							else if(equal(szKey, "MENU_REOPEN"))
								g_eDefaults[MENU_REOPEN] = str_to_num(szValue)
							else if(equal(szKey, "MENU_ITEM_FORMAT"))
								copy(g_eDefaults[MENU_ITEM_FORMAT], charsmax(g_eDefaults[MENU_ITEM_FORMAT]), szValue)
							else if(equal(szKey, "MENU_NOACCESS"))
								copy(g_eDefaults[MENU_NOACCESS], charsmax(g_eDefaults[MENU_NOACCESS]), szValue)
							else if(equal(szKey, "MENU_NOTEAM"))
								copy(g_eDefaults[MENU_NOTEAM], charsmax(g_eDefaults[MENU_NOTEAM]), szValue)
							else if(equal(szKey, "MENU_ALIVE"))
								copy(g_eDefaults[MENU_ALIVE], charsmax(g_eDefaults[MENU_ALIVE]), szValue)
							else if(equal(szKey, "MENU_DEAD"))
								copy(g_eDefaults[MENU_DEAD], charsmax(g_eDefaults[MENU_DEAD]), szValue)
							else if(equal(szKey, "MENU_SOUND"))
							{
								copy(g_eDefaults[MENU_SOUND], charsmax(g_eDefaults[MENU_SOUND]), szValue)
								precache_sound(szValue)
							}
						}
						case SECTION_SETTINGS:
						{
							strtok(szData, szKey, charsmax(szKey), szValue, charsmax(szValue), '=')
							trim(szKey); trim(szValue)
							
							if(szValue[0] == EOS)
								continue
							
							if(equal(szKey, "MENU_TITLE"))
							{
								if(contain(szValue, g_szNewLine[0]) != -1)
									replace_all(szValue, charsmax(szValue), g_szNewLine[0], g_szNewLine[1])
									
								copy(g_eSettings[iMenuId][MENU_TITLE], charsmax(g_eSettings[][MENU_TITLE]), szValue)
							}
							if(equal(szKey, "MENU_TITLE_PAGE"))
							{
								if(contain(szValue, g_szNewLine[0]) != -1)
									replace_all(szValue, charsmax(szValue), g_szNewLine[0], g_szNewLine[1])
									
								copy(g_eSettings[iMenuId][MENU_TITLE_PAGE], charsmax(g_eSettings[][MENU_TITLE_PAGE]), szValue)
							}
							else if(equal(szKey, "MENU_PREFIX"))
								copy(g_eSettings[iMenuId][MENU_PREFIX], charsmax(g_eSettings[][MENU_PREFIX]), szValue)
							else if(equal(szKey, "MENU_BACK"))
								copy(g_eSettings[iMenuId][MENU_BACKK], charsmax(g_eSettings[][MENU_BACKK]), szValue)
							else if(equal(szKey, "MENU_NEXT"))
								copy(g_eSettings[iMenuId][MENU_NEXT], charsmax(g_eSettings[][MENU_NEXT]), szValue)
							else if(equal(szKey, "MENU_EXIT"))
								copy(g_eSettings[iMenuId][MENU_EXITT], charsmax(g_eSettings[][MENU_EXITT]), szValue)
							else if(equal(szKey, "MENU_FLAG"))
								g_eSettings[iMenuId][MENU_FLAG] = szValue[0] == '0' ? 0 : read_flags(szValue)
							else if(equal(szKey, "MENU_TEAM"))
								g_eSettings[iMenuId][MENU_TEAM] = clamp(str_to_num(szValue), 0, 3)
							else if(equal(szKey, "MENU_ALIVEONLY"))
								g_eSettings[iMenuId][MENU_ALIVEONLY] = str_to_num(szValue)
							else if(equal(szKey, "MENU_ITEMS_PER_PAGE"))
								g_eSettings[iMenuId][MENU_ITEMS_PER_PAGE] = str_to_num(szValue)
							else if(equal(szKey, "MENU_REOPEN"))
								g_eSettings[iMenuId][MENU_REOPEN] = str_to_num(szValue)
							else if(equal(szKey, "MENU_OPEN"))
							{
								while(szValue[0] != 0 && strtok(szValue, szKey, charsmax(szKey), szValue, charsmax(szValue), ','))
								{
									trim(szKey); trim(szValue)
									register_clcmd(szKey, "cmdMenu")
									TrieSetCell(g_tCommands, szKey, iMenuId)
								}
							}
							else if(equal(szKey, "MENU_ITEM_FORMAT"))
								copy(g_eSettings[iMenuId][MENU_ITEM_FORMAT], charsmax(g_eSettings[][MENU_ITEM_FORMAT]), szValue)
							else if(equal(szKey, "MENU_NOACCESS"))
								copy(g_eSettings[iMenuId][MENU_NOACCESS], charsmax(g_eSettings[][MENU_NOACCESS]), szValue)
							else if(equal(szKey, "MENU_NOTEAM"))
								copy(g_eSettings[iMenuId][MENU_NOTEAM], charsmax(g_eSettings[][MENU_NOTEAM]), szValue)
							else if(equal(szKey, "MENU_ALIVE"))
								copy(g_eSettings[iMenuId][MENU_ALIVE], charsmax(g_eSettings[][MENU_ALIVE]), szValue)
							else if(equal(szKey, "MENU_DEAD"))
								copy(g_eSettings[iMenuId][MENU_DEAD], charsmax(g_eSettings[][MENU_DEAD]), szValue)
							else if(equal(szKey, "MENU_SOUND"))
							{
								copy(g_eSettings[iMenuId][MENU_SOUND], charsmax(g_eSettings[][MENU_SOUND]), szValue)
								precache_sound(szValue)
							}
						}
						case SECTION_MENUITEMS:
						{
							parse(szData, eItem[Name], charsmax(eItem[Name]), eItem[Command], charsmax(eItem[Command]), eItem[Flag], charsmax(eItem[Flag]), szTeam, charsmax(szTeam))
							eItem[UseFunc] = bool:(equal(eItem[Command], g_szFunc, charsmax(g_szFunc)))
							eItem[Team] = str_to_num(szTeam)
							
							if(eItem[UseFunc])
							{
								replace(eItem[Command], charsmax(eItem[Command]), g_szFunc, "")
								replace(eItem[Command], charsmax(eItem[Command]), "(", "")
								replace(eItem[Command], charsmax(eItem[Command]), ")", "")
								strtok(eItem[Command], eItem[Plugin], charsmax(eItem[Plugin]), eItem[Function], charsmax(eItem[Function]), ',')
								trim(eItem[Plugin]); trim(eItem[Function])
								
								if(contain(eItem[Plugin], g_szAMXX) == -1)
									add(eItem[Plugin], charsmax(eItem[Plugin]), g_szAMXX)
							}
							
							ArrayPushArray(g_aMenuItems[iMenuId], eItem)
							eItem[Flag][0] = EOS
							szTeam[0] = EOS
							g_iTotalItems[iMenuId]++
						}
					}
				}
			}			
		}
		
		fclose(iFilePointer)
	}
}

public cmdMenu(id)
{
	new szCommand[64], szArgs[32], iMenuId
	read_argv(0, szCommand, charsmax(szCommand))
	
	if(equal(szCommand[0], g_szSayStuff[0], 3) || equal(szCommand[0], g_szSayStuff[1], 8))
	{
		read_argv(1, szArgs, charsmax(szArgs))
		remove_quotes(szArgs)
		format(szCommand, charsmax(szCommand), "%s %s", szCommand, szArgs)
	}
	
	TrieGetCell(g_tCommands, szCommand, iMenuId)
	menuMain(id, iMenuId)
	return PLUGIN_HANDLED
}

menuMain(id, iMenuId, iPage = 0)
{
	if(g_eSettings[iMenuId][MENU_FLAG] && !(get_user_flags(id) & g_eSettings[iMenuId][MENU_FLAG]))
	{
		ColorChat(id, "%s %s", g_eSettings[iMenuId][MENU_PREFIX], g_eSettings[iMenuId][MENU_NOACCESS])
		return PLUGIN_HANDLED
	}
	
	if(!get_team_access(id, iMenuId))
	{
		ColorChat(id, "%s %s", g_eSettings[iMenuId][MENU_PREFIX], g_eSettings[iMenuId][MENU_NOTEAM])
		return PLUGIN_HANDLED
	}
	
	if(!get_alive_access(id, iMenuId))
	{
		ColorChat(id, "%s %s", g_eSettings[iMenuId][MENU_PREFIX], g_eSettings[iMenuId][MENU_ALIVEONLY] == 1 ? g_eSettings[iMenuId][MENU_ALIVE] : g_eSettings[iMenuId][MENU_DEAD])
		return PLUGIN_HANDLED
	}
	
	if(g_eSettings[iMenuId][MENU_SOUND][0] != EOS)
		client_cmd(id, "spk %s", g_eSettings[iMenuId][MENU_SOUND])
	
	new szItem[128], szData[20]
	new eItem[Items], iMenu = menu_create(g_eSettings[iMenuId][MENU_TITLE], "handlerMain")
	
	for(new i, iTeam = get_user_team(id); i < g_iTotalItems[iMenuId]; i++)
	{
		ArrayGetArray(g_aMenuItems[iMenuId], i, eItem)
		
		if(eItem[Team] && eItem[Team] != iTeam)
			continue
		else if(equal(eItem[Name], g_szBlankField))
			menu_addblank(iMenu, str_to_num(eItem[Command]))
		else if(equal(eItem[Name], g_szTextField))
			menu_addtext(iMenu, eItem[Command], str_to_num(eItem[Flag]))
		else if(equal(eItem[Name], g_szPlayersField))
		{
			new szName[32], iPlayers[32], iPnum
			get_players(iPlayers, iPnum, get_flag(eItem[Flag], "c") ? "a" : "")
			
			for(new j, iPlayer; j < iPnum; j++)
			{
				iPlayer = iPlayers[j]
				
				if(iPlayer == id)
				{
					if(!get_flag(eItem[Flag], "b"))
						continue
				}
				else if(get_user_flags(iPlayer) & ADMIN_IMMUNITY)
				{
					if(get_flag(eItem[Flag], "a"))
						continue
				}

				get_user_name(iPlayer, szName, charsmax(szName))
				copy(szItem, charsmax(szItem), g_eSettings[iMenuId][MENU_ITEM_FORMAT])
				replace_all(szItem, charsmax(szItem), g_szItemField, szName)
				formatex(szData, charsmax(szData), "%i %i %i p", iMenuId, i, get_user_userid(iPlayer))
				menu_additem(iMenu, szItem, szData)
			}
		}
		else
		{
			copy(szItem, charsmax(szItem), g_eSettings[iMenuId][MENU_ITEM_FORMAT])
			replace_all(szItem, charsmax(szItem), g_szItemField, eItem[Name])
			formatex(szData, charsmax(szData), "%i %i", iMenuId, i)
			menu_additem(iMenu, szItem, szData, read_flags(eItem[Flag]))
		}
	}
	
	if(menu_pages(iMenu) > 1)
	{
		new szTitle[256]
		formatex(szTitle, charsmax(szTitle), "%s %s", g_eSettings[iMenuId][MENU_TITLE], g_eSettings[iMenuId][MENU_TITLE_PAGE])
		menu_setprop(iMenu, MPROP_TITLE, szTitle)
	}
	
	menu_setprop(iMenu, MPROP_BACKNAME, g_eSettings[iMenuId][MENU_BACKK])
	menu_setprop(iMenu, MPROP_NEXTNAME, g_eSettings[iMenuId][MENU_NEXT])
	menu_setprop(iMenu, MPROP_EXITNAME, g_eSettings[iMenuId][MENU_EXITT])
	menu_setprop(iMenu, MPROP_PERPAGE, g_eSettings[iMenuId][MENU_ITEMS_PER_PAGE])
	menu_display(id, iMenu, iPage)
	return PLUGIN_HANDLED
}

public handlerMain(id, iMenu, iItem)
{
	if(iItem == MENU_EXIT)
		goto @DESTROY
		
	new szData[20], szMenuId[3], szKey[3], szUserId[5], iMenuId, iKey, iUserId, iAccess, iCallback
	menu_item_getinfo(iMenu, iItem, iAccess, szData, charsmax(szData), .callback = iCallback)
	parse(szData, szMenuId, charsmax(szMenuId), szKey, charsmax(szKey), szUserId, charsmax(szUserId))
	
	iMenuId = str_to_num(szMenuId)
	iKey = str_to_num(szKey)
	iUserId = str_to_num(szUserId)
	
	if(get_alive_access(id, iMenuId) && get_team_access(id, iMenuId))
	{
		new eItem[Items]
		ArrayGetArray(g_aMenuItems[iMenuId], iKey, eItem)
		
		if(szData[strlen(szData) - 1] == 'p')
		{
			new szCommand[64]
			copy(szCommand, charsmax(szCommand), eItem[Command])
			
			if(get_flag(szCommand, g_szNameField))
			{
				new szName[32]
				get_user_name(find_player("k", iUserId), szName, charsmax(szName))
				replace_all(szCommand, charsmax(szCommand), g_szNameField, szName)
			}
			
			if(get_flag(szCommand, g_szUserIdField))
				replace_all(szCommand, charsmax(szCommand), g_szUserIdField, szUserId)
				
			client_cmd(id, szCommand)
		}
		else
		{
			if(eItem[UseFunc])
			{
				callfunc_begin(eItem[Function], eItem[Plugin])
				callfunc_push_int(id)
				callfunc_end()
			}
			else
				client_cmd(id, eItem[Command])
		}
	}
	
	if(g_eSettings[iMenuId][MENU_REOPEN])
	{
		new iMenu2, iPage
		player_menu_info(id, iMenu2, iMenu2, iPage)
		menu_destroy(iMenu)
		menuMain(id, iMenuId, iPage)
		return PLUGIN_HANDLED
	}
	
	@DESTROY:	
	menu_destroy(iMenu)
	return PLUGIN_HANDLED
}

ColorChat(const id, const szInput[], any:...)
{
	new iPlayers[32], iCount = 1
	static szMessage[191]
	vformat(szMessage, charsmax(szMessage), szInput, 3)
	
	replace_all(szMessage, charsmax(szMessage), "!g", "^4")
	replace_all(szMessage, charsmax(szMessage), "!n", "^1")
	replace_all(szMessage, charsmax(szMessage), "!t", "^3")
	
	if(id)
		iPlayers[0] = id
	else
		get_players(iPlayers, iCount, "ch")
	
	for(new i; i < iCount; i++)
	{
		if(is_user_connected(iPlayers[i]))
		{
			message_begin(MSG_ONE_UNRELIABLE, g_msgSayText, _, iPlayers[i])
			write_byte(iPlayers[i])
			write_string(szMessage)
			message_end()
		}
	}
}

bool:get_flag(szString[], const szFlag[])
	return (contain(szString, szFlag) != -1) ? true : false

bool:get_alive_access(id, iMenuId)
	return ((g_eSettings[iMenuId][MENU_ALIVEONLY] == 1 && !is_user_alive(id)) || (g_eSettings[iMenuId][MENU_ALIVEONLY] == 2 && is_user_alive(id))) ? false : true

bool:get_team_access(id, iMenuId)
	return (!g_eSettings[iMenuId][MENU_TEAM] || g_eSettings[iMenuId][MENU_TEAM] == get_user_team(id))
	
public player_close_menu(id)
    menu_cancel(id)

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

Simple Menu Builder

Мнение от OciXCrom » 03 Окт 2017, 20:46

Проблемът е бил в дългото име на функцията. Увеличих го на 32.

Аватар
LoShIaA
Извън линия
Потребител
Потребител
Мнения: 323
Регистриран на: 20 Окт 2016, 14:44
Местоположение: Стара Загора
Се отблагодари: 120 пъти
Получена благодарност: 9 пъти

Simple Menu Builder

Мнение от LoShIaA » 10 Окт 2017, 12:09

Някой може ли с няколко прости примера да обясни как се прави подменю и как се използват #blank, #addplayers къде точно се пишат.
Ще пиша малко някви примери да ми обясните по тях някой неща.
Това са настройките на плъгина, които съм барал малко:
  • MENU_TITLE = Help Menu
    MENU_TITLE_PAGE = %newline%Page:\d
    MENU_BACK = \yPrevious Page
    MENU_NEXT = \yNext Page
    MENU_EXIT = \rClose
    MENU_OPEN = chooseteam, say /menu, say_team /menu
    MENU_FLAG = 0
    MENU_TEAM = 0
    MENU_ALIVEONLY = 0
    MENU_ITEMS_PER_PAGE = 7
    MENU_REOPEN = 1
    MENU_ITEM_FORMAT = %item% - тук освен item може ли да има друга функция
    MENU_PREFIX = !g[!tHelp Menu!g]
    MENU_NOACCESS = !gYou have !tno !gaccess to this menu.
    MENU_NOTEAM = !gYour team !tisn't !gallowed to use this menu.
    MENU_ALIVE = !gYou need to be !talive !gto use this menu.
    MENU_DEAD = !gYou need to be !tdead !gto use this menu.
    MENU_SOUND =
След това пиша:
[New Menu = My Menu] - има ли някакви настройки за този ред? Или той просто си е за създаване на ново меню и толкова?

Следва:
[Menu Settings]
1. Всички тези настройки ли се отнасят за този раздел?
  • MENU_TITLE = Help Menu
    MENU_TITLE_PAGE = %newline%Page:\d
    MENU_BACK = \yPrevious Page
    MENU_NEXT = \yNext Page
    MENU_EXIT = \rClose
    MENU_OPEN = chooseteam, say /menu, say_team /menu
    MENU_FLAG = 0
    MENU_TEAM = 0
    MENU_ALIVEONLY = 0
    MENU_ITEMS_PER_PAGE = 7
    MENU_REOPEN = 1
    MENU_ITEM_FORMAT = %item%
    MENU_PREFIX = !g[!tHelp Menu!g]
    MENU_NOACCESS = !gYou have !tno !gaccess to this menu.
    MENU_NOTEAM = !gYour team !tisn't !gallowed to use this menu.
    MENU_ALIVE = !gYou need to be !talive !gto use this menu.
    MENU_DEAD = !gYou need to be !tdead !gto use this menu.
    MENU_SOUND =
2.Тук пише това
Имайте предвид, че няма нужда да добавяте дадена настройка, ако искате тя да е съща като тази от настройките по подразбиране.Длъжни сте да добавите настройката MENU_OPEN.

Обаче, ако не добавя това:
  • MENU_TITLE = Help Menu - менюто остава без име
    MENU_TITLE_PAGE = %newline%Page:\d - няма страници
    MENU_BACK = \yPrevious Page - изчезва
    MENU_NEXT = \yNext Page - изчезва
    MENU_EXIT = \rClose - изчезва
    MENU_ITEMS_PER_PAGE = 7 - итемите стават колкото могат
    MENU_ITEM_FORMAT = %item% - нищо, че го има в настройките горе, менюто остава без текст
Мисълта ми тук е че не взима стойностите, които са зададени в настройките по-горе.

[Menu Items] - стигаме и до тук
Пример:
  • ;<Item Name> <Command> [Flag] [Team]
    "Show Rules" "say /rules"
    "Admin Menu" "say /admin"
    "Mute Menu" "say /mutemenu"
    "Hats Menu" "say /hat"
    "AWP Menu" "say /awp" "b"
    "Spec Menu " ????" "b"
1.Какъв е синтаксисът на #blank, #addplayers къде се поставят между редовете, на края на редът и т.н.
2.Как на това "Spec Menu" да му направя подменю. Използвам плъгина на Крома /spec, /back, /change и искам като се натисне "Spec Menu" да ти отваря ново меню в, което да са изредени въпросните команди 1.Spec, 2.Back, 3.Change.
Ако може да обясните с примери ще е супер.

Аватар
deadlylord
Извън линия
Потребител
Потребител
Мнения: 572
Регистриран на: 04 Апр 2017, 16:35
Местоположение: Бургас, България
Получена благодарност: 2 пъти
Обратна връзка:

Simple Menu Builder

Мнение от deadlylord » 10 Окт 2017, 12:55

[New Menu = Menu Sample] - този ред ти позволява да създадеш новото под меню

[Menu Settings]
;<settings> = <value>

MENU_OPEN = say /specmenu

[Menu Items]
;<Item Name> <Command> [Flag] [Team]

"Join spectator" "say /spec"
"Return to game" "say /back"
"Change your team" "say /change"
"\yPrevious Page" "say /menu"

И когато си направил под менюто, можеш да го добавиш и в главното меню

;<Item Name> <Command> [Flag] [Team]
"Show Rules" "say /rules"
"Admin Menu" "say /admin"
"Mute Menu" "say /mutemenu"
"Hats Menu" "say /hat"
"AWP Menu" "say /awp" "b"
"Spec Menu " "say /specmenu" "b"

За #blank, #addplayers и другите се поставят на нов ред

Аватар
LoShIaA
Извън линия
Потребител
Потребител
Мнения: 323
Регистриран на: 20 Окт 2016, 14:44
Местоположение: Стара Загора
Се отблагодари: 120 пъти
Получена благодарност: 9 пъти

Simple Menu Builder

Мнение от LoShIaA » 10 Окт 2017, 14:47

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

[New menu = Spec Menu] 
[Menu Settings]
MENU_OPEN = say /specmenu

[Menu Items]
"Join spectator" "say /spec"
"Return to game" "say /back"
"Change your team" "say /change"
"\yPrevious Page" "say /menu"

[Help Menu] 
[Menu Settings]
MENU_TITLE = Help Menu
MENU_TITLE_PAGE = %newline%Page:\d
MENU_BACK = \yPrevious Page
MENU_NEXT = \yNext Page
MENU_EXIT = \rClose
MENU_OPEN = chooseteam, say /menu, say_team /menu
MENU_FLAG = 0
MENU_TEAM = 0
MENU_ALIVEONLY = 0
MENU_ITEMS_PER_PAGE = 7
MENU_REOPEN = 0
MENU_ITEM_FORMAT = %item%
MENU_PREFIX = !g[!tHelp Menu!g]
MENU_NOACCESS = !gYou have !tno !gaccess to this menu.
MENU_NOTEAM = !gYour team !tisn't !gallowed to use this menu.
MENU_ALIVE = !gYou need to be !talive !gto use this menu.
MENU_DEAD = !gYou need to be !tdead !gto use this menu.
MENU_SOUND =

[Menu Items]
;<Item Name> <Command> [Flag] [Team]
"Show Rules" "say /rules"
"Shop Menu" "say /shop"
"Our Servers" "say /server"
"Admin Menu" "say /admin"
"Mute Menu" "say /mutemenu"
"Hats Menu" "say /hat"
"AWP Menu" "say /awp"
"Knifes Menu" "say /knife"
"Camera Menu" "say /cam"
"Reset Score" "say /rs"
"Show IP" "say /showip"
"Death Note" "say /dn" "b"
"Spec Menu" "say /specmenu" "b"
Слагам в тоя таг, че да е по-мъничко. Пробвах така нищо не стана. Менюто остана едно, а новите команди се добавиха най-отгоре. Също така как мога да добавя команда, която отваря меню след като се напише в конзола. Примерно amx_gagmenu

Аватар
deadlylord
Извън линия
Потребител
Потребител
Мнения: 572
Регистриран на: 04 Апр 2017, 16:35
Местоположение: Бургас, България
Получена благодарност: 2 пъти
Обратна връзка:

Simple Menu Builder

Мнение от deadlylord » 10 Окт 2017, 15:09

Новото меню трябва да се добави най-отдолу ...

За gag/ban/slap менютата, можеш да използваш следните команди
"Kick Player" "amx_kickmenu",
"Ban Player" "amx_banmenu",
"Slap /Slay Player "amx_slapmenu",
"Gag Player" "amx_gagmenu",
"Change Map" "amx_mapmenu",
"Vote for maps" "amx_votemapmenu"

А пък, ако искаш да ти отваря стандартното меню, можеш да напишеш "AMX Mod X Menu" "amxmodmenu"

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

[Default Settings]
;These are the default settings for each menu created.
;You can add certain options in [Menu Settings] if you want to change them.
;Please note that every menu needs to have a different MENU_OPEN settings, therefore there's no default one.

MENU_TITLE = Help Menu
MENU_TITLE_PAGE = %newline%Page:\d
MENU_BACK = \yPrevious Page
MENU_NEXT = \yNext Page
MENU_EXIT = \rClose
;MENU_OPEN = chooseteam, say /menu, say_team /menu
MENU_FLAG = 0
MENU_TEAM = 0
MENU_ALIVEONLY = 0
MENU_ITEMS_PER_PAGE = 7
MENU_REOPEN = 1
MENU_ITEM_FORMAT = %item%
MENU_PREFIX = !g[!tHelp Menu!g]
MENU_NOACCESS = !gYou have !tno !gaccess to this menu.
MENU_NOTEAM = !gYour team !tisn't !gallowed to use this menu.
MENU_ALIVE = !gYou need to be !talive !gto use this menu.
MENU_DEAD = !gYou need to be !tdead !gto use this menu.
MENU_SOUND =

[New Menu = Menu Sample]

[Menu Settings]
;<settings> = <value>

MENU_OPEN = chooseteam, say /menu, say_team /menu

[Menu Items]
;<Item Name> <Command> [Flag] [Team]
"Show Rules" "say /rules"
"Shop Menu" "say /shop"
"Our Servers" "say /server"
"Admin Menu" "say /admin"
"Mute Menu" "say /mutemenu"
"Hats Menu" "say /hat"
"AWP Menu" "say /awp"
"Knifes Menu" "say /knife"
"Camera Menu" "say /cam"
"Reset Score" "say /rs"
"Show IP" "say /showip"
"Death Note" "say /dn" "b"
"Spec Menu" "say /specmenu" "b"

[New menu = Spec Menu] 
[Menu Settings]
MENU_OPEN = say /specmenu

[Menu Items]
"Join spectator" "say /spec"
"Return to game" "say /back"
"Change your team" "say /change"
"\yPrevious Page" "say /menu"
Ето ти и твоето меню, а за биндове, различни от chooseteam(копчето M) можеш да видиш в config.cfg

Аватар
LoShIaA
Извън линия
Потребител
Потребител
Мнения: 323
Регистриран на: 20 Окт 2016, 14:44
Местоположение: Стара Загора
Се отблагодари: 120 пъти
Получена благодарност: 9 пъти

Simple Menu Builder

Мнение от LoShIaA » 10 Окт 2017, 16:04

Мерси, работи. Вдянах кое как е вече. Аз го бях сложил и най-отдолу както в момента ти си го направил тоест пробвах доста варианти. Проблема беше, че [New menu = Spec Menu] съм махал [ Spec Menu] new menu = и от там то изобщо не прави ново меню. И заради това е бил и този проблем
Следва:
[Menu Settings]
1. Всички тези настройки ли се отнасят за този раздел?
MENU_TITLE = Help Menu
MENU_TITLE_PAGE = %newline%Page:\d
MENU_BACK = \yPrevious Page
MENU_NEXT = \yNext Page
MENU_EXIT = \rClose
MENU_OPEN = chooseteam, say /menu, say_team /menu
MENU_FLAG = 0
MENU_TEAM = 0
MENU_ALIVEONLY = 0
MENU_ITEMS_PER_PAGE = 7
MENU_REOPEN = 1
MENU_ITEM_FORMAT = %item%
MENU_PREFIX = !g[!tHelp Menu!g]
MENU_NOACCESS = !gYou have !tno !gaccess to this menu.
MENU_NOTEAM = !gYour team !tisn't !gallowed to use this menu.
MENU_ALIVE = !gYou need to be !talive !gto use this menu.
MENU_DEAD = !gYou need to be !tdead !gto use this menu.
MENU_SOUND =
2.Тук пише това
Имайте предвид, че няма нужда да добавяте дадена настройка, ако искате тя да е съща като тази от настройките по подразбиране.Длъжни сте да добавите настройката MENU_OPEN.

Обаче, ако не добавя това:
MENU_TITLE = Help Menu - менюто остава без име
MENU_TITLE_PAGE = %newline%Page:\d - няма страници
MENU_BACK = \yPrevious Page - изчезва
MENU_NEXT = \yNext Page - изчезва
MENU_EXIT = \rClose - изчезва
MENU_ITEMS_PER_PAGE = 7 - итемите стават колкото могат
MENU_ITEM_FORMAT = %item% - нищо, че го има в настройките горе, менюто остава без текст
Мисълта ми тук е че не взима стойностите, които са зададени в настройките по-горе.
, който е изцяло моя грешка извинявам се.

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

Simple Menu Builder

Мнение от OciXCrom » 10 Окт 2017, 20:02

MENU_ITEM_FORMAT = %item% - тук освен item може ли да има друга функция
Това е просто как ще се показват итемите в менюто, където %item% е името на опцията. Можеш примерно да го направиш "\y[ \r%item% \y]" и ще бъдат в скоби и оцветени.
Обаче, ако не добавя това:

MENU_TITLE = Help Menu - менюто остава без име
MENU_TITLE_PAGE = %newline%Page:\d - няма страници
MENU_BACK = \yPrevious Page - изчезва
MENU_NEXT = \yNext Page - изчезва
MENU_EXIT = \rClose - изчезва
MENU_ITEMS_PER_PAGE = 7 - итемите стават колкото могат
MENU_ITEM_FORMAT = %item% - нищо, че го има в настройките горе, менюто остава без текст

Мисълта ми тук е че не взима стойностите, които са зададени в настройките по-горе.
Вероятно си сложил менюто над тези опции, следователно те още не са били прочетени от плъгина. Остави настройките по подразбиране най-отгоре, а новите менюта ги добавяй долу. Настройките ще са същите от горе ако не ги добавиш.
[New Menu = My Menu] - има ли някакви настройки за този ред? Или той просто си е за създаване на ново меню и толкова?
Няма настройки. Това само казва на плъгина, че трябва да направи ново меню и следващите редове да се отнасят за него. Даже и самото име "My Menu" е ненужно, слага се само заради прегледност във файла. Плъгинът чете само "new menu" между [ скоби ].
1.Какъв е синтаксисът на #blank, #addplayers къде се поставят между редовете, на края на редът и т.н.
Пише се #blank 0 или 1. Ако е 0, числата на итемите под него няма да се променят (1, 2, 3, 4). Ако е 0, ще счита и него като итем и съответно ще промени числата (1, 2, 3, 5). Добавя се при итемите. Пример:

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

[Menu Items]
"Join spectator" "say /spec"
"Return to game" "say /back"
"Change your team" "say /change"
#blank 0
"\yPrevious Page" "say /menu"
Същото се отнася и за #addplayers. Можеш да го добавиш в каквото да е меню, и то ще добави всички играчи в него.
Също така как мога да добавя команда, която отваря меню след като се напише в конзола. Примерно amx_gagmenu
Ако искаш да е в чат, ще пишеш "say /komanda", следователно ако премахнеш "say", ще е за конзолата. Реално "say /komanda" се пише в конзолата.

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

Обратно към “Одобрени плъгини”

Кой е на линия

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