Редактиране на Models Menu by TheRedShoko

В този раздел можете да подавате всякакви заявки за намиране, изработка или преработка на плъгини/модове.
Аватар
southdivision
Извън линия
Потребител
Потребител
Мнения: 279
Регистриран на: 14 Окт 2016, 23:17
Местоположение: София
Се отблагодари: 8 пъти
Получена благодарност: 5 пъти
Обратна връзка:

Редактиране на Models Menu by TheRedShoko

Мнение от southdivision » 17 Апр 2018, 14:14

Здравейте, ползвам версията 1.2 на плъгина Models Menu от TheRedShoko,но желая имената на моделите да ги изписва според отбора,а не да изписват имената на моделите на противниковия отбор. Т.е когато отвориш менюто да излизат имената на моделите за съответния отбор в който си

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

	for (new i = 0; i < iTotalModels; i++)
	{
	    ArrayGetString(g_szNames, i, szName, charsmax(szName))
		
		menu_additem(iMenu, szName, _, _, menu_makecallback("model_callback"))
	}

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


#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <hamsandwich>
#include <fvault>

#define VERSION "1.2"

new Array:g_szNames, Array:g_szModel, Array:g_szFlag, Array:g_iTeam, Trie:UserModel[2]
new iTotalModels, iCurrentModel[33]
new p_admin_only, p_admin_flag, p_set_atm, p_save

new const szDefaultModels[][][] =
{
	{ "terror", "leet", "arctic", "guerilla" },
	{ "urban", "gsg9", "sas", "gign" }
}

new const szPrefix[] = "ModelsMenu"
new const szFVaultFile[] = "models_menu"

public plugin_init()
{
	register_plugin("Models Menu", VERSION, "TheRedShoko")
	register_cvar("models_menu", VERSION, FCVAR_SERVER | FCVAR_SPONLY)
	
	register_clcmd("say /models", "show_model_menu")
	register_clcmd("say_team /models", "show_model_menu")
	
	RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawnPost", 1)
	register_forward(FM_SetClientKeyValue, "fw_SetClientKeyValue")
	
	p_admin_only = register_cvar("models_menu_adminonly", "0")
	p_admin_flag = register_cvar("models_menu_adminflag", "a")
	p_set_atm = register_cvar("models_menu_setnow", "1")
	p_save = register_cvar("models_menu_save", "1")
}

public plugin_precache()
{
	g_szNames = ArrayCreate(32, 1)
	g_szModel = ArrayCreate(32, 1)
	g_szFlag = ArrayCreate(8, 1)
	g_iTeam = ArrayCreate(8, 1)
	UserModel[0] = TrieCreate()
	UserModel[1] = TrieCreate()
	
	load_menu_file()
	load_user_file()
}

public plugin_end()
{
	ArrayDestroy(g_szNames)
	ArrayDestroy(g_szModel)
	ArrayDestroy(g_szFlag)
	ArrayDestroy(g_iTeam)
	TrieDestroy(UserModel[0])
	TrieDestroy(UserModel[1])
}

public client_putinserver(id)
{
	if (get_pcvar_num(p_save))
	{
		LoadModel(id)
	}
}

public client_disconnect(id)
{
	if (get_pcvar_num(p_save))
	{
		SaveModel(id)
	}
}

public fw_PlayerSpawnPost(id)
{
	if (is_user_alive(id) && 1 <= get_user_team(id) <= 2)
	{
		new szModel[32]
		if (iCurrentModel[id])
		{
			new iTeam = ArrayGetCell(g_iTeam, iCurrentModel[id])
		
			if (iTeam && get_user_team(id) == iTeam)
			{
				ArrayGetString(g_szModel, iCurrentModel[id], szModel, charsmax(szModel))
			}
			else if (iTeam)
			{
				ColorMessage(id, "^x04[%s]^x01 Your current model is not for your team!", szPrefix)
			}
		}
		
		if (szModel[0] == EOS)
		{
			new szName[32]
			get_user_name(id, szName, charsmax(szName))
			
			if (TrieKeyExists(UserModel[get_user_team(id) - 1], szName))
			{
				TrieGetString(UserModel[get_user_team(id) - 1], szName, szModel, charsmax(szModel))
			}
			else
			{
				copy(szModel, charsmax(szModel), szDefaultModels[get_user_team(id) - 1][random(sizeof(szDefaultModels[]))])
			}
		}
		
		set_user_info(id, "model", szModel)
	}
}

public show_model_menu(id)
{
	new szFlag[8]
	get_pcvar_string(p_admin_flag, szFlag, charsmax(szFlag))
	
	if (get_pcvar_num(p_admin_only) && !(get_user_flags(id) & read_flags(szFlag)))
	{
		ColorMessage(id, "^x04[%s]^x01 This menu is currently^x03 Admin Only^x01!", szPrefix)
		return PLUGIN_HANDLED
	}
	
	new iMenu = menu_create("\rModels Menu^n\yChoose a model:", "model_handler")
	
	new szName[64]
	
	for (new i = 0; i < iTotalModels; i++)
	{
		ArrayGetString(g_szNames, i, szName, charsmax(szName))
		
		menu_additem(iMenu, szName, _, _, menu_makecallback("model_callback"))
	}
	
	menu_display(id, iMenu)
	
	return PLUGIN_HANDLED
}

public model_callback(id, iMenu, Item)
{
	new szFlag[8]
	ArrayGetString(g_szFlag, Item, szFlag, charsmax(szFlag))
	
	new iFlags = get_user_flags(id)
	new iTeam = ArrayGetCell(g_iTeam, Item)
	
	new szName[64], szInfo[1], iCallback, iAccess
	menu_item_getinfo(iMenu, Item, iAccess, szInfo, charsmax(szInfo), szName, charsmax(szName), iCallback)
	
	if (equal(szName, "ERROR"))
	{
		add(szName, charsmax(szName), " \r(Failed to load model)")
		
		menu_item_setname(iMenu, Item, szName)
		
		return ITEM_DISABLED
	}
	
	new szToAdd[64]
	
	if (szFlag[0] != EOS)
	{
		formatex(szToAdd, charsmax(szToAdd), " \%s(Admin Only)", (iFlags & read_flags(szFlag)) ? "y" : "r")
		add(szName, charsmax(szName), szToAdd)
	}
	
	if (1 <= iTeam <= 2)
	{
		formatex(szToAdd, charsmax(szToAdd), " \%s(%s)", (get_user_team(id) == iTeam) ? "y" : "r", (iTeam == 1) ? "Terrorist Only" : "CT Only")
		add(szName, charsmax(szName), szToAdd)
	}
	
	menu_item_setname(iMenu, Item, szName)
	
	if (Item == iCurrentModel[id] || 1 <= iTeam <= 2 && get_user_team(id) != iTeam || !(iFlags & read_flags(szFlag)) && szFlag[0] != EOS)
	{
		return ITEM_DISABLED
	}
		
	return ITEM_ENABLED
}

public model_handler(id, iMenu, Item)
{
	if (Item == MENU_EXIT)
	{
		menu_destroy(iMenu)
		return
	}
	
	iCurrentModel[id] = Item
	
	new szName[32]
	ArrayGetString(g_szNames, Item, szName, charsmax(szName))
	
	if (is_user_alive(id) && get_pcvar_num(p_set_atm) && 1 <= get_user_team(id) <= 2)
	{
		new szModel[32]
		
		if (Item)
		{
			ArrayGetString(g_szModel, Item, szModel, charsmax(szModel))
		}
		else
		{
			new szName[32]
			get_user_name(id, szName, charsmax(szName))
			
			if (TrieKeyExists(UserModel[get_user_team(id) - 1], szName))
			{
				TrieGetString(UserModel[get_user_team(id) - 1], szName, szModel, charsmax(szModel))
			}
			else
			{
				copy(szModel, charsmax(szModel), szDefaultModels[get_user_team(id) - 1][random(sizeof(szDefaultModels[]))])
			}
		}
		
		set_user_info(id, "model", szModel)
		
		ColorMessage(id, "^x04[%s]^x01 Your model is now^x03 %s^x01!", szPrefix, szName)
	}
	else
	{
		ColorMessage(id, "^x04[%s]^x01 Your model will be changed to^x03 %s^x01 after your next spawn!", szPrefix, szName)
	}
	
	menu_destroy(iMenu)
}

load_menu_file()
{
	new szFile[128]
	get_configsdir(szFile, charsmax(szFile))
	
	add(szFile, charsmax(szFile), "/models.ini")
	
	new iLine, szData[128], buffer

	new szName[32], szModel[32], szFlag[8], szTeam[8], iTeam
	
	if (file_exists(szFile))
	{
		iTotalModels = 1
		
		ArrayPushString(g_szNames, "Default")
		ArrayPushString(g_szModel, "")
		ArrayPushString(g_szFlag, "")
		ArrayPushCell(g_iTeam, 0)
		
		while ( (iLine = read_file(szFile, iLine, szData, charsmax(szData), buffer)) )
		{
			if (szData[0] == EOS || szData[0] == '/' && szData[1] == '/' || szData[0] == ';') continue
			
			parse(szData, szName, charsmax(szName), szModel, charsmax(szModel), szFlag, charsmax(szFlag), szTeam, charsmax(szTeam))
			
			switch (szTeam[0])
			{
				case 'T', 't':
				{
					iTeam = 1
				}
				case 'c', 'C':
				{
					iTeam = 2
				}
				default:
				{
					iTeam = 0
				}
			}
			
			if (try_to_precache(szModel))
			{
				ArrayPushString(g_szNames, szName)
				ArrayPushString(g_szModel, szModel)
				ArrayPushString(g_szFlag, szFlag)
				ArrayPushCell(g_iTeam, iTeam)
			}
			else
			{
				ArrayPushString(g_szNames, "ERROR")
				ArrayPushString(g_szModel, "")
				ArrayPushString(g_szFlag, "")
				ArrayPushCell(g_iTeam, 0)
			}
			
			iTotalModels++
		}
	}
	else
	{
		new iFile = fopen(szFile, "wt")
		
		if (iFile)
		{
			new szLine[256]
			
			formatex(szLine, charsmax(szLine), "; Player models menu by TheRedShoko^n; Usage: ^"Name to be displayed in the menu^" ^"Name of the model^" ^"Admin flag^" ^"T | CT | 0^"")
			
			fputs(iFile, szLine)
			
			fclose(iFile)
		}
	}
}

load_user_file()
{
	new szFile[128]
	get_configsdir(szFile, charsmax(szFile))
	
	add(szFile, charsmax(szFile), "/user_models.ini")
	
	new iLine, szData[128], buffer

	new szName[32], szModel[2][32]
	
	if (file_exists(szFile))
	{		
		while ( (iLine = read_file(szFile, iLine, szData, charsmax(szData), buffer)) )
		{
			if (szData[0] == EOS || szData[0] == '/' && szData[1] == '/' || szData[0] == ';') continue
			
			parse(szData, szName, charsmax(szName), szModel[0], charsmax(szModel[]), szModel[1], charsmax(szModel[]))
			
			for (new i = 0; i < sizeof(szModel); i++)
			{
				if (szModel[i][0] != EOS && try_to_precache(szModel[i]))
				{
					TrieSetString(UserModel[i], szName, szModel[i])
				}
			}
		}
	}
	else
	{
		new iFile = fopen(szFile, "wt")
		
		if (iFile)
		{
			new szLine[256]
			
			formatex(szLine, charsmax(szLine), "; Player models menu by TheRedShoko^n; Usage: ^"Player Name^" ^"Name of the model for terrorist^" ^"Name of model for CT^"")
			
			fputs(iFile, szLine)
			
			fclose(iFile)
		}
	}
}

SaveModel(id)
{
	new szData[8], szName[32]
	get_user_name(id, szName, charsmax(szName))
	num_to_str(iCurrentModel[id], szData, charsmax(szData))
	
	fvault_set_data(szFVaultFile, szName, szData)
}

LoadModel(id)
{
	new szData[8], szName[32]
	get_user_name(id, szName, charsmax(szName))
	
	if (fvault_get_data(szFVaultFile, szName, szData, charsmax(szData)))
	{
		iCurrentModel[id] = str_to_num(szData)
	}
	else
	{
		iCurrentModel[id] = 0
	}
}

public fw_SetClientKeyValue(id, szInfoBuffer[], szKey[], szValue[])
{
	if (equal(szKey, "model"))
	{
		return FMRES_SUPERCEDE
	}
	
	return FMRES_IGNORED
}

try_to_precache(model[])
{
	new szModel[64]
	formatex(szModel, charsmax(szModel), "models/player/%s/%s.mdl", model, model)
	
	if (!file_exists(szModel))
	{
		log_amx("Failed to precache ^"%s^"! File is missing or may have wrong name!", szModel)
		return 0;
	}
	
	precache_generic(szModel)
	
	return 1
}

stock ColorMessage(const id, const input[], any:...)
{
	new count = 1, players[32];
	static msg[191];
	vformat(msg, 190, input, 3);
	if (id) players[0] = id; else get_players(players , count , "ch");
	{
		for (new i = 0; i < count; i++)
		{
			if (is_user_connected(players[i]))
			{
				message_begin(MSG_ONE_UNRELIABLE , get_user_msgid("SayText"), _, players[i]);
				write_byte(players[i]);
				write_string(msg);
				message_end();
			}
		}
	}
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1026\\ f0\\ fs16 \n\\ par }
*/

Желая да използвам тази версия въпреки,че има за REHLDS.

Аватар
You Owe Me
Извън линия
Потребител
Потребител
Мнения: 185
Регистриран на: 07 Мар 2018, 19:34
Местоположение: Пред компютъра
Получена благодарност: 2 пъти

Редактиране на Models Menu by TheRedShoko

Мнение от You Owe Me » 17 Апр 2018, 14:32

Ползвай му най-новата версия която е 2.0 цък, мисля, че в нея можеш да си го настроиш точно така.
I am actually not a Harry Potter FAN, but this song below is HOT AF :crazy:

Аватар
southdivision
Извън линия
Потребител
Потребител
Мнения: 279
Регистриран на: 14 Окт 2016, 23:17
Местоположение: София
Се отблагодари: 8 пъти
Получена благодарност: 5 пъти
Обратна връзка:

Редактиране на Models Menu by TheRedShoko

Мнение от southdivision » 17 Апр 2018, 14:40

You Owe Me написа: 17 Апр 2018, 14:32 Ползвай му най-новата версия която е 2.0 цък, мисля, че в нея можеш да си го настроиш точно така.
southdivision написа: 17 Апр 2018, 14:14 Желая да използвам тази версия въпреки,че има за REHLDS.

Аватар
You Owe Me
Извън линия
Потребител
Потребител
Мнения: 185
Регистриран на: 07 Мар 2018, 19:34
Местоположение: Пред компютъра
Получена благодарност: 2 пъти

Редактиране на Models Menu by TheRedShoko

Мнение от You Owe Me » 17 Апр 2018, 14:46

southdivision написа: 17 Апр 2018, 14:40
You Owe Me написа: 17 Апр 2018, 14:32 Ползвай му най-новата версия която е 2.0 цък, мисля, че в нея можеш да си го настроиш точно така.
southdivision написа: 17 Апр 2018, 14:14 Желая да използвам тази версия въпреки,че има за REHLDS.
Не съм видял, прощавай :)
I am actually not a Harry Potter FAN, but this song below is HOT AF :crazy:

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

Обратно към “Заявки за плъгини”

Кой е на линия

Потребители разглеждащи този форум: Google [Bot], Semrush [Bot] и 20 госта