Counter-Strike 1.6
VIP
Cs-PlovdiV.com - Aim Attack
93.123.16.4:27022
aim_map2
Играчи: 4/16
aim_map2
Counter-Strike 1.6
VIP
93.123.16.4:27022 Cs-PlovdiV.com - Aim Attack aim_map2 4/16

Menu Skin Girl

В този раздел можете да подавате всякакви заявки за намиране, изработка или преработка на плъгини/модове.
Аватар
Huehue
Извън линия
Модератор
Модератор
Мнения: 357
Регистриран на: 16 Яну 2017, 23:42
Местоположение: София
Се отблагодари: 9 пъти
Получена благодарност: 175 пъти
Обратна връзка:

Re: Menu Skin Girl

Мнение от Huehue » 19 Ное 2023, 14:15

Ето така трябва вече да е ок..
xgsm_cgozzie75.sma
(7.92 KiB) Свалено 19 пъти
xgsm_cgozzie75.sma
(7.92 KiB) Свалено 19 пъти
LOYAL TO THE OATH OF OMERTА̀

Зад монитора мъжкари, това не го разбирам..
На живо сте мишкари, това го гарантирам!
Седиш на 30 метра от мен като препариран!
Ако има нещо брат, номерът ми е блокиран..

My GitHub Profile
GitHub

My AMXX Includes Collection
AMXX Include Libraries

My Steam Profile (from SteamDB)
  • Value: 4179€
  • Games owned: 1855
  • Games played: 754 (40%)
  • Hours on record: 4,994.9h

Аватар
cgozzie75
Извън линия
Потребител
Потребител
Мнения: 47
Регистриран на: 08 Ное 2023, 12:46
Се отблагодари: 25 пъти
Получена благодарност: 2 пъти

Re: Menu Skin Girl

Мнение от cgozzie75 » 19 Ное 2023, 14:42

Huehue написа: 19 Ное 2023, 14:15 Ето така трябва вече да е ок..

xgsm_cgozzie75.sma
Не е за вярване работи перфектно но темата да не се затваря нека мине малко време да се тества се пак с играчи.А ако реша някаква промяна или да се добави нещо да мога да пиша веднага.Благодаря и на двама ви че помагате това да се усъществи,радвам се че има хора като вас .. :dance: :clap: :nicecode:

Аватар
cgozzie75
Извън линия
Потребител
Потребител
Мнения: 47
Регистриран на: 08 Ное 2023, 12:46
Се отблагодари: 25 пъти
Получена благодарност: 2 пъти

Re: Menu Skin Girl

Мнение от cgozzie75 » 20 Ное 2023, 13:47

Здравей доогледах нещата и реших да се добави опция за премахване на текущия скин ако случайно мацката реши да не ползва скин.В момента ако си е избрала и го запазва и само може да сменя с други но не може да се върне по дефаут.Добави опция по дефаут ако се пак реши да не ползва..

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

// AMXXBG Request Topic: https://amxx-bg.info/forum/viewtopic.php?t=12407

#include <amxmodx>
#include <reapi>
#include <fvault>
#include <cstrike>

// Uncomment the line if you want to use the setinfo as model set
//#define USE_SETINFO
#define USE_CSTRIKE_MODELSET

new const g_szFVault_DB[] = "DB_fVault_GirlSkins"

#define VERSION "1.0.0"

enum _:eModelsData
{
	SKIN_NAME[MAX_NAME_LENGTH],
	MODEL[MAX_NAME_LENGTH]
}

new const g_szModels_TT[][eModelsData] =
{
	{ "[TR] [GIRL SKIN] BARBIE #1", "barbi1" },
	{ "[TR] [GIRL SKIN] CAT #2", "cat1" },
	{ "[TR] [GIRL SKIN] KIT #3", "kit1" }
}

new const g_szModels_CT[][eModelsData] =
{
	{ "[CT] [GIRL SKIN] BARBIE #1", "barbi2" },
	{ "[CT] [GIRL SKIN] CAT #2", "cat2" },
	{ "[CT] [GIRL SKIN] KIT #3", "kit2" }
}

enum _:ePlayerTeamData
{
	TT,
	CT
}

new g_bCustomPlayerModel[MAX_CLIENTS + 1][ePlayerTeamData]
new g_szName[MAX_CLIENTS + 1][MAX_NAME_LENGTH]

new g_bActiveCustomPlayerModel[MAX_CLIENTS + 1]

#if !defined _reapi_stocks_included
#define rg_get_user_team(%0) get_member(%0, m_iTeam)
#endif

public plugin_init()
{
	register_plugin("xGirls Skin Menu [AMXXBG Request]", VERSION, "Huehue @ AMXX-BG.INFO")

	#if defined USE_SETINFO
	RegisterHookChain(RG_CBasePlayer_SetClientUserInfoModel, "CBasePlayer_SetClientUserInfoModel", false)
	#endif
	RegisterHookChain(RG_CBasePlayer_Spawn, "CBasePlayer_Spawn", true)
	
	register_clcmd("say /girl", "Command_GirlSkinMenu")
	register_clcmd("say_team /girl", "Command_GirlSkinMenu")
}

public plugin_precache()
{
	static i

	for (i = 0; i < sizeof g_szModels_CT; i++)
		try_precache_player_model(g_szModels_CT[i][MODEL])

	for (i = 0; i < sizeof g_szModels_TT; i++)
		try_precache_player_model(g_szModels_TT[i][MODEL])
}

#if defined USE_SETINFO
public CBasePlayer_SetClientUserInfoModel(const id, szInfoBuffer[], szNewModel[])
{
	if (g_bActiveCustomPlayerModel[id])
	{
		switch (rg_get_user_team(id))
		{
			case TEAM_TERRORIST:
			{
				SetHookChainArg(3, ATYPE_STRING, g_szModels_TT[g_bCustomPlayerModel[id][TT]][MODEL])
			}
			case TEAM_CT:
			{
				SetHookChainArg(3, ATYPE_STRING, g_szModels_CT[g_bCustomPlayerModel[id][CT]][MODEL])
			}
		}
	}
}
#endif

