Extra Items Menu v3.2 (+API)

Одобрените от нас плъгини. Моля, докладвайте ако забележите бъг с някой от плъгините в този раздел.
Аватар
0erT
Извън линия
Потребител
Потребител
Мнения: 6
Регистриран на: 24 Май 2022, 05:39
Местоположение: Brasil
Се отблагодари: 4 пъти
Обратна връзка:

Extra Items Menu v3.2 (+API)

Мнение от 0erT » 25 Май 2022, 18:51

Ето го:
Прикачени файлове
erro2.jpg
erro2.jpg (370.88 KiB) Преглеждано 976 пъти
erro2.jpg
erro2.jpg (370.88 KiB) Преглеждано 976 пъти
erro1.jpg
erro1.jpg (424.85 KiB) Преглеждано 976 пъти
erro1.jpg
erro1.jpg (424.85 KiB) Преглеждано 976 пъти

Аватар
Radeon
Извън линия
Потребител
Потребител
Мнения: 143
Регистриран на: 04 Апр 2021, 11:30
Се отблагодари: 2 пъти
Получена благодарност: 34 пъти
Обратна връзка:

Extra Items Menu v3.2 (+API)

Мнение от Radeon » 26 Май 2022, 14:38

Това ти е синтаксиса на командата.Първо id, след него цвят и накрая съобщението.Тук има още едно id, което аз лично не знам за какво е .
ColorChat( id на играча, цвят на текста примерно GREEN, "^x04текст зелен ^x01текст нормален ^x03 отборен цвят текст" );

За да се махне грешката сложи само цвета ето така
ColorChat(id, GREEN, "%L", id, "EIM_NOACCESS")

Ето ти го готов

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

#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <cromchat>

#define PLUGIN_VERSION "3.2"

enum _: Items
{
	Name[32],
	Sound[128],
	Team
}

enum _: Settings
{
	Prefix[32],
	Title[128],
	TitlePage[32],
	ErrorSound[128],
	ErrorSoundType,
	SelectSoundType,
	BackName[32],
	NextName[32],
	ExitName[32],
	NumColor[3],
	PerPage,
	TeamOnly,
	Flag[2],
	Pointer
}

new Array:g_aItems
new g_iTotalItems
new g_eSetting[Settings]
new g_szTeams[4][32]
new g_fwdSelectItem 
new g_fwdRemoveItem
new bool:g_blCommand[33]

public plugin_init()
{
	register_plugin("Extra Items Menu", PLUGIN_VERSION, "Unbr3akable")
	register_cvar("ExtraItemsMenu", PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED)
	register_dictionary("ExtraItemsMenu.txt")
	RegisterHam(Ham_Spawn, "player", "eventPlayerSpawn", 1)
	
	g_fwdSelectItem = CreateMultiForward("select_items", ET_STOP, FP_CELL, FP_CELL)
	g_fwdRemoveItem = CreateMultiForward("remove_items", ET_IGNORE, FP_CELL, FP_CELL)
	g_eSetting[Pointer] = get_cvar_pointer("mp_freezetime")
	
	CC_SetPrefix(g_eSetting[Prefix])
}

public plugin_precache()
{
	g_aItems = ArrayCreate(Items)
	readfile()
}
	
readfile()
{
	static szConfigsName[64], szFileName[64], iFilePointer
	get_configsdir(szConfigsName, charsmax(szConfigsName))
	formatex(szFileName, charsmax(szFileName), "%s/ExtraItemsMenu.ini", szConfigsName)
	iFilePointer = fopen(szFileName, "rt")
	
	if (iFilePointer)
	{
		static szData[128], szKey[32], szValue[128]
		
		while (!feof(iFilePointer))
		{
			fgets(iFilePointer, szData, charsmax(szData))
			trim(szData)
			
			switch (szData[0])
			{
				case EOS, ';', '[': continue
				default:
				{		
					strtok(szData, szKey, charsmax(szKey), szValue, charsmax(szValue), '=')
					trim(szKey); trim(szValue)
							
					if (is_blank(szValue)) continue
								
					if (equal(szKey, "EIM_PREFIX"))
						copy(g_eSetting[Prefix], charsmax(g_eSetting[Prefix]), szValue)
					else if (equal(szKey, "EIM_TITLE"))
						copy(g_eSetting[Title], charsmax(g_eSetting[Title]), szValue)
					else if (equal(szKey, "EIM_TITLE_PAGE"))
						copy(g_eSetting[TitlePage], charsmax(g_eSetting[TitlePage]), szValue)
					else if (equal(szKey, "EIM_TEAM_NAMES"))
					{
						for (new i; i < 4; i++)
						{
							strtok(szValue, szKey, charsmax(szKey), szValue, charsmax(szValue), ',')
							trim(szKey); trim(szValue)
							copy(g_szTeams[i], charsmax(g_szTeams[]), szKey)
						}
					}
					else if (equal(szKey, "EIM_ERROR_SOUND"))
					{
						copy(g_eSetting[ErrorSound], charsmax(g_eSetting[ErrorSound]), szValue)
								
						if (!is_blank(szValue))
							precache_sound(szValue)
					}
					else if (equal(szKey, "EIM_ERRORSOUND_TYPE"))
						g_eSetting[ErrorSoundType] = clamp(str_to_num(szValue), 0, 1)
					else if (equal(szKey, "EIM_SELECTSOUND_TYPE"))
						g_eSetting[SelectSoundType] = clamp(str_to_num(szValue), 0, 1)
					else if (equal(szKey, "EIM_COMMANDS"))
					{
						while (szValue[0] != 0 && strtok(szValue, szKey, charsmax(szKey), szValue, charsmax(szValue), ','))
						{
							trim(szKey); trim(szValue)
							register_clcmd(szKey, "menuItems")
						}
					}
					else if (equal(szKey, "EIM_BACK_NAME"))
						copy(g_eSetting[BackName], charsmax(g_eSetting[BackName]), szValue)
					else if (equal(szKey, "EIM_NEXT_NAME"))
						copy(g_eSetting[NextName], charsmax(g_eSetting[NextName]), szValue)
					else if (equal(szKey, "EIM_EXIT_NAME"))
						copy(g_eSetting[ExitName], charsmax(g_eSetting[ExitName]), szValue)
					else if (equal(szKey, "EIM_NUM_COLOR"))
						copy(g_eSetting[NumColor], charsmax(g_eSetting[NumColor]), szValue)
					else if (equal(szKey, "EIM_PER_PAGE"))
						g_eSetting[PerPage] = clamp(str_to_num(szValue), 0, 7)
					else if (equal(szKey, "EIM_TEAM"))
						g_eSetting[TeamOnly] = clamp(str_to_num(szValue), 0, 3)
					else if (equal(szKey, "EIM_FLAG"))
						g_eSetting[Flag] = szValue[0] == '!' ? ADMIN_ALL : read_flags(szValue)
				}
			}
		}
		
		fclose(iFilePointer)
	}
}

public plugin_end()
	ArrayDestroy(g_aItems)

public eventPlayerSpawn(id)
{
	if (!is_user_alive(id) || !has_user_flag(id) || !has_user_team(id))
		return
		
	static i
	for (i = 0; i < g_iTotalItems; i++)
		remove_items(id, i)
	
	g_blCommand[id] = false
	menuItems(id)
}

public menuItems(id)
{
	if (!has_user_flag(id))
	{
		ColorChat(id, GREEN, "%L", id, "EIM_NOACCESS")
		speak_sound(id, g_eSetting[ErrorSoundType], g_eSetting[ErrorSound])
		return PLUGIN_HANDLED
	}
	
	if (!has_user_team(id))
	{
		ColorChat(id,GREEN, "%L", id, "EIM_NOTEAM")
		speak_sound(id, g_eSetting[ErrorSoundType], g_eSetting[ErrorSound])
		return PLUGIN_HANDLED
	}
	
	if (g_blCommand[id])
	{
		ColorChat(id,GREEN, "%L", id, "EIM_ALREADY")
		speak_sound(id, g_eSetting[ErrorSoundType], g_eSetting[ErrorSound])
		return PLUGIN_HANDLED
	}
	
	if (!is_user_alive(id))
	{
		ColorChat(id,GREEN, "%L", id, "EIM_NOTALIVE")
		speak_sound(id, g_eSetting[ErrorSoundType], g_eSetting[ErrorSound])
		return PLUGIN_HANDLED
	}
	
	static szTitle[128], szPage[32], iUserTeam, iMenu, i, eItem[Items], szItem[64], szKey[5]
	iUserTeam = get_user_team(id)
	
	copy(szTitle, charsmax(szTitle), g_eSetting[Title])
	replace_all(szTitle, charsmax(szTitle), "\n", "^n")
	replace_all(g_eSetting[TitlePage], charsmax(g_eSetting[TitlePage]), "\n", "^n")

	if (contain(g_eSetting[TitlePage], "\page") != -1)
	{
		formatex(szPage, charsmax(szPage), "%L", id, "EIM_PAGENAME")
		replace_all(g_eSetting[TitlePage], charsmax(g_eSetting[TitlePage]), "\page", szPage)
	}
	
	if (contain(szTitle, "\team") != -1)
		replace_all(szTitle, charsmax(szTitle), "\team", g_szTeams[iUserTeam])
	
	iMenu = menu_create(szTitle, "menuHandler")
	
	for (i = 0; i < g_iTotalItems; i++)
	{
		ArrayGetArray(g_aItems, i, eItem)
		
		if (eItem[Team] && eItem[Team] != iUserTeam)
			continue
			
		formatex(szItem, charsmax(szItem), "%s", eItem[Name])
		num_to_str(i, szKey, charsmax(szKey))
		menu_additem(iMenu, szItem, szKey)
	}	
	
	if (menu_pages(iMenu) > 1)
	{
		add(szTitle, charsmax(szTitle), g_eSetting[TitlePage])
		menu_setprop(iMenu, MPROP_TITLE, szTitle)
	}
	
	menu_setprop(iMenu, MPROP_BACKNAME, g_eSetting[BackName])
	menu_setprop(iMenu, MPROP_NEXTNAME, g_eSetting[NextName])
	menu_setprop(iMenu, MPROP_EXITNAME, g_eSetting[ExitName])
	menu_setprop(iMenu, MPROP_NUMBER_COLOR, g_eSetting[NumColor])
	menu_setprop(iMenu, MPROP_PERPAGE, g_eSetting[PerPage])
	menu_display(id, iMenu)
	
	return PLUGIN_HANDLED
}
	
public menuHandler(id, iMenu, iItem)
{
	if (iItem == MENU_EXIT || !is_user_alive(id))
	{
		menu_destroy(iMenu)
		return PLUGIN_HANDLED
	}
	
	static szName[64], szData[6], access, callback, iKey, eItem[Items]
	menu_item_getinfo(iMenu, iItem, access, szData, charsmax(szData), szName, charsmax(szName), callback)
	iKey = str_to_num(szData)
	
	g_blCommand[id] = true
	ArrayGetArray(g_aItems, iKey, eItem)
	ColorChat(id,GREEN, "%L", id, "EIM_SELECT_ITEM", eItem[Name])
	speak_sound(id, g_eSetting[SelectSoundType], eItem[Sound])
	select_items(id, iKey)
	
	menu_destroy(iMenu)
	return PLUGIN_HANDLED
}

select_items(id, iItem)
{
	new iReturn
	ExecuteForward(g_fwdSelectItem, iReturn, id, iItem)
	
	if (iReturn)
		return iReturn
	
	return PLUGIN_HANDLED
}

remove_items(id, iItem)
{
	new iReturn
	ExecuteForward(g_fwdRemoveItem, iReturn, id, iItem)
}

bool:is_blank(szString[])
	return szString[0] == EOS ? true : false
	
bool:has_user_flag(id)
	return (g_eSetting[Flag] == ADMIN_ALL || get_user_flags(id) & g_eSetting[Flag]) ? true : false

bool:has_user_team(id)
	return (!g_eSetting[TeamOnly] || get_user_team(id) == g_eSetting[TeamOnly]) ? true : false

speak_sound(id, iType, szSound[])
{
	switch (iType)
	{
		case 0: client_cmd(id, "spk %s", szSound)
		case 1: emit_sound(id, CHAN_ITEM, szSound, 1.0, ATTN_NORM, 0, PITCH_NORM)
	}
}
	

public plugin_natives()
{
	register_library("EIM")
	register_native("register_item", "_register_item")
}

public _register_item(iPlugin, iParams)
{
	static eItem[Items]
	get_string(1, eItem[Name], charsmax(eItem[Name]))
	get_string(2, eItem[Sound], charsmax(eItem[Sound]))
	eItem[Team] = get_param(3)
	
	g_iTotalItems++
	ArrayPushArray(g_aItems, eItem)
	precache_sound(eItem[Sound])
	return g_iTotalItems -1
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1026\\ f0\\ fs16 \n\\ par }
*/

Аватар
0erT
Извън линия
Потребител
Потребител
Мнения: 6
Регистриран на: 24 Май 2022, 05:39
Местоположение: Brasil
Се отблагодари: 4 пъти
Обратна връзка:

Extra Items Menu v3.2 (+API)

Мнение от 0erT » 26 Май 2022, 21:16

успява да компилира
Благодаря, че ми помогнахте :D

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

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

Кой е на линия

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