public CBasePlayer_Spawn(id)
{
	if (is_user_alive(id))
		set_task(0.5, "Update_User_Info", id) // Safecase just because no idea when your other models set
}

public Command_GirlSkinMenu(id)
{
	static iMenu, i, iCallBack
	iMenu = menu_create(fmt("\wChoose Girl Skin for %s", rg_get_user_team(id) == TEAM_TERRORIST ? "\rTerrorist" : "\yCounter-Terrorist"), "GirlSkinMenu_Handler")

	iCallBack = menu_makecallback("GirlSkinMenu_CallBack")

	switch (rg_get_user_team(id))
	{
		case TEAM_TERRORIST:
		{
			for (i = 0; i < sizeof g_szModels_TT; i++)
			{
				menu_additem(iMenu, g_szModels_TT[i][SKIN_NAME], .callback = iCallBack)
			}
		}
		case TEAM_CT:
		{
			for (i = 0; i < sizeof g_szModels_CT; i++)
			{
				menu_additem(iMenu, g_szModels_CT[i][SKIN_NAME], .callback = iCallBack)
			}
		}
	}

	menu_display(id, iMenu)
	return PLUGIN_HANDLED
}

public GirlSkinMenu_CallBack(id, iMenu, Item)
{
	if (g_bActiveCustomPlayerModel[id])
	{
		if (g_bCustomPlayerModel[id][TT] == Item && rg_get_user_team(id) == TEAM_TERRORIST)
		{
			menu_item_setname(iMenu, Item, fmt("%s \d[SELECTED]", g_szModels_TT[Item][SKIN_NAME]))
			return ITEM_DISABLED
		}

		if (g_bCustomPlayerModel[id][CT] == Item && rg_get_user_team(id) == TEAM_CT)
		{
			menu_item_setname(iMenu, Item, fmt("%s \d[SELECTED]", g_szModels_CT[Item][SKIN_NAME]))
			return ITEM_DISABLED
		}
	}
	return ITEM_ENABLED
}

public GirlSkinMenu_Handler(id, iMenu, Item)
{
	if (Item == MENU_EXIT)
	{
		menu_destroy(iMenu)
		return PLUGIN_HANDLED
	}

	g_bActiveCustomPlayerModel[id] = true

	switch(rg_get_user_team(id))
	{
		case TEAM_TERRORIST:
		{
			g_bCustomPlayerModel[id][TT] = Item
			client_print_color(id, print_team_default, "^4[Girl Skins] ^1You have selected skin ^3%s", g_szModels_TT[Item][SKIN_NAME])
		}
		case TEAM_CT:
		{
			g_bCustomPlayerModel[id][CT] = Item
			client_print_color(id, print_team_default, "^4[Girl Skins] ^1You have selected skin ^3%s", g_szModels_CT[Item][SKIN_NAME])
		}
	}

	Update_User_Info(id)

	menu_destroy(iMenu)
	return PLUGIN_HANDLED
}

public Update_User_Info(id)
{
	if (is_user_alive(id) && g_bActiveCustomPlayerModel[id])
	{
		switch (rg_get_user_team(id))
		{
			#if defined USE_CSTRIKE_MODELSET
				case TEAM_TERRORIST: cs_set_user_model(id, g_szModels_TT[g_bCustomPlayerModel[id][TT]][MODEL])
				case TEAM_CT: cs_set_user_model(id, g_szModels_CT[g_bCustomPlayerModel[id][CT]][MODEL])
			#else
				#if defined USE_SETINFO
					case TEAM_TERRORIST: set_user_info(id, "model", g_szModels_TT[g_bCustomPlayerModel[id][TT]][MODEL])
					case TEAM_CT: set_user_info(id, "model", g_szModels_CT[g_bCustomPlayerModel[id][CT]][MODEL])
				#else
					case TEAM_TERRORIST: rg_set_user_model(id, g_szModels_TT[g_bCustomPlayerModel[id][TT]][MODEL])
					case TEAM_CT: rg_set_user_model(id, g_szModels_CT[g_bCustomPlayerModel[id][CT]][MODEL])
				#endif
			#endif
		}

		#if defined USE_SETINFO
		rh_update_user_info(id)
		#endif

		if (~get_user_flags(id) & ADMIN_LEVEL_D)
		{
			remove_user_flags(id, read_flags("z"))
			set_user_flags(id, read_flags("p"))
		}
	}
}

// Save & Load data
public Save_Data(id, szName[])
{
	new szData[64]
	formatex(szData, charsmax(szData), "%i#%i#%i", g_bActiveCustomPlayerModel[id], g_bCustomPlayerModel[id][TT], g_bCustomPlayerModel[id][CT])
	fvault_set_data(g_szFVault_DB, szName, szData)
}

public Load_Data(szName[], id)
{
	if (!is_user_connected(id))
		return
	
	new szData[64]

	if(fvault_get_data(g_szFVault_DB, szName, szData, charsmax(szData)))
	{
		parse_loaded_data(id, szData, charsmax(szData))
	} 
	else 
	{
		register_new_player(id)
	}
}

public parse_loaded_data(id, szData[], iLen)
{
	replace_all(szData, iLen, "#", " ")
				
	new szActiveCustomPlayerModel[10], szCustomModelTT[10], szCustomModelCT[10]
	parse(szData, szActiveCustomPlayerModel, charsmax(szActiveCustomPlayerModel), szCustomModelTT, charsmax(szCustomModelTT), szCustomModelCT, charsmax(szCustomModelCT))
	
	g_bActiveCustomPlayerModel[id] = str_to_num(szActiveCustomPlayerModel) == 1 ? true : false
	g_bCustomPlayerModel[id][TT] = str_to_num(szCustomModelTT)
	g_bCustomPlayerModel[id][CT] = str_to_num(szCustomModelCT)

	Update_User_Info(id)
}

public register_new_player(id)
{
	g_bActiveCustomPlayerModel[id] = false
	g_bCustomPlayerModel[id][TT] = 0
	g_bCustomPlayerModel[id][CT] = 0
	#if defined USE_CSTRIKE_MODELSET
		cs_reset_user_model(id)
	#else
		#if defined USE_SETINFO
		set_user_info(id, "model", "")
		rh_update_user_info(id)
		#else
		rg_reset_user_model(id)
		#endif
	#endif
}

public client_infochanged(id)
{
	if (!is_user_connected(id))
		return PLUGIN_HANDLED
	
	new szNewName[32], szOldName[32]
	get_user_name(id, szOldName, charsmax(szOldName))
	get_user_info(id, "name", szNewName, charsmax(szNewName))
	
	if (!equal(szNewName, szOldName))
	{
		g_szName[id] = szNewName
		Save_Data(id, szOldName)
		set_task(0.1, "Load_Data", id, szNewName, sizeof(szNewName))
		return PLUGIN_HANDLED
	}
	
	return PLUGIN_HANDLED
}

public client_putinserver(id)
{
	get_user_name(id, g_szName[id], charsmax(g_szName[]))
	set_task(0.1, "Load_Data", id, g_szName[id], sizeof(g_szName[]))
}

public client_disconnected(id)
{
	Save_Data(id, g_szName[id])
}

#if !defined _reapi_stocks_included
stock try_precache_player_model(const name[], &id = 0) {
	new model[128]
	formatex(model, charsmax(model), "models/player/%s/%sT.mdl", name, name)

	if(file_exists(model))
		id = precache_generic(model)

	static const extension[] = "T.mdl"
	#pragma unused extension

	copy(model[strlen(model) - charsmax(extension)], charsmax(model), ".mdl")
	return precache_model(model)
}
#endif

Аватар
Huehue
Извън линия
Модератор
Модератор
Мнения: 357
Регистриран на: 16 Яну 2017, 23:42
Местоположение: София
Се отблагодари: 9 пъти
Получена благодарност: 175 пъти
Обратна връзка:

Re: Menu Skin Girl

Мнение от Huehue » 22 Ное 2023, 21:05

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

// AMXXBG Request Topic: https://amxx-bg.info/forum/viewtopic.php?t=12407
// Comment the line if you don't want to use the setinfo as model set
//#define USE_SETINFO

// Comment this line to stop using the cstrike method of setting player models
#define USE_CSTRIKE_MODELSET

// Comment this line to stop the chat command
#define USE_CHAT_COMMAND

// Commant this line to stop option to stop the skin from menu
#define USE_MENU_OPTION


#include <amxmodx>
#include <fvault>
#include <reapi>

#if defined USE_CSTRIKE_MODELSET
#include <cstrike>
#endif

new const g_szFVault_DB[] = "DB_fVault_GirlSkins"

#define VERSION "1.0.0"

enum _:eModelsData
{
	SKIN_NAME[MAX_NAME_LENGTH],
	MODEL[MAX_NAME_LENGTH]
}

new const g_szModels_TT[][eModelsData] =
{
	{ "[TR] [GIRL SKIN] BARBIE #1", "barbi1" },
	{ "[TR] [GIRL SKIN] CAT #2", "cat1" },
	{ "[TR] [GIRL SKIN] KIT #3", "kit1" }
}

new const g_szModels_CT[][eModelsData] =
{
	{ "[CT] [GIRL SKIN] BARBIE #1", "barbi2" },
	{ "[CT] [GIRL SKIN] CAT #2", "cat2" },
	{ "[CT] [GIRL SKIN] KIT #3", "kit2" }
}

enum _:ePlayerTeamData
{
	TT,
	CT
}

new g_bCustomPlayerModel[MAX_CLIENTS + 1][ePlayerTeamData]
new g_szName[MAX_CLIENTS + 1][MAX_NAME_LENGTH]

new g_bActiveCustomPlayerModel[MAX_CLIENTS + 1]

#if !defined _reapi_stocks_included
#define rg_get_user_team(%0) get_member(%0, m_iTeam)
#endif

public plugin_init()
{
	register_plugin("xGirls Skin Menu [AMXXBG Request]", VERSION, "Huehue @ AMXX-BG.INFO")

	#if defined USE_SETINFO
	RegisterHookChain(RG_CBasePlayer_SetClientUserInfoModel, "CBasePlayer_SetClientUserInfoModel", false)
	#endif
	RegisterHookChain(RG_CBasePlayer_Spawn, "CBasePlayer_Spawn", true)
	
	register_clcmd("say /girl", "Command_GirlSkinMenu")
	register_clcmd("say_team /girl", "Command_GirlSkinMenu")

	#if defined USE_CHAT_COMMAND
	register_clcmd("say /girlskin", "Command_GirlSkinRemove")
	register_clcmd("say_team /girlskin", "Command_GirlSkinRemove")
	#endif
}

public plugin_precache()
{
	static i

	for (i = 0; i < sizeof g_szModels_CT; i++)
		try_precache_player_model(g_szModels_CT[i][MODEL])

	for (i = 0; i < sizeof g_szModels_TT; i++)
		try_precache_player_model(g_szModels_TT[i][MODEL])
}

#if defined USE_SETINFO
public CBasePlayer_SetClientUserInfoModel(const id, szInfoBuffer[], szNewModel[])
{
	if (g_bActiveCustomPlayerModel[id])
	{
		switch (rg_get_user_team(id))
		{
			case TEAM_TERRORIST:
			{
				SetHookChainArg(3, ATYPE_STRING, g_szModels_TT[g_bCustomPlayerModel[id][TT]][MODEL])
			}
			case TEAM_CT:
			{
				SetHookChainArg(3, ATYPE_STRING, g_szModels_CT[g_bCustomPlayerModel[id][CT]][MODEL])
			}
		}
	}
}
#endif

public CBasePlayer_Spawn(id)
{
	if (is_user_alive(id))
		set_task(0.5, "Update_User_Info", id) // Safecase just because no idea when your other models set
}

#if defined USE_CHAT_COMMAND
public Command_GirlSkinRemove(id)
{
	if (g_bActiveCustomPlayerModel[id])
	{
		g_bActiveCustomPlayerModel[id] = false

		#if defined USE_CSTRIKE_MODELSET
			cs_reset_user_model(id)
		#else
			#if defined USE_SETINFO
				set_user_info(id, "model", "")
				rg_reset_user_model(id)
				rh_update_user_info(id)
			#else
				rg_reset_user_model(id)
			#endif
		#endif

		client_print_color(id, print_team_red, "^4[Girl Skins] ^1You have ^3disabled ^1your ^4custom girl skin^1!")
	}
	else
	{
		if (g_bCustomPlayerModel[id][TT] != -1 || g_bCustomPlayerModel[id][CT] != -1)
		{
			g_bActiveCustomPlayerModel[id] = true
			Update_User_Info(id)
			client_print_color(id, print_team_blue, "^4[Girl Skins] ^1You have ^3enabled ^1your ^4custom girl skin^1!")
		}
		else
		{
			g_bActiveCustomPlayerModel[id] = false
			Command_GirlSkinMenu(id)
			client_print_color(id, print_team_grey, "^4[Girl Skins] ^1You haven't ^3selected ^1your skin yet.. ^4Please, choose it now.")
		}
	}
	return PLUGIN_HANDLED
}
#endif

public Command_GirlSkinMenu(id)
{
	static iMenu, i, iCallBack
	iMenu = menu_create(fmt("\wChoose Girl Skin for %s", rg_get_user_team(id) == TEAM_TERRORIST ? "\rTerrorist" : "\yCounter-Terrorist"), "GirlSkinMenu_Handler")

	#if defined USE_MENU_OPTION
	static szMenuItem[MAX_NAME_LENGTH * 2]
	#endif

	iCallBack = menu_makecallback("GirlSkinMenu_CallBack")

	switch (rg_get_user_team(id))
	{
		case TEAM_TERRORIST:
		{
			for (i = 0; i < sizeof g_szModels_TT; i++)
			{
				#if defined USE_MENU_OPTION
				if (i == charsmax(g_szModels_CT))
					formatex(szMenuItem, charsmax(szMenuItem), "%s^n", g_szModels_TT[i][SKIN_NAME])
				else
					formatex(szMenuItem, charsmax(szMenuItem), "%s", g_szModels_TT[i][SKIN_NAME])

				menu_additem(iMenu, szMenuItem, .callback = iCallBack)
				#else
				menu_additem(iMenu, g_szModels_TT[i][SKIN_NAME], .callback = iCallBack)
				#endif
			}
		}
		case TEAM_CT:
		{
			for (i = 0; i < sizeof g_szModels_CT; i++)
			{
				#if defined USE_MENU_OPTION
				if (i == charsmax(g_szModels_CT))
					formatex(szMenuItem, charsmax(szMenuItem), "%s^n", g_szModels_CT[i][SKIN_NAME])
				else
					formatex(szMenuItem, charsmax(szMenuItem), "%s", g_szModels_CT[i][SKIN_NAME])

				menu_additem(iMenu, szMenuItem, .callback = iCallBack)
				#else
				menu_additem(iMenu, g_szModels_CT[i][SKIN_NAME], .callback = iCallBack)
				#endif
			}
		}
	}

	#if defined USE_MENU_OPTION
	menu_additem(iMenu, "Remove Custom Model", "*", .callback = iCallBack)
	#endif

	menu_display(id, iMenu)
	return PLUGIN_HANDLED
}

public GirlSkinMenu_CallBack(id, iMenu, Item)
{
	#if defined USE_MENU_OPTION
	static szData[6], iAccess, iCallBack
	menu_item_getinfo(iMenu, Item, iAccess, szData, charsmax(szData), _, _, iCallBack)

	if (szData[0] == '*')
	{
		if (!g_bActiveCustomPlayerModel[id])
		{
			menu_item_setname(iMenu, Item, fmt("Choose your Skin First.."))
			return ITEM_DISABLED
		}
	}
	#endif

	if (g_bActiveCustomPlayerModel[id])
	{
		if (g_bCustomPlayerModel[id][TT] == Item && rg_get_user_team(id) == TEAM_TERRORIST)
		{
			#if defined USE_MENU_OPTION
			menu_item_setname(iMenu, Item, fmt("%s \r[SELECTED]%s", g_szModels_TT[Item][SKIN_NAME], ((Item == charsmax(g_szModels_TT)) ? "^n" : "")))
			#else
			menu_item_setname(iMenu, Item, fmt("%s \r[SELECTED]", g_szModels_TT[Item][SKIN_NAME]))
			#endif
			return ITEM_DISABLED
		}

		if (g_bCustomPlayerModel[id][CT] == Item && rg_get_user_team(id) == TEAM_CT)
		{
			#if defined USE_MENU_OPTION
			menu_item_setname(iMenu, Item, fmt("%s \r[SELECTED]%s", g_szModels_CT[Item][SKIN_NAME], ((Item == charsmax(g_szModels_CT)) ? "^n" : "")))
			#else
			menu_item_setname(iMenu, Item, fmt("%s \r[SELECTED]", g_szModels_CT[Item][SKIN_NAME]))
			#endif
			return ITEM_DISABLED
		}
	}
	return ITEM_ENABLED
}

public GirlSkinMenu_Handler(id, iMenu, Item)
{
	if (Item == MENU_EXIT)
	{
		menu_destroy(iMenu)
		return PLUGIN_HANDLED
	}

	#if defined USE_MENU_OPTION
	static szData[6], iAccess, iCallBack
	menu_item_getinfo(iMenu, Item, iAccess, szData, charsmax(szData), _, _, iCallBack)

	if (szData[0] == '*')
	{
		g_bActiveCustomPlayerModel[id] = false

		g_bCustomPlayerModel[id][TT] = g_bCustomPlayerModel[id][CT] = -1

		#if defined USE_CSTRIKE_MODELSET
			cs_reset_user_model(id)
		#else
			#if defined USE_SETINFO
				set_user_info(id, "model", "")
				rg_reset_user_model(id)
				rh_update_user_info(id)
			#else
				rg_reset_user_model(id)
			#endif
		#endif

		menu_destroy(iMenu)
		return PLUGIN_HANDLED
	}
	#endif

	g_bActiveCustomPlayerModel[id] = true

	switch(rg_get_user_team(id))
	{
		case TEAM_TERRORIST:
		{
			g_bCustomPlayerModel[id][TT] = Item
			client_print_color(id, print_team_default, "^4[Girl Skins] ^1You have selected skin ^3%s", g_szModels_TT[Item][SKIN_NAME])
		}
		case TEAM_CT:
		{
			g_bCustomPlayerModel[id][CT] = Item
			client_print_color(id, print_team_default, "^4[Girl Skins] ^1You have selected skin ^3%s", g_szModels_CT[Item][SKIN_NAME])
		}
	}

	Update_User_Info(id)

	menu_destroy(iMenu)
	return PLUGIN_HANDLED
}

public Update_User_Info(id)
{
	if (is_user_alive(id) && g_bActiveCustomPlayerModel[id])
	{
		switch (rg_get_user_team(id))
		{
			#if defined USE_CSTRIKE_MODELSET
				case TEAM_TERRORIST: cs_set_user_model(id, g_szModels_TT[g_bCustomPlayerModel[id][TT]][MODEL])
				case TEAM_CT: cs_set_user_model(id, g_szModels_CT[g_bCustomPlayerModel[id][CT]][MODEL])
			#else
				#if defined USE_SETINFO
					case TEAM_TERRORIST: set_user_info(id, "model", g_szModels_TT[g_bCustomPlayerModel[id][TT]][MODEL])
					case TEAM_CT: set_user_info(id, "model", g_szModels_CT[g_bCustomPlayerModel[id][CT]][MODEL])
				#else
					case TEAM_TERRORIST: rg_set_user_model(id, g_szModels_TT[g_bCustomPlayerModel[id][TT]][MODEL])
					case TEAM_CT: rg_set_user_model(id, g_szModels_CT[g_bCustomPlayerModel[id][CT]][MODEL])
				#endif
			#endif
		}

		#if defined USE_SETINFO
		rh_update_user_info(id)
		#endif

		if (~get_user_flags(id) & ADMIN_LEVEL_D)
		{
			remove_user_flags(id, read_flags("z"))
			set_user_flags(id, read_flags("p"))
		}
	}
}

// Save & Load data
public Save_Data(id, szName[])
{
	new szData[64]
	formatex(szData, charsmax(szData), "%i#%i#%i", g_bActiveCustomPlayerModel[id], g_bCustomPlayerModel[id][TT], g_bCustomPlayerModel[id][CT])
	fvault_set_data(g_szFVault_DB, szName, szData)
}

public Load_Data(szName[], id)
{
	if (!is_user_connected(id))
		return
	
	new szData[64]

	if(fvault_get_data(g_szFVault_DB, szName, szData, charsmax(szData)))
	{
		parse_loaded_data(id, szData, charsmax(szData))
	} 
	else 
	{
		register_new_player(id)
	}
}

public parse_loaded_data(id, szData[], iLen)
{
	replace_all(szData, iLen, "#", " ")
				
	new szActiveCustomPlayerModel[10], szCustomModelTT[10], szCustomModelCT[10]
	parse(szData, szActiveCustomPlayerModel, charsmax(szActiveCustomPlayerModel), szCustomModelTT, charsmax(szCustomModelTT), szCustomModelCT, charsmax(szCustomModelCT))
	
	g_bActiveCustomPlayerModel[id] = str_to_num(szActiveCustomPlayerModel) == 1 ? true : false
	g_bCustomPlayerModel[id][TT] = str_to_num(szCustomModelTT)
	g_bCustomPlayerModel[id][CT] = str_to_num(szCustomModelCT)

	Update_User_Info(id)
}

public register_new_player(id)
{
	g_bActiveCustomPlayerModel[id] = false
	g_bCustomPlayerModel[id][TT] = -1
	g_bCustomPlayerModel[id][CT] = -1
	#if defined USE_CSTRIKE_MODELSET
		cs_reset_user_model(id)
	#else
		#if defined USE_SETINFO
		set_user_info(id, "model", "")
		rh_update_user_info(id)
		#else
		rg_reset_user_model(id)
		#endif
	#endif
}

public client_infochanged(id)
{
	if (!is_user_connected(id))
		return PLUGIN_HANDLED
	
	new szNewName[32], szOldName[32]
	get_user_name(id, szOldName, charsmax(szOldName))
	get_user_info(id, "name", szNewName, charsmax(szNewName))
	
	if (!equal(szNewName, szOldName))
	{
		g_szName[id] = szNewName
		Save_Data(id, szOldName)
		set_task(0.1, "Load_Data", id, szNewName, sizeof(szNewName))
		return PLUGIN_HANDLED
	}
	
	return PLUGIN_HANDLED
}

public client_putinserver(id)
{
	get_user_name(id, g_szName[id], charsmax(g_szName[]))
	set_task(0.1, "Load_Data", id, g_szName[id], sizeof(g_szName[]))
}

public client_disconnected(id)
{
	Save_Data(id, g_szName[id])
}

#if !defined _reapi_stocks_included
stock try_precache_player_model(const name[], &id = 0) {
	new model[128]
	formatex(model, charsmax(model), "models/player/%s/%sT.mdl", name, name)

	if(file_exists(model))
		id = precache_generic(model)

	static const extension[] = "T.mdl"
	#pragma unused extension

	copy(model[strlen(model) - charsmax(extension)], charsmax(model), ".mdl")
	return precache_model(model)
}
#endif
LOYAL TO THE OATH OF OMERTА̀

Зад монитора мъжкари, това не го разбирам..
На живо сте мишкари, това го гарантирам!
Седиш на 30 метра от мен като препариран!
Ако има нещо брат, номерът ми е блокиран..

My GitHub Profile
GitHub

My AMXX Includes Collection
AMXX Include Libraries

My Steam Profile (from SteamDB)
  • Value: 4179€
  • Games owned: 1855
  • Games played: 754 (40%)
  • Hours on record: 4,994.9h

Аватар
cgozzie75
Извън линия
Потребител
Потребител
Мнения: 47
Регистриран на: 08 Ное 2023, 12:46
Се отблагодари: 25 пъти
Получена благодарност: 2 пъти

Re: Menu Skin Girl

Мнение от cgozzie75 » 22 Ное 2023, 21:38

Страхотно стана по-добре от това няма и на къде големи благодарности... Не затваряй още темата нека 2-3 дена да се тества и с хора и ще пиша се пак знам ли то се нещо изниква но иначе е топ и отново благодаря за направата на плъгина.. :clap: :beer: :nicecode: :tnx:

Аватар
cgozzie75
Извън линия
Потребител
Потребител
Мнения: 47
Регистриран на: 08 Ное 2023, 12:46
Се отблагодари: 25 пъти
Получена благодарност: 2 пъти

Re: Menu Skin Girl

Мнение от cgozzie75 » 05 Дек 2023, 14:29

Работи страхотно но сега искам същия но да си добавям оръжия вместо скиновете на играчите ще може ли да го направиш...Точно колко скина не съм решил още но 10 да се напишат ще е като за начало ако трябва да се добавят още мисля че ще се справя да ги добавям после..А те ще бъдат ето тези..

"ak47" "m4a1" "awp" "deagle" "knife" "famas" "galil" + 3 те гранати // Моделите да са v_ и p_

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

// AMXXBG Request Topic: https://amxx-bg.info/forum/viewtopic.php?t=12407
// Comment the line if you don't want to use the setinfo as model set
//#define USE_SETINFO

// Comment this line to stop using the cstrike method of setting player models
#define USE_CSTRIKE_MODELSET

// Comment this line to stop the chat command
#define USE_CHAT_COMMAND

// Commant this line to stop option to stop the skin from menu
#define USE_MENU_OPTION


#include <amxmodx>
#include <fvault>
#include <reapi>

#if defined USE_CSTRIKE_MODELSET
#include <cstrike>
#endif

new const g_szFVault_DB[] = "DB_fVault_GirlSkins"

#define VERSION "1.0.0"

enum _:eModelsData
{
	SKIN_NAME[MAX_NAME_LENGTH],
	MODEL[MAX_NAME_LENGTH]
}

new const g_szModels_TT[][eModelsData] =
{
	{ "[TR] [GIRL SKIN] BARBIE #1", "barbi1" },
	{ "[TR] [GIRL SKIN] CATWOMAN #2", "cat1" },
	{ "[TR] [GIRL SKIN] THE KILLER #3", "kit1" },
	{ "[TR] [GIRL SKIN] SNOW WHITE #4", "detka_tt" }
}

new const g_szModels_CT[][eModelsData] =
{
	{ "[CT] [GIRL SKIN] BARBIE #1", "barbi2" },
	{ "[CT] [GIRL SKIN] CATWOMAN #2", "cat2" },
	{ "[CT] [GIRL SKIN] THE KILLER #3", "kit2" },
	{ "[CT] [GIRL SKIN] SNOW WHITE #4", "detka_ct" }
}

enum _:ePlayerTeamData
{
	TT,
	CT
}

new g_bCustomPlayerModel[MAX_CLIENTS + 1][ePlayerTeamData]
new g_szName[MAX_CLIENTS + 1][MAX_NAME_LENGTH]

new g_bActiveCustomPlayerModel[MAX_CLIENTS + 1]

#if !defined _reapi_stocks_included
#define rg_get_user_team(%0) get_member(%0, m_iTeam)
#endif

public plugin_init()
{
	register_plugin("xGirls Skin Menu [AMXXBG Request]", VERSION, "Huehue @ AMXX-BG.INFO")

	#if defined USE_SETINFO
	RegisterHookChain(RG_CBasePlayer_SetClientUserInfoModel, "CBasePlayer_SetClientUserInfoModel", false)
	#endif
	RegisterHookChain(RG_CBasePlayer_Spawn, "CBasePlayer_Spawn", true)
	
	register_clcmd("say /girl", "Command_GirlSkinMenu")
	register_clcmd("say_team /girl", "Command_GirlSkinMenu")

	#if defined USE_CHAT_COMMAND
	register_clcmd("say /girlskin", "Command_GirlSkinRemove")
	register_clcmd("say_team /girlskin", "Command_GirlSkinRemove")
	#endif
}

public plugin_precache()
{
	static i

	for (i = 0; i < sizeof g_szModels_CT; i++)
		try_precache_player_model(g_szModels_CT[i][MODEL])

	for (i = 0; i < sizeof g_szModels_TT; i++)
		try_precache_player_model(g_szModels_TT[i][MODEL])
}

#if defined USE_SETINFO
public CBasePlayer_SetClientUserInfoModel(const id, szInfoBuffer[], szNewModel[])
{
	if (g_bActiveCustomPlayerModel[id])
	{
		switch (rg_get_user_team(id))
		{
			case TEAM_TERRORIST:
			{
				SetHookChainArg(3, ATYPE_STRING, g_szModels_TT[g_bCustomPlayerModel[id][TT]][MODEL])
			}
			case TEAM_CT:
			{
				SetHookChainArg(3, ATYPE_STRING, g_szModels_CT[g_bCustomPlayerModel[id][CT]][MODEL])
			}
		}
	}
}
#endif

public CBasePlayer_Spawn(id)
{
	if (is_user_alive(id))
		set_task(0.5, "Update_User_Info", id) // Safecase just because no idea when your other models set
}

#if defined USE_CHAT_COMMAND
public Command_GirlSkinRemove(id)
{
	if (g_bActiveCustomPlayerModel[id])
	{
		g_bActiveCustomPlayerModel[id] = false

		#if defined USE_CSTRIKE_MODELSET
			cs_reset_user_model(id)
		#else
			#if defined USE_SETINFO
				set_user_info(id, "model", "")
				rg_reset_user_model(id)
				rh_update_user_info(id)
			#else
				rg_reset_user_model(id)
			#endif
		#endif

		client_print_color(id, print_team_red, "^4[Girl Skins] ^1You have ^3disabled ^1your ^4custom girl skin^1!")
	}
	else
	{
		if (g_bCustomPlayerModel[id][TT] != -1 || g_bCustomPlayerModel[id][CT] != -1)
		{
			g_bActiveCustomPlayerModel[id] = true
			Update_User_Info(id)
			client_print_color(id, print_team_blue, "^4[Girl Skins] ^1You have ^3enabled ^1your ^4custom girl skin^1!")
		}
		else
		{
			g_bActiveCustomPlayerModel[id] = false
			Command_GirlSkinMenu(id)
			client_print_color(id, print_team_grey, "^4[Girl Skins] ^1You haven't ^3selected ^1your skin yet.. ^4Please, choose it now.")
		}
	}
	return PLUGIN_HANDLED
}
#endif

public Command_GirlSkinMenu(id)
{
	static iMenu, i, iCallBack
	iMenu = menu_create(fmt("\wChoose Girl Skin for %s", rg_get_user_team(id) == TEAM_TERRORIST ? "\rTerrorist" : "\yCounter-Terrorist"), "GirlSkinMenu_Handler")

	#if defined USE_MENU_OPTION
	static szMenuItem[MAX_NAME_LENGTH * 2]
	#endif

	iCallBack = menu_makecallback("GirlSkinMenu_CallBack")

	switch (rg_get_user_team(id))
	{
		case TEAM_TERRORIST:
		{
			for (i = 0; i < sizeof g_szModels_TT; i++)
			{
				#if defined USE_MENU_OPTION
				if (i == charsmax(g_szModels_CT))
					formatex(szMenuItem, charsmax(szMenuItem), "%s^n", g_szModels_TT[i][SKIN_NAME])
				else
					formatex(szMenuItem, charsmax(szMenuItem), "%s", g_szModels_TT[i][SKIN_NAME])

				menu_additem(iMenu, szMenuItem, .callback = iCallBack)
				#else
				menu_additem(iMenu, g_szModels_TT[i][SKIN_NAME], .callback = iCallBack)
				#endif
			}
		}
		case TEAM_CT:
		{
			for (i = 0; i < sizeof g_szModels_CT; i++)
			{
				#if defined USE_MENU_OPTION
				if (i == charsmax(g_szModels_CT))
					formatex(szMenuItem, charsmax(szMenuItem), "%s^n", g_szModels_CT[i][SKIN_NAME])
				else
					formatex(szMenuItem, charsmax(szMenuItem), "%s", g_szModels_CT[i][SKIN_NAME])

				menu_additem(iMenu, szMenuItem, .callback = iCallBack)
				#else
				menu_additem(iMenu, g_szModels_CT[i][SKIN_NAME], .callback = iCallBack)
				#endif
			}
		}
	}

	#if defined USE_MENU_OPTION
	menu_additem(iMenu, "Remove Custom Model", "*", .callback = iCallBack)
	#endif

	menu_display(id, iMenu)
	return PLUGIN_HANDLED
}

public GirlSkinMenu_CallBack(id, iMenu, Item)
{
	#if defined USE_MENU_OPTION
	static szData[6], iAccess, iCallBack
	menu_item_getinfo(iMenu, Item, iAccess, szData, charsmax(szData), _, _, iCallBack)

	if (szData[0] == '*')
	{
		if (!g_bActiveCustomPlayerModel[id])
		{
			menu_item_setname(iMenu, Item, fmt("Choose your Skin First.."))
			return ITEM_DISABLED
		}
	}
	#endif

	if (g_bActiveCustomPlayerModel[id])
	{
		if (g_bCustomPlayerModel[id][TT] == Item && rg_get_user_team(id) == TEAM_TERRORIST)
		{
			#if defined USE_MENU_OPTION
			menu_item_setname(iMenu, Item, fmt("%s \r[SELECTED]%s", g_szModels_TT[Item][SKIN_NAME], ((Item == charsmax(g_szModels_TT)) ? "^n" : "")))
			#else
			menu_item_setname(iMenu, Item, fmt("%s \r[SELECTED]", g_szModels_TT[Item][SKIN_NAME]))
			#endif
			return ITEM_DISABLED
		}

		if (g_bCustomPlayerModel[id][CT] == Item && rg_get_user_team(id) == TEAM_CT)
		{
			#if defined USE_MENU_OPTION
			menu_item_setname(iMenu, Item, fmt("%s \r[SELECTED]%s", g_szModels_CT[Item][SKIN_NAME], ((Item == charsmax(g_szModels_CT)) ? "^n" : "")))
			#else
			menu_item_setname(iMenu, Item, fmt("%s \r[SELECTED]", g_szModels_CT[Item][SKIN_NAME]))
			#endif
			return ITEM_DISABLED
		}
	}
	return ITEM_ENABLED
}

public GirlSkinMenu_Handler(id, iMenu, Item)
{
	if (Item == MENU_EXIT)
	{
		menu_destroy(iMenu)
		return PLUGIN_HANDLED
	}

	#if defined USE_MENU_OPTION
	static szData[6], iAccess, iCallBack
	menu_item_getinfo(iMenu, Item, iAccess, szData, charsmax(szData), _, _, iCallBack)

	if (szData[0] == '*')
	{
		g_bActiveCustomPlayerModel[id] = false

		g_bCustomPlayerModel[id][TT] = g_bCustomPlayerModel[id][CT] = -1

		#if defined USE_CSTRIKE_MODELSET
			cs_reset_user_model(id)
		#else
			#if defined USE_SETINFO
				set_user_info(id, "model", "")
				rg_reset_user_model(id)
				rh_update_user_info(id)
			#else
				rg_reset_user_model(id)
			#endif
		#endif

		menu_destroy(iMenu)
		return PLUGIN_HANDLED
	}
	#endif

	g_bActiveCustomPlayerModel[id] = true

	switch(rg_get_user_team(id))
	{
		case TEAM_TERRORIST:
		{
			g_bCustomPlayerModel[id][TT] = Item
			client_print_color(id, print_team_default, "^4[Girl Skins] ^1You have selected skin ^3%s", g_szModels_TT[Item][SKIN_NAME])
		}
		case TEAM_CT:
		{
			g_bCustomPlayerModel[id][CT] = Item
			client_print_color(id, print_team_default, "^4[Girl Skins] ^1You have selected skin ^3%s", g_szModels_CT[Item][SKIN_NAME])
		}
	}

	Update_User_Info(id)

	menu_destroy(iMenu)
	return PLUGIN_HANDLED
}

public Update_User_Info(id)
{
	if (is_user_alive(id) && g_bActiveCustomPlayerModel[id])
	{
		switch (rg_get_user_team(id))
		{
			#if defined USE_CSTRIKE_MODELSET
				case TEAM_TERRORIST: cs_set_user_model(id, g_szModels_TT[g_bCustomPlayerModel[id][TT]][MODEL])
				case TEAM_CT: cs_set_user_model(id, g_szModels_CT[g_bCustomPlayerModel[id][CT]][MODEL])
			#else
				#if defined USE_SETINFO
					case TEAM_TERRORIST: set_user_info(id, "model", g_szModels_TT[g_bCustomPlayerModel[id][TT]][MODEL])
					case TEAM_CT: set_user_info(id, "model", g_szModels_CT[g_bCustomPlayerModel[id][CT]][MODEL])
				#else
					case TEAM_TERRORIST: rg_set_user_model(id, g_szModels_TT[g_bCustomPlayerModel[id][TT]][MODEL])
					case TEAM_CT: rg_set_user_model(id, g_szModels_CT[g_bCustomPlayerModel[id][CT]][MODEL])
				#endif
			#endif
		}

		#if defined USE_SETINFO
		rh_update_user_info(id)
		#endif

		if (~get_user_flags(id) & ADMIN_LEVEL_D)
		{
			remove_user_flags(id, read_flags("z"))
			set_user_flags(id, read_flags("p"))
		}
	}
}

// Save & Load data
public Save_Data(id, szName[])
{
	new szData[64]
	formatex(szData, charsmax(szData), "%i#%i#%i", g_bActiveCustomPlayerModel[id], g_bCustomPlayerModel[id][TT], g_bCustomPlayerModel[id][CT])
	fvault_set_data(g_szFVault_DB, szName, szData)
}

public Load_Data(szName[], id)
{
	if (!is_user_connected(id))
		return
	
	new szData[64]

	if(fvault_get_data(g_szFVault_DB, szName, szData, charsmax(szData)))
	{
		parse_loaded_data(id, szData, charsmax(szData))
	} 
	else 
	{
		register_new_player(id)
	}
}

public parse_loaded_data(id, szData[], iLen)
{
	replace_all(szData, iLen, "#", " ")
				
	new szActiveCustomPlayerModel[10], szCustomModelTT[10], szCustomModelCT[10]
	parse(szData, szActiveCustomPlayerModel, charsmax(szActiveCustomPlayerModel), szCustomModelTT, charsmax(szCustomModelTT), szCustomModelCT, charsmax(szCustomModelCT))
	
	g_bActiveCustomPlayerModel[id] = str_to_num(szActiveCustomPlayerModel) == 1 ? true : false
	g_bCustomPlayerModel[id][TT] = str_to_num(szCustomModelTT)
	g_bCustomPlayerModel[id][CT] = str_to_num(szCustomModelCT)

	Update_User_Info(id)
}

public register_new_player(id)
{
	g_bActiveCustomPlayerModel[id] = false
	g_bCustomPlayerModel[id][TT] = -1
	g_bCustomPlayerModel[id][CT] = -1
	#if defined USE_CSTRIKE_MODELSET
		cs_reset_user_model(id)
	#else
		#if defined USE_SETINFO
		set_user_info(id, "model", "")
		rh_update_user_info(id)
		#else
		rg_reset_user_model(id)
		#endif
	#endif
}

public client_infochanged(id)
{
	if (!is_user_connected(id))
		return PLUGIN_HANDLED
	
	new szNewName[32], szOldName[32]
	get_user_name(id, szOldName, charsmax(szOldName))
	get_user_info(id, "name", szNewName, charsmax(szNewName))
	
	if (!equal(szNewName, szOldName))
	{
		g_szName[id] = szNewName
		Save_Data(id, szOldName)
		set_task(0.1, "Load_Data", id, szNewName, sizeof(szNewName))
		return PLUGIN_HANDLED
	}
	
	return PLUGIN_HANDLED
}

public client_putinserver(id)
{
	get_user_name(id, g_szName[id], charsmax(g_szName[]))
	set_task(0.1, "Load_Data", id, g_szName[id], sizeof(g_szName[]))
}

public client_disconnected(id)
{
	Save_Data(id, g_szName[id])
}

#if !defined _reapi_stocks_included
stock try_precache_player_model(const name[], &id = 0) {
	new model[128]
	formatex(model, charsmax(model), "models/player/%s/%sT.mdl", name, name)

	if(file_exists(model))
		id = precache_generic(model)

	static const extension[] = "T.mdl"
	#pragma unused extension

	copy(model[strlen(model) - charsmax(extension)], charsmax(model), ".mdl")
	return precache_model(model)
}
#endif

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

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

Кой е на линия

Потребители разглеждащи този форум: Bing [Bot] и 6 госта