Raised This Month: $12 Target: $400
 3% 

CSO Costumes change currency


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
nades
Junior Member
Join Date: Oct 2020
Old 10-08-2020 , 15:07   CSO Costumes change currency
Reply With Quote #1

Code:
#include <amxmodx>
#include <amxmisc>
#include <cs_player_models_api>
#include <hamsandwich>
#include <fakemeta>
#include <nvault>
#include <sqlx>

#define PLUGIN "CSO Costumes"
#define VERSION "3.8"
#define AUTHOR "Smilex_Gamer"

//#define ZP_SUPPORT

#if defined ZP_SUPPORT
	#include <zombieplague>
#endif

#if !defined client_disconnected
	#define client_disconnected client_disconnect
#endif

#define PREFIX_CHAT "!g[CSO Costumes]!n"
#define PREFIX_MENU "\r[CSO Costumes]"

#define MAX_COSTUMES 257

#if defined ZP_SUPPORT
	new Total_Skin = 1
#else
	new Total_SkinCT = 1, Total_SkinTR = 1
#endif

new File[64], Total_Head = 1, Total_Back = 1, Total_Pelvis = 1
new Handle:g_SqlTuple, g_Error[512], g_Vault, g_szAuthID[33][35]

enum _:Configuration
{
	Cash_per_Kill,
	Saving_Method,
	Host[128],
	User[128],
	Pass[128],
	Db[128],
	Table[128],
	Vault[128],
	ZP43_Support
}

enum _:Vars
{
	g_name[128],
	g_price,
	g_model[128],
	g_anim,
	g_preview[128]
}

enum _:Vars2
{
#if defined ZP_SUPPORT
	g_skin,
	g_acquiredSkin[MAX_COSTUMES],
#else
	g_skinct,
	g_skintr,
	g_acquiredSkinCT[MAX_COSTUMES],
	g_acquiredSkinTR[MAX_COSTUMES],
#endif
	g_head,
	g_back,
	g_pelvis,
	g_cash,
	g_buying,
	g_costume,
	g_CostumeModelHead,
	g_CostumeModelBack,
	g_CostumeModelPelvis,
	g_acquiredHead[MAX_COSTUMES],
	g_acquiredBack[MAX_COSTUMES],
	g_acquiredPelvis[MAX_COSTUMES],
	bool:is_connected,
	bool:is_bot_or_hltv
}

#if defined ZP_SUPPORT
	new Costumes_Skin[MAX_COSTUMES][Vars]
#else
	new Costumes_SkinCT[MAX_COSTUMES][Vars], Costumes_SkinTR[MAX_COSTUMES][Vars]
#endif

new Costumes_Head[MAX_COSTUMES][Vars], Costumes_Back[MAX_COSTUMES][Vars], Costumes_Pelvis[MAX_COSTUMES][Vars], g_vars[33][Vars2], g_settings[Configuration]

#if defined ZP_SUPPORT
	const y = 1; const z = 3
#else
	const y = 2; const z = 4
#endif

public plugin_init()
{
	register_plugin(PLUGIN, VERSION, AUTHOR)
	register_cvar("CSOCostumes", VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED)

	register_dictionary("cso_costumes.txt")

	RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn_Post", 1)
	register_event("DeathMsg", "Event_DeathMsg", "a")

	register_clcmd("say /costumes", "clcmd_costumes")
	register_clcmd("say_team /costumes", "clcmd_costumes")
	register_clcmd("say /inventory", "clcmd_inventory")
	register_clcmd("say_team /inventory", "clcmd_inventory")
	register_clcmd("say /shop", "clcmd_shop")
	register_clcmd("say_team /shop", "clcmd_shop")
	register_clcmd("say /deactivate", "clcmd_deactivate")
	register_clcmd("say_team /deactivate", "clcmd_deactivate")
	register_clcmd("say /cash", "clcmd_cash")
	register_clcmd("say_team /cash", "clcmd_cash")
	register_concmd("costumes_give_cash", "Cmd_GiveCash", ADMIN_RCON, "<nick|#userid> <amount>")

	if(g_settings[Saving_Method] != 0)
	{
		register_event("TextMsg", "Save_Data", "a", "2=#Game_Commencing", "2=#Game_will_restart_in")
		register_event("SendAudio", "Save_Data", "a", "2=%!MRAD_terwin", "2=%!MRAD_ctwin", "2=%!MRAD_rounddraw")
		register_forward(FM_Sys_Error, "Save_Data")
		register_forward(FM_GameShutdown, "Save_Data")
		register_forward(FM_ServerDeactivate, "Save_Data")

		switch(g_settings[Saving_Method])
		{
			case 1: Nvault_Init()
			case 2: MySql_Init()
		}
	}
}

public plugin_precache()
{
	new cfgDir[32]
	get_configsdir(cfgDir, charsmax(cfgDir))
	formatex(File, charsmax(File), "%s/costumes.ini", cfgDir)

	Load_Configuration(0)
	Load_Costumes()

#if defined ZP_SUPPORT
	for(new i = 1; i < Total_Skin; i++)
	{
		precache_player_model(Costumes_Skin[i][g_model])
	}
#else
	for(new i = 1; i < Total_SkinCT; i++)
	{
		precache_player_model(Costumes_SkinCT[i][g_model])
	}

	for(new i = 1; i < Total_SkinTR; i++)
	{
		precache_player_model(Costumes_SkinTR[i][g_model])
	}
#endif

	for(new i = 1; i < Total_Head; i++)
	{
		precache_model(Costumes_Head[i][g_model])
	}

	for(new i = 1; i < Total_Back; i++)
	{
		precache_model(Costumes_Back[i][g_model])
	}

	for(new i = 1; i < Total_Pelvis; i++)
	{
		precache_model(Costumes_Pelvis[i][g_model])
	}
}

public plugin_end()
{
	switch(g_settings[Saving_Method])
	{
		case 1: nvault_close(g_Vault)
		case 2: SQL_FreeHandle(g_SqlTuple)
	}
}

Load_Configuration(MySQL_to_Nvault)
{
	if(file_exists(File))
	{
		new sfLineData[256]
		new file = fopen(File, "rt")

		while(file && !feof(file))
		{
			fgets(file, sfLineData, charsmax(sfLineData))

			if(sfLineData[0] == ';' || strlen(sfLineData) <= 2 || (sfLineData[0] == '/' && sfLineData[1] == '/'))
			{
				continue
			}

			new Config[32], Value[128]
			parse(sfLineData, Config, charsmax(Config), Value, charsmax(Value))
			new value = str_to_num(Value)

			if(MySQL_to_Nvault)
			{
				if(equal(Config, "VAULT"))
				{
					if(!Value[0])
					{
						server_print("[CSO Costumes] No Vault name was defined! Continuing with the default setting: ^"cso_costumes^".")
						copy(g_settings[Vault], charsmax(g_settings[Vault]), "cso_costumes")
					}
					else
					{
						copy(g_settings[Vault], charsmax(g_settings[Vault]), Value)
					}

					Nvault_Init()
					break
				}
				else
				{
					continue
				}
			}

			if(equal(Config, "CASH_PER_KILL"))
			{
				if(value <= 0)
				{
					server_print("[CSO Costumes] Cash per kill is less than or equal to 0! Continuing with the default setting: 5.")
					g_settings[Cash_per_Kill] = 5
				}
				else
				{
					g_settings[Cash_per_Kill] = value
				}

				continue
			}
			else if(equal(Config, "SAVING_METHOD"))
			{
				switch(value)
				{
					case 0..2: g_settings[Saving_Method] = value
					default:
					{
						server_print("[CSO Costumes] No valid saving system was defined! Continuing without saving system.")
						g_settings[Saving_Method] = 0
					}
				}

				continue
			}
			else if(equal(Config, "ZP43_SUPPORT"))
			{
			#if defined ZP_SUPPORT
				switch(value)
				{
					case 0,1: g_settings[ZP43_Support] = value
					default:
					{
						server_print("[CSO Costumes] No valid input was defined! Continuing without Zombie Plague 4.3 Support.")
						g_settings[ZP43_Support] = 0
					}
				}
			#else
				if(value >= 1)
				{
					server_print("[CSO Costumes] You need to edit the source code and uncomment ^"#define ZP_SUPPORT^" in order to support Zombie Plague 4.3 (line 13).")
				}
			#endif

				continue
			}

			switch(g_settings[Saving_Method])
			{
				case 0: break
				case 1:
				{
					if(equal(Config, "VAULT"))
					{
						if(!Value[0])
						{
							server_print("[CSO Costumes] No Vault name was defined! Continuing with the default setting: ^"cso_costumes^".")
							copy(g_settings[Vault], charsmax(g_settings[Vault]), "cso_costumes")
						}
						else
						{
							copy(g_settings[Vault], charsmax(g_settings[Vault]), Value)
						}

						break
					}
				}
				case 2:
				{
					if(equal(Config, "HOST"))
					{
						if(!Value[0])
						{
							server_print("[CSO Costumes] No Hostname was defined! Continuing with Nvault saving system.")
							g_settings[Saving_Method] = 1
						}
						else
						{
							copy(g_settings[Host], charsmax(g_settings[Host]), Value)
						}
					}
					else if(equal(Config, "USER"))
					{
						if(!Value[0])
						{
							server_print("[CSO Costumes] No Username was defined! Continuing with Nvault saving system.")
							g_settings[Saving_Method] = 1
						}
						else
						{
							copy(g_settings[User], charsmax(g_settings[User]), Value)
						}
					}
					else if(equal(Config, "PASSWORD"))
					{
						copy(g_settings[Pass], charsmax(g_settings[Pass]), Value)
					}
					else if(equal(Config, "DATABASE"))
					{
						if(!Value[0])
						{
							server_print("[CSO Costumes] No Database name was defined! Continuing with Nvault saving system.")
							g_settings[Saving_Method] = 1
						}
						else
						{
							copy(g_settings[Db], charsmax(g_settings[Db]), Value)
						}
					}
					else if(equal(Config, "TABLE"))
					{
						if(!Value[0])
						{
							server_print("[CSO Costumes] No Table name was defined! Continuing with the default setting: ^"cso_costumes^".")
							copy(g_settings[Table], charsmax(g_settings[Table]), "cso_costumes")
						}
						else
						{
							copy(g_settings[Table], charsmax(g_settings[Table]), Value)
						}

						break
					}
				}
			}
		}

		if(file && !MySQL_to_Nvault)
		{
			server_print("[CSO Costumes] Configuration loaded")
			fclose(file)
		}
	}
	else
	{
		set_fail_state("File ^"costumes.ini^" is missing! Plugin stopped.")
	}
}

Load_Costumes()
{
	if(file_exists(File))
	{
		new sfLineData[256], TotalCostumes = 0
		new file = fopen(File, "rt")

		while(file && !feof(file))
		{
			fgets(file, sfLineData, charsmax(sfLineData))

			if(sfLineData[0] != '"')
			{
				continue
			}

			new Costume[10], CostumeName[128], CostumePrice[10], CostumeModel[128], CostumeAnim[10], CostumePreview[128]
			parse(sfLineData, Costume, charsmax(Costume), CostumeName, charsmax(CostumeName), CostumePrice, charsmax(CostumePrice), CostumeModel, charsmax(CostumeModel), CostumeAnim, charsmax(CostumeAnim), CostumePreview, charsmax(CostumePreview))

		#if defined ZP_SUPPORT
			if(equal(Costume, "SkinCT") || equal(Costume, "SkinTR"))
			{
				copy(Costumes_Skin[Total_Skin][g_name], charsmax(Costumes_Skin[][g_name]), CostumeName)
				Costumes_Skin[Total_Skin][g_price] = str_to_num(CostumePrice)
				copy(Costumes_Skin[Total_Skin][g_model], charsmax(Costumes_Skin[][g_model]), CostumeModel)
				copy(Costumes_Skin[Total_Skin][g_preview], charsmax(Costumes_Skin[][g_model]), CostumePreview)

				Total_Skin += 1
				TotalCostumes += 1
			}
		#else
			if(equal(Costume, "SkinCT"))
			{
				copy(Costumes_SkinCT[Total_SkinCT][g_name], charsmax(Costumes_SkinCT[][g_name]), CostumeName)
				Costumes_SkinCT[Total_SkinCT][g_price] = str_to_num(CostumePrice)
				copy(Costumes_SkinCT[Total_SkinCT][g_model], charsmax(Costumes_SkinCT[][g_model]), CostumeModel)
				copy(Costumes_SkinCT[Total_SkinCT][g_preview], charsmax(Costumes_SkinCT[][g_preview]), CostumePreview)

				Total_SkinCT += 1
				TotalCostumes += 1
			}
			else if(equal(Costume, "SkinTR"))
			{
				copy(Costumes_SkinTR[Total_SkinTR][g_name], charsmax(Costumes_SkinTR[][g_name]), CostumeName)
				Costumes_SkinTR[Total_SkinTR][g_price] = str_to_num(CostumePrice)
				copy(Costumes_SkinTR[Total_SkinTR][g_model], charsmax(Costumes_SkinTR[][g_model]), CostumeModel)
				copy(Costumes_SkinTR[Total_SkinTR][g_preview], charsmax(Costumes_SkinTR[][g_preview]), CostumePreview)

				Total_SkinTR += 1
				TotalCostumes += 1
			}
		#endif
			else if(equal(Costume, "Head"))
			{
				copy(Costumes_Head[Total_Head][g_name], charsmax(Costumes_Head[][g_name]), CostumeName)
				Costumes_Head[Total_Head][g_price] = str_to_num(CostumePrice)
				copy(Costumes_Head[Total_Head][g_model], charsmax(Costumes_Head[][g_model]), CostumeModel)
				Costumes_Head[Total_Head][g_anim] = str_to_num(CostumeAnim)
				copy(Costumes_Head[Total_Head][g_preview], charsmax(Costumes_Head[][g_preview]), CostumePreview)

				Total_Head += 1
				TotalCostumes += 1
			}
			else if(equal(Costume, "Back"))
			{
				copy(Costumes_Back[Total_Back][g_name], charsmax(Costumes_Back[][g_name]), CostumeName)
				Costumes_Back[Total_Back][g_price] = str_to_num(CostumePrice)
				copy(Costumes_Back[Total_Back][g_model], charsmax(Costumes_Back[][g_model]), CostumeModel)
				Costumes_Back[Total_Back][g_anim] = str_to_num(CostumeAnim)
				copy(Costumes_Back[Total_Back][g_preview], charsmax(Costumes_Back[][g_preview]), CostumePreview)

				Total_Back += 1
				TotalCostumes += 1
			}
			else if(equal(Costume, "Pelvis"))
			{
				copy(Costumes_Pelvis[Total_Pelvis][g_name], charsmax(Costumes_Pelvis[][g_name]), CostumeName)
				Costumes_Pelvis[Total_Pelvis][g_price] = str_to_num(CostumePrice)
				copy(Costumes_Pelvis[Total_Pelvis][g_model], charsmax(Costumes_Pelvis[][g_model]), CostumeModel)
				Costumes_Pelvis[Total_Pelvis][g_anim] = str_to_num(CostumeAnim)
				copy(Costumes_Pelvis[Total_Pelvis][g_preview], charsmax(Costumes_Pelvis[][g_preview]), CostumePreview)

				Total_Pelvis += 1
				TotalCostumes += 1
			}

			if(TotalCostumes >= MAX_COSTUMES-1)
			{
				server_print("[CSO Costumes] Costumes limit reached [%d]", MAX_COSTUMES-1)
				break
			}
		}

		if(file)
		{
			server_print("[CSO Costumes] %d Costumes loaded", TotalCostumes)
			fclose(file)
		}
	}
}

#if defined ZP_SUPPORT
public zp_user_infected_post(id)
{
	if(!g_vars[id][is_connected] || g_vars[id][is_bot_or_hltv])
	{
		return
	}

	if(g_settings[ZP43_Support])
	{
		cs_reset_player_model(id)
	}

	reset_costume(id, 1)
	reset_costume(id, 2)
	reset_costume(id, 3)
}

public zp_user_humanized_post(id, survivor)
{
	if(!g_vars[id][is_connected] || g_vars[id][is_bot_or_hltv])
	{
		return
	}

	if(survivor)
	{
		if(g_settings[ZP43_Support])
		{
			cs_reset_player_model(id)
		}

		reset_costume(id, 1)
		reset_costume(id, 2)
		reset_costume(id, 3)
	}
	else
	{
		checkCostumes(id, 0)
		checkCostumes(id, 1)
		checkCostumes(id, 2)
		checkCostumes(id, 3)
	}
}

public ZP43_checkCostumes(id)
{
	checkCostumes(id, 0)
	checkCostumes(id, 1)
	checkCostumes(id, 2)
	checkCostumes(id, 3)
}
#endif

public Nvault_Init()
{
	g_Vault = nvault_open(g_settings[Vault])

	if(g_Vault == INVALID_HANDLE)
	{
		g_settings[Saving_Method] = 0
		server_print("[CSO Costumes] Failed to use Nvault saving system! Continuing without saving system.")
		nvault_close(g_Vault)
	}
}

public Load_Nvault(id)
{
	new szCash[64]; formatex(szCash, charsmax(szCash), "%sCash", g_szAuthID[id])

	g_vars[id][g_cash] = nvault_get(g_Vault, szCash)

#if defined ZP_SUPPORT
	new szSkin[64]; formatex(szSkin, charsmax(szSkin), "%sSkin", g_szAuthID[id])

	g_vars[id][g_skin] = nvault_get(g_Vault, szSkin)

	if(g_vars[id][g_skin] >= Total_Skin)
	{
		g_vars[id][g_skin] = 0
	}

	for(new i = 1; i < Total_Skin; i++)
	{
		new szKey[64]; formatex(szKey, charsmax(szKey), "%sSkin%d", g_szAuthID[id], i)
		g_vars[id][g_acquiredSkin][i] = nvault_get(g_Vault, szKey)
	}
#else
	new szSkinCT[64]; formatex(szSkinCT, charsmax(szSkinCT), "%sSkinCT", g_szAuthID[id])
	new szSkinTR[64]; formatex(szSkinTR, charsmax(szSkinTR), "%sSkinTR", g_szAuthID[id])

	g_vars[id][g_skinct] = nvault_get(g_Vault, szSkinCT)
	g_vars[id][g_skintr] = nvault_get(g_Vault, szSkinTR)

	if(g_vars[id][g_skinct] >= Total_SkinCT)
	{
		g_vars[id][g_skinct] = 0
	}

	if(g_vars[id][g_skintr] >= Total_SkinTR)
	{
		g_vars[id][g_skintr] = 0
	}

	for(new i = 1; i < Total_SkinCT; i++)
	{
		new szKey[64]; formatex(szKey, charsmax(szKey), "%sSkinCT%d", g_szAuthID[id], i)
		g_vars[id][g_acquiredSkinCT][i] = nvault_get(g_Vault, szKey)
	}

	for(new i = 1; i < Total_SkinTR; i++)
	{
		new szKey[64]; formatex(szKey, charsmax(szKey), "%sSkinTR%d", g_szAuthID[id], i)
		g_vars[id][g_acquiredSkinTR][i] = nvault_get(g_Vault, szKey)
	}
#endif

	new szHead[64]; formatex(szHead, charsmax(szHead), "%sHead", g_szAuthID[id])
	new szBack[64]; formatex(szBack, charsmax(szBack), "%sBack", g_szAuthID[id])
	new szPelvis[64]; formatex(szPelvis, charsmax(szPelvis), "%sPelvis", g_szAuthID[id])

	g_vars[id][g_head] = nvault_get(g_Vault, szHead)
	g_vars[id][g_back] = nvault_get(g_Vault, szBack)
	g_vars[id][g_pelvis] = nvault_get(g_Vault, szPelvis)

	if(g_vars[id][g_head] >= Total_Head)
	{
		g_vars[id][g_head] = 0
	}

	if(g_vars[id][g_back] >= Total_Back)
	{
		g_vars[id][g_back] = 0
	}

	if(g_vars[id][g_pelvis] >= Total_Pelvis)
	{
		g_vars[id][g_pelvis] = 0
	}

	for(new i = 1; i < Total_Head; i++)
	{
		new szKey[64]; formatex(szKey, charsmax(szKey), "%sHead%d", g_szAuthID[id], i)
		g_vars[id][g_acquiredHead][i] = nvault_get(g_Vault, szKey)
	}

	for(new i = 1; i < Total_Back; i++)
	{
		new szKey[64]; formatex(szKey, charsmax(szKey), "%sBack%d", g_szAuthID[id], i)
		g_vars[id][g_acquiredBack][i] = nvault_get(g_Vault, szKey)
	}

	for(new i = 1; i < Total_Pelvis; i++)
	{
		new szKey[64]; formatex(szKey, charsmax(szKey), "%sPelvis%d", g_szAuthID[id], i)
		g_vars[id][g_acquiredPelvis][i] = nvault_get(g_Vault, szKey)
	}
}

public Save_Nvault(id)
{
	new szCash[64]; formatex(szCash, charsmax(szCash), "%sCash", g_szAuthID[id])
	new szCash1[11]; num_to_str(g_vars[id][g_cash], szCash1, charsmax(szCash1))

	nvault_pset(g_Vault, szCash, szCash1)

#if defined ZP_SUPPORT
	new szSkin[64]; formatex(szSkin, charsmax(szSkin), "%sSkin", g_szAuthID[id])
	new szSkin1[11]; num_to_str(g_vars[id][g_skin], szSkin1, charsmax(szSkin1))

	nvault_pset(g_Vault, szSkin, szSkin1)

	for(new i = 1; i < Total_Skin; i++)
	{
		new szKey[64]; formatex(szKey, charsmax(szKey), "%sSkin%d", g_szAuthID[id], i)
		new szKey2[2]; num_to_str(g_vars[id][g_acquiredSkin][i], szKey2, charsmax(szKey2))
		nvault_pset(g_Vault, szKey, szKey2)
	}
#else
	new szSkinCT[64]; formatex(szSkinCT, charsmax(szSkinCT), "%sSkinCT", g_szAuthID[id])
	new szSkinCT1[11]; num_to_str(g_vars[id][g_skinct], szSkinCT1, charsmax(szSkinCT1))

	new szSkinTR[64]; formatex(szSkinTR, charsmax(szSkinTR), "%sSkinTR", g_szAuthID[id])
	new szSkinTR1[11]; num_to_str(g_vars[id][g_skintr], szSkinTR1, charsmax(szSkinTR1))

	nvault_pset(g_Vault, szSkinCT, szSkinCT1)
	nvault_pset(g_Vault, szSkinTR, szSkinTR1)

	for(new i = 1; i < Total_SkinCT; i++)
	{
		new szKey[64]; formatex(szKey, charsmax(szKey), "%sSkinCT%d", g_szAuthID[id], i)
		new szKey2[2]; num_to_str(g_vars[id][g_acquiredSkinCT][i], szKey2, charsmax(szKey2))
		nvault_pset(g_Vault, szKey, szKey2)
	}

	for(new i = 1; i < Total_SkinTR; i++)
	{
		new szKey[64]; formatex(szKey, charsmax(szKey), "%sSkinTR%d", g_szAuthID[id], i)
		new szKey2[2]; num_to_str(g_vars[id][g_acquiredSkinTR][i], szKey2, charsmax(szKey2))
		nvault_pset(g_Vault, szKey, szKey2)
	}
#endif

	new szHead[64]; formatex(szHead, charsmax(szHead), "%sHead", g_szAuthID[id])
	new szHead1[11]; num_to_str(g_vars[id][g_head], szHead1, charsmax(szHead1))

	new szBack[64]; formatex(szBack, charsmax(szBack), "%sBack", g_szAuthID[id])
	new szBack1[11]; num_to_str(g_vars[id][g_back], szBack1, charsmax(szBack1))

	new szPelvis[64]; formatex(szPelvis, charsmax(szPelvis), "%sPelvis", g_szAuthID[id])
	new szPelvis1[11]; num_to_str(g_vars[id][g_pelvis], szPelvis1, charsmax(szPelvis1))

	nvault_pset(g_Vault, szHead, szHead1)
	nvault_pset(g_Vault, szBack, szBack1)
	nvault_pset(g_Vault, szPelvis, szPelvis1)

	for(new i = 1; i < Total_Head; i++)
	{
		new szKey[64]; formatex(szKey, charsmax(szKey), "%sHead%d", g_szAuthID[id], i)
		new szKey2[2]; num_to_str(g_vars[id][g_acquiredHead][i], szKey2, charsmax(szKey2))
		nvault_pset(g_Vault, szKey, szKey2)
	}

	for(new i = 1; i < Total_Back; i++)
	{
		new szKey[64]; formatex(szKey, charsmax(szKey), "%sBack%d", g_szAuthID[id], i)
		new szKey2[2]; num_to_str(g_vars[id][g_acquiredBack][i], szKey2, charsmax(szKey2))
		nvault_pset(g_Vault, szKey, szKey2)
	}

	for(new i = 1; i < Total_Pelvis; i++)
	{
		new szKey[64]; formatex(szKey, charsmax(szKey), "%sPelvis%d", g_szAuthID[id], i)
		new szKey2[2]; num_to_str(g_vars[id][g_acquiredPelvis][i], szKey2, charsmax(szKey2))
		nvault_pset(g_Vault, szKey, szKey2)
	}
}

public MySql_Init()
{
	g_SqlTuple = SQL_MakeDbTuple(g_settings[Host], g_settings[User], g_settings[Pass], g_settings[Db])

	new ErrorCode,Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode, g_Error, charsmax(g_Error))
	if(SqlConnection == Empty_Handle)
	{
		log_amx(g_Error)
		g_settings[Saving_Method] = 1
		server_print("[CSO Costumes] Failed to use MySQL saving system! Continuing with Nvault saving system.")
		SQL_FreeHandle(g_SqlTuple)
		Load_Configuration(1)
		return
	}

	static len; len = 0
	static szTemp[8192]

#if defined ZP_SUPPORT
	len += formatex(szTemp[len], charsmax(szTemp), "CREATE TABLE IF NOT EXISTS `%s` (\
	`Id` INT(11) AUTO_INCREMENT PRIMARY KEY, `SteamID` varchar(35), `Cash` INT(11),\
	`Skin` INT(11), `Head` INT(11), `Back` INT(11), `Pelvis` INT(11)", g_settings[Table])

	for(new i = 1; i < Total_Skin; i++)
	{
		len += formatex(szTemp[len], charsmax(szTemp), ",`Skin%d` INT(1)", i)
	}
#else
	len += formatex(szTemp[len], charsmax(szTemp), "CREATE TABLE IF NOT EXISTS `%s` (\
	`Id` INT(11) AUTO_INCREMENT PRIMARY KEY, `SteamID` varchar(35), `Cash` INT(11),\
	`SkinCT` INT(11), `SkinTR` INT(11), `Head` INT(11), `Back` INT(11), `Pelvis` INT(11)", g_settings[Table])

	for(new i = 1; i < Total_SkinCT; i++)
	{
		len += formatex(szTemp[len], charsmax(szTemp), ",`SkinCT%d` INT(1)", i)
	}

	for(new i = 1; i < Total_SkinTR; i++)
	{
		len += formatex(szTemp[len], charsmax(szTemp), ",`SkinTR%d` INT(1)", i)
	}
#endif

	for(new i = 1; i < Total_Head; i++)
	{
		len += formatex(szTemp[len], charsmax(szTemp), ",`Head%d` INT(1)", i)
	}

	for(new i = 1; i < Total_Back; i++)
	{
		len += formatex(szTemp[len], charsmax(szTemp), ",`Back%d` INT(1)", i)
	}

	for(new i = 1; i < Total_Pelvis; i++)
	{
		len += formatex(szTemp[len], charsmax(szTemp), ",`Pelvis%d` INT(1)", i)
	}

	len += formatex(szTemp[len], charsmax(szTemp), ")")

	new Handle:Queries
	Queries = SQL_PrepareQuery(SqlConnection, szTemp)

	if(!SQL_Execute(Queries))
	{
		SQL_QueryError(Queries, g_Error, charsmax(g_Error))
		log_amx(g_Error)
		g_settings[Saving_Method] = 1
		server_print("[CSO Costumes] Failed to use MySQL saving system! Continuing with Nvault saving system.")
		SQL_FreeHandle(g_SqlTuple)
		Load_Configuration(1)
		return
	}

	SQL_FreeHandle(Queries)
	SQL_FreeHandle(SqlConnection)

	MySql_Init2()
}

public MySql_Init2()
{
	new szTemp[128], Data[1]; Data[0] = 1

	formatex(szTemp, charsmax(szTemp), "SELECT * FROM `%s`", g_settings[Table])
	SQL_ThreadQuery(g_SqlTuple, "IgnoreHandle", szTemp, Data, 1)
}

public Load_MySql(id)
{
	new szTemp[256], Data[1]; Data[0] = id

	formatex(szTemp, charsmax(szTemp), "SELECT * FROM `%s` WHERE (`%s`.`SteamID` = '%s')", g_settings[Table], g_settings[Table], g_szAuthID[id])
	SQL_ThreadQuery(g_SqlTuple, "register_client", szTemp, Data, 1)
}

public register_client(FailState, Handle:Query, Error[], Errcode, Data[], DataSize)
{
	switch(FailState)
	{
		case TQUERY_CONNECT_FAILED: log_amx("Load - Could not connect to SQL database. [%d] %s", Errcode, Error)
		case TQUERY_QUERY_FAILED: log_amx("Load - Query failed. [%d] %s", Errcode, Error)
	}

	new id; id = Data[0]

	if(SQL_NumResults(Query) < 1)
	{
		if(equal(g_szAuthID[id], "ID_PENDING"))
		{
			return
		}

		static len; len = 0
		new szTemp[128], Data[1]; Data[0] = 0

		len += formatex(szTemp[len], charsmax(szTemp), "INSERT INTO `%s` (`SteamID`) VALUES ('%s')", g_settings[Table], g_szAuthID[id])

		SQL_ThreadQuery(g_SqlTuple, "IgnoreHandle", szTemp, Data, 1)

		Save_MySql(id)
	}
	else
	{
		new query; query = 2

		g_vars[id][g_cash] = SQL_ReadResult(Query, query); query++

	#if defined ZP_SUPPORT
		g_vars[id][g_skin] = SQL_ReadResult(Query, query); query++

		if(g_vars[id][g_skin] >= Total_Skin)
		{
			g_vars[id][g_skin] = 0
		}

		for(new i = 1; i < Total_Skin; i++)
		{
			new szname[20]; formatex(szname, charsmax(szname), "Skin%d", i)
			new num = SQL_FieldNameToNum(Query, szname)

			g_vars[id][g_acquiredSkin][i] = SQL_ReadResult(Query, num)
		}
	#else
		g_vars[id][g_skinct] = SQL_ReadResult(Query, query); query++
		g_vars[id][g_skintr] = SQL_ReadResult(Query, query); query++

		if(g_vars[id][g_skinct] >= Total_SkinCT)
		{
			g_vars[id][g_skinct] = 0
		}

		if(g_vars[id][g_skintr] >= Total_SkinTR)
		{
			g_vars[id][g_skintr] = 0
		}

		for(new i = 1; i < Total_SkinCT; i++)
		{
			new szname[20]; formatex(szname, charsmax(szname), "SkinCT%d", i)
			new num = SQL_FieldNameToNum(Query, szname)

			g_vars[id][g_acquiredSkinCT][i] = SQL_ReadResult(Query, num)
		}

		for(new i = 1; i < Total_SkinTR; i++)
		{
			new szname[20]; formatex(szname, charsmax(szname), "SkinTR%d", i)
			new num = SQL_FieldNameToNum(Query, szname)

			g_vars[id][g_acquiredSkinTR][i] = SQL_ReadResult(Query, num)
		}
	#endif

		g_vars[id][g_head] = SQL_ReadResult(Query, query); query++
		g_vars[id][g_back] = SQL_ReadResult(Query, query); query++
		g_vars[id][g_pelvis] = SQL_ReadResult(Query, query); query++

		if(g_vars[id][g_head] >= Total_Head)
		{
			g_vars[id][g_head] = 0
		}

		if(g_vars[id][g_back] >= Total_Back)
		{
			g_vars[id][g_back] = 0
		}

		if(g_vars[id][g_pelvis] >= Total_Pelvis)
		{
			g_vars[id][g_pelvis] = 0
		}

		for(new i = 1; i < Total_Head; i++)
		{
			new szname[20]; formatex(szname, charsmax(szname), "Head%d", i)
			new num = SQL_FieldNameToNum(Query, szname)

			g_vars[id][g_acquiredHead][i] = SQL_ReadResult(Query, num)
		}

		for(new i = 1; i < Total_Back; i++)
		{
			new szname[20]; formatex(szname, charsmax(szname), "Back%d", i)
			new num = SQL_FieldNameToNum(Query, szname)

			g_vars[id][g_acquiredBack][i] = SQL_ReadResult(Query, num)
		}

		for(new i = 1; i < Total_Pelvis; i++)
		{
			new szname[20]; formatex(szname, charsmax(szname), "Pelvis%d", i)
			new num = SQL_FieldNameToNum(Query, szname)

			g_vars[id][g_acquiredPelvis][i] = SQL_ReadResult(Query, num)
		}
	}
}

public Save_MySql(id)
{
	static szTemp[8192]
	new Data[1]; Data[0] = 0
	static len; len = 0

#if defined ZP_SUPPORT
	len += formatex(szTemp[len], charsmax(szTemp), "UPDATE `%s` SET `Cash` = '%i', `Skin` = '%i', `Head` = '%i',\
	`Back` = '%i', `Pelvis` = '%i'", g_settings[Table], g_vars[id][g_cash], g_vars[id][g_skin], g_vars[id][g_head], g_vars[id][g_back], g_vars[id][g_pelvis])

	for(new i = 1; i < Total_Skin; i++)
	{
		len += formatex(szTemp[len], charsmax(szTemp), ",`Skin%d` = '%i'", i, g_vars[id][g_acquiredSkin][i])
	}
#else
	len += formatex(szTemp[len], charsmax(szTemp), "UPDATE `%s` SET `Cash` = '%i', `SkinCT` = '%i', `SkinTR` = '%i', `Head` = '%i', `Back` = '%i',\
	`Pelvis` = '%i'", g_settings[Table], g_vars[id][g_cash], g_vars[id][g_skinct], g_vars[id][g_skintr], g_vars[id][g_head], g_vars[id][g_back], g_vars[id][g_pelvis])

	for(new i = 1; i < Total_SkinCT; i++)
	{
		len += formatex(szTemp[len], charsmax(szTemp), ",`SkinCT%d` = '%i'", i, g_vars[id][g_acquiredSkinCT][i])
	}

	for(new i = 1; i < Total_SkinTR; i++)
	{
		len += formatex(szTemp[len], charsmax(szTemp), ",`SkinTR%d` = '%i'", i, g_vars[id][g_acquiredSkinTR][i])
	}
#endif

	for(new i = 1; i < Total_Head; i++)
	{
		len += formatex(szTemp[len], charsmax(szTemp), ",`Head%d` = '%i'", i, g_vars[id][g_acquiredHead][i])
	}

	for(new i = 1; i < Total_Back; i++)
	{
		len += formatex(szTemp[len], charsmax(szTemp), ",`Back%d` = '%i'", i, g_vars[id][g_acquiredBack][i])
	}

	for(new i = 1; i < Total_Pelvis; i++)
	{
		len += formatex(szTemp[len], charsmax(szTemp), ",`Pelvis%d` = '%i'", i, g_vars[id][g_acquiredPelvis][i])
	}

	formatex(szTemp[len], charsmax(szTemp), " WHERE `%s`.`SteamID` = '%s';", g_settings[Table], g_szAuthID[id])

	SQL_ThreadQuery(g_SqlTuple, "IgnoreHandle", szTemp, Data, 1)
}

public IgnoreHandle(FailState, Handle:Query, Error[], Errcode, Data[], DataSize)
{
	new VerifyCostumes; VerifyCostumes = Data[0]

	if(VerifyCostumes)
	{
		new Data1[1]; Data1[0] = 0

	#if defined ZP_SUPPORT
		for(new i = 1; i < Total_Skin; i++)
		{
			new szname[20]; formatex(szname, charsmax(szname), "Skin%d", i)
			new num = SQL_FieldNameToNum(Query, szname)

			if(num == -1)
			{
				new szTemp[128]; formatex(szTemp, charsmax(szTemp), "ALTER TABLE `%s` ADD COLUMN `%s` INT(1) NOT NULL", g_settings[Table], szname)
				SQL_ThreadQuery(g_SqlTuple, "IgnoreHandle", szTemp, Data1, 1)
			}
		}
	#else
		for(new i = 1; i < Total_SkinCT; i++)
		{
			new szname[20]; formatex(szname, charsmax(szname), "SkinCT%d", i)
			new num = SQL_FieldNameToNum(Query, szname)

			if(num == -1)
			{
				new szTemp[128]; formatex(szTemp, charsmax(szTemp), "ALTER TABLE `%s` ADD COLUMN `%s` INT(1) NOT NULL", g_settings[Table], szname)
				SQL_ThreadQuery(g_SqlTuple, "IgnoreHandle", szTemp, Data1, 1)
			}
		}

		for(new i = 1; i < Total_SkinTR; i++)
		{
			new szname[20]; formatex(szname, charsmax(szname), "SkinTR%d", i)
			new num = SQL_FieldNameToNum(Query, szname)

			if(num == -1)
			{
				new szTemp[128]; formatex(szTemp, charsmax(szTemp), "ALTER TABLE `%s` ADD COLUMN `%s` INT(1) NOT NULL", g_settings[Table], szname)
				SQL_ThreadQuery(g_SqlTuple, "IgnoreHandle", szTemp, Data1, 1)
			}
		}
	#endif

		for(new i = 1; i < Total_Head; i++)
		{
			new szname[20]; formatex(szname, charsmax(szname), "Head%d", i)
			new num = SQL_FieldNameToNum(Query, szname)

			if(num == -1)
			{
				new szTemp[128]; formatex(szTemp, charsmax(szTemp), "ALTER TABLE `%s` ADD COLUMN `%s` INT(1) NOT NULL", g_settings[Table], szname)
				SQL_ThreadQuery(g_SqlTuple, "IgnoreHandle", szTemp, Data1, 1)
			}
		}

		for(new i = 1; i < Total_Back; i++)
		{
			new szname[20]; formatex(szname, charsmax(szname), "Back%d", i)
			new num = SQL_FieldNameToNum(Query, szname)

			if(num == -1)
			{
				new szTemp[128]; formatex(szTemp, charsmax(szTemp), "ALTER TABLE `%s` ADD COLUMN `%s` INT(1) NOT NULL", g_settings[Table], szname)
				SQL_ThreadQuery(g_SqlTuple, "IgnoreHandle", szTemp, Data1, 1)
			}
		}

		for(new i = 1; i < Total_Pelvis; i++)
		{
			new szname[20]; formatex(szname, charsmax(szname), "Pelvis%d", i)
			new num = SQL_FieldNameToNum(Query, szname)

			if(num == -1)
			{
				new szTemp[128]; formatex(szTemp, charsmax(szTemp), "ALTER TABLE `%s` ADD COLUMN `%s` INT(1) NOT NULL", g_settings[Table], szname)
				SQL_ThreadQuery(g_SqlTuple, "IgnoreHandle", szTemp, Data1, 1)
			}
		}
	}

	SQL_FreeHandle(Query)
}

public Save_Data()
{
	if(g_settings[Saving_Method] != 0)
	{
		new players[32], num, player
		get_players(players, num, "ch")

		for(new i = 0; i < num; i++)
		{
			player = players[i]

			switch(g_settings[Saving_Method])
			{
				case 1: Save_Nvault(player)
				case 2: Save_MySql(player)
			}
		}
	}
}

public client_disconnected(id)
{
	g_vars[id][is_connected] = false

	if(g_vars[id][is_bot_or_hltv])
	{
		g_vars[id][is_bot_or_hltv] = false
		return
	}

	switch(g_settings[Saving_Method])
	{
		case 1: Save_Nvault(id)
		case 2: Save_MySql(id)
	}
}

public client_authorized(id)
{
	if(is_user_bot(id) || is_user_hltv(id))
	{
		g_vars[id][is_bot_or_hltv] = true
		return
	}

	reset_vars(id)

	if(g_settings[Saving_Method] != 0)
	{
		get_user_authid(id, g_szAuthID[id], charsmax(g_szAuthID[]))

		switch(g_settings[Saving_Method])
		{
			case 1: Load_Nvault(id)
			case 2: Load_MySql(id)
		}
	}
}

public client_putinserver(id)
{
	g_vars[id][is_connected] = true
}

public fw_PlayerSpawn_Post(id)
{
	if(is_user_alive(id) && !g_vars[id][is_bot_or_hltv])
	{
		if(g_settings[ZP43_Support])
		{
			set_task(0.1, "ZP43_checkCostumes", id)
		}
		else
		{
			checkCostumes(id, 0)
			checkCostumes(id, 1)
			checkCostumes(id, 2)
			checkCostumes(id, 3)
		}
	}
}

public Event_DeathMsg()
{
	new attacker = read_data(1)
	new victim = read_data(2)

	if(attacker == victim || attacker == 0 || !g_vars[attacker][is_connected] || !g_vars[victim][is_connected] || g_vars[attacker][is_bot_or_hltv])
	{
		return
	}

	new victimname[32]
	get_user_name(victim, victimname, charsmax(victimname))

	ColorChat(attacker, "%L", attacker, "KILL_PLAYER", g_settings[Cash_per_Kill], victimname)
	g_vars[attacker][g_cash] += g_settings[Cash_per_Kill]
}

public clcmd_costumes(id)
{
	show_menu_costumes(id)

	return PLUGIN_HANDLED
}

public clcmd_inventory(id)
{
	show_menu_inventory(id)

	return PLUGIN_HANDLED
}

public clcmd_shop(id)
{
	show_menu_shop(id)

	return PLUGIN_HANDLED
}

public clcmd_deactivate(id)
{
#if defined ZP_SUPPORT
	g_vars[id][g_skin] = 0
#else
	g_vars[id][g_skinct] = 0
	g_vars[id][g_skintr] = 0
#endif

	g_vars[id][g_head] = 0
	g_vars[id][g_back] = 0
	g_vars[id][g_pelvis] = 0

	checkCostumes(id, 0)
	reset_costume(id, 1)
	reset_costume(id, 2)
	reset_costume(id, 3)

	ColorChat(id, "%L", id, "DEACTIVATED_COSTUMES")

	return PLUGIN_HANDLED
}

public clcmd_cash(id)
{
	ColorChat(id, "%L", id, "CASH", g_vars[id][g_cash])

	return PLUGIN_HANDLED
}

public Cmd_GiveCash(id, iLevel, iCid)
{
	if(!cmd_access(id, iLevel, iCid, 3))
	{
		return PLUGIN_HANDLED
	}

	new szPlayer[32]
	read_argv(1, szPlayer, charsmax(szPlayer))

	new iPlayer = cmd_target(id, szPlayer, 0)

	if(!iPlayer || g_vars[iPlayer][is_bot_or_hltv])
	{
		return PLUGIN_HANDLED
	}

	new szName[2][32], szAmount[10]
	read_argv(2, szAmount, charsmax(szAmount))
	get_user_name(id, szName[0], charsmax(szName[]))
	get_user_name(iPlayer, szName[1], charsmax(szName[]))

	new szKey[32], iCash = str_to_num(szAmount)
	g_vars[iPlayer][g_cash] += iCash

	if(g_vars[iPlayer][g_cash] < 0)
	{
		g_vars[iPlayer][g_cash] = 0
	}

	if(iCash >= 0)
	{
		copy(szKey, charsmax(szKey), "GIVE_CASH")
	}
	else
	{
		copy(szKey, charsmax(szKey), "TAKE_CASH")
		iCash *= -1
	}

	ColorChat(0, "%L", id, szKey, szName[0], iCash, szName[1])
	return PLUGIN_HANDLED
}

public menu_costumes(id, menu, item)
{
	switch(item)
	{
		case 0: show_menu_inventory(id)
		case 1: show_menu_shop(id)
	}

	menu_destroy(menu)
	return PLUGIN_HANDLED
}

show_menu_costumes(id)
{
	new msgm[128], msg1[32], msg2[32], msgexit[32]
	formatex(msgm, charsmax(msgm), "%s \y%L", PREFIX_MENU, id, "COSTUMES")
	formatex(msg1, charsmax(msg1), "%L", id, "INVENTORY")
	formatex(msg2, charsmax(msg2), "%L", id, "SHOP")
	formatex(msgexit, charsmax(msgexit), "%L", id, "MENU_EXIT")

	new menu = menu_create(msgm, "menu_costumes")

	menu_additem(menu, msg1, "0", 0)
	menu_additem(menu, msg2, "1", 0)

	menu_setprop(menu, MPROP_EXITNAME, msgexit)

	menu_display(id, menu, 0)
}

public menu_inventory(id, menu, item)
{
	switch(item)
	{
		case 0..z:
		{
		#if defined ZP_SUPPORT
			if(Total_Skin == 1 && item == 0 || Total_Head == 1 && item == 1 || Total_Back == 1 && item == 2 || Total_Pelvis == 1 && item == 3)
			{
				ColorChat(id, "%L", id, "NOT_AVAILABLE", id, item > -1 ? item > 0 ? item > 1 ? item > 2 ? "COSTUME_PELVIS" : "COSTUME_BACK" : "COSTUME_HEAD" : "COSTUME_SKIN" : "")
				show_menu_inventory(id)
			}
		#else
			if(Total_SkinCT == 1 && item == 0 || Total_SkinTR == 1 && item == 1 || Total_Head == 1 && item == 2 || Total_Back == 1 && item == 3 || Total_Pelvis == 1 && item == 4)
			{
				ColorChat(id, "%L", id, "NOT_AVAILABLE", id, item > -1 ? item > 0 ? item > 1 ? item > 2 ? item > 3 ? "COSTUME_PELVIS" : "COSTUME_BACK" : "COSTUME_HEAD" : "COSTUME_SKINTR" : "COSTUME_SKINCT" : "")
				show_menu_inventory(id)
			}
		#endif
			else
			{
				g_vars[id][g_costume] = item
				show_menu_costumeinv(id)
			}
		}
		case z+1:
		{
			clcmd_deactivate(id)
			show_menu_inventory(id)
		}
		case MENU_EXIT:
		{
			if(g_vars[id][is_connected])
			{
				show_menu_costumes(id)
			}
		}
	}

	menu_destroy(menu)
	return PLUGIN_HANDLED
}

show_menu_inventory(id)
{
	new msgm[128], msghead[32], msgback[32], msgpelvis[32], msg1[64], msgexit[32]
	formatex(msgm, charsmax(msgm), "%s \y%L", PREFIX_MENU, id, "INVENTORY")
	formatex(msghead, charsmax(msghead), "%L", id, "COSTUME_HEAD")
	formatex(msgback, charsmax(msgback), "%L", id, "COSTUME_BACK")
	formatex(msgpelvis, charsmax(msgpelvis), "%L", id, "COSTUME_PELVIS")
	formatex(msg1, charsmax(msg1), "%L", id, "DEACTIVATE_ALLCOSTUMES")
	formatex(msgexit, charsmax(msgexit), "%L", id, "MENU_EXIT")

	new menu = menu_create(msgm, "menu_inventory")

#if defined ZP_SUPPORT
	new msgskin[32]; formatex(msgskin, charsmax(msgskin), "%L", id, "COSTUME_SKIN")

	menu_additem(menu, msgskin, "0", 0)
	menu_additem(menu, msghead, "1", 0)
	menu_additem(menu, msgback, "2", 0)
	menu_additem(menu, msgpelvis, "3", 0)
	menu_additem(menu, msg1, "4", 0)
#else
	new msgskinct[32], msgskintr[32]
	formatex(msgskinct, charsmax(msgskinct), "%L", id, "COSTUME_SKINCT")
	formatex(msgskintr, charsmax(msgskintr), "%L", id, "COSTUME_SKINTR")

	menu_additem(menu, msgskinct, "0", 0)
	menu_additem(menu, msgskintr, "1", 0)
	menu_additem(menu, msghead, "2", 0)
	menu_additem(menu, msgback, "3", 0)
	menu_additem(menu, msgpelvis, "4", 0)
	menu_additem(menu, msg1, "5", 0)
#endif

	menu_setprop(menu, MPROP_EXITNAME, msgexit)

	menu_display(id, menu, 0)
}

public menu_costumeinv(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		if(g_vars[id][is_connected])
		{
			show_menu_inventory(id)
		}

		menu_destroy(menu)
		return PLUGIN_HANDLED
	}

	if(item == 0)
	{
	#if defined ZP_SUPPORT
		if(!g_vars[id][g_skin] && g_vars[id][g_costume] == 0 || !g_vars[id][g_head] && g_vars[id][g_costume] == 1 || !g_vars[id][g_back] && g_vars[id][g_costume] == 2 || !g_vars[id][g_pelvis] && g_vars[id][g_costume] == 3)
		{
			ColorChat(id, "%L", id, "ALREADY_DEACTIVATED")
		}
	#else
		if(!g_vars[id][g_skinct] && g_vars[id][g_costume] == 0 || !g_vars[id][g_skintr] && g_vars[id][g_costume] == 1 || !g_vars[id][g_head] && g_vars[id][g_costume] == 2 || !g_vars[id][g_back] && g_vars[id][g_costume] == 3 || !g_vars[id][g_pelvis] && g_vars[id][g_costume] == 4)
		{
			ColorChat(id, "%L", id, "ALREADY_DEACTIVATED")
		}
	#endif
		else
		{
			switch(g_vars[id][g_costume])
			{
			#if defined ZP_SUPPORT
				case 0:
				{
					g_vars[id][g_skin] = 0
					checkCostumes(id, 0)
				}
			#else
				case 0:
				{
					g_vars[id][g_skinct] = 0
					checkCostumes(id, 0)
				}
				case 1:
				{
					g_vars[id][g_skintr] = 0
					checkCostumes(id, 0)
				}
			#endif
				case y:
				{
					g_vars[id][g_head] = 0
					reset_costume(id, 1)
				}
				case y+1:
				{
					g_vars[id][g_back] = 0
					reset_costume(id, 2)
				}
				case y+2:
				{
					g_vars[id][g_pelvis] = 0
					reset_costume(id, 3)
				}
			}

			#if defined ZP_SUPPORT
				ColorChat(id, "%L", id, "DEACTIVATE_COSTUME", id, g_vars[id][g_costume] > -1 ? g_vars[id][g_costume] > 0 ? g_vars[id][g_costume] > 1 ? g_vars[id][g_costume] > 2 ? "COSTUME_PELVIS" : "COSTUME_BACK" : "COSTUME_HEAD" : "COSTUME_SKIN" : "")
			#else
				ColorChat(id, "%L", id, "DEACTIVATE_COSTUME", id, g_vars[id][g_costume] > -1 ? g_vars[id][g_costume] > 0 ? g_vars[id][g_costume] > 1 ? g_vars[id][g_costume] > 2 ? g_vars[id][g_costume] > 3 ? "COSTUME_PELVIS" : "COSTUME_BACK" : "COSTUME_HEAD" : "COSTUME_SKINTR" : "COSTUME_SKINCT" : "")
			#endif
		}
	}
	else
	{
		new keyc = 1

		switch(g_vars[id][g_costume])
		{
		#if defined ZP_SUPPORT
			case 0:
			{
				for(new i = 1; i < Total_Skin; i++)
				{
					if(!g_vars[id][g_acquiredSkin][i])
					{
						continue
					}

					if(keyc == item)
					{
						if(g_vars[id][g_skin] == i)
						{
							ColorChat(id, "%L", id, "ALREADY_ACTIVATED")
						}
						else
						{
							g_vars[id][g_skin] = i
							checkCostumes(id, 0)
							ColorChat(id, "%L", id, "ACTIVATE_COSTUME", Costumes_Skin[i][g_name])
						}

						break
					}

					keyc++
				}
			}
		#else
			case 0:
			{
				for(new i = 1; i < Total_SkinCT; i++)
				{
					if(!g_vars[id][g_acquiredSkinCT][i])
					{
						continue
					}

					if(keyc == item)
					{
						if(g_vars[id][g_skinct] == i)
						{
							ColorChat(id, "%L", id, "ALREADY_ACTIVATED")
						}
						else
						{
							g_vars[id][g_skinct] = i
							checkCostumes(id, 0)
							ColorChat(id, "%L", id, "ACTIVATE_COSTUME", Costumes_SkinCT[i][g_name])
						}

						break
					}

					keyc++
				}
			}
			case 1:
			{
				for(new i = 1; i < Total_SkinTR; i++)
				{
					if(!g_vars[id][g_acquiredSkinTR][i])
					{
						continue
					}

					if(keyc == item)
					{
						if(g_vars[id][g_skintr] == i)
						{
							ColorChat(id, "%L", id, "ALREADY_ACTIVATED")
						}
						else
						{
							g_vars[id][g_skintr] = i
							checkCostumes(id, 0)
							ColorChat(id, "%L", id, "ACTIVATE_COSTUME", Costumes_SkinTR[i][g_name])
						}

						break
					}

					keyc++
				}
			}
		#endif
			case y:
			{
				for(new i = 1; i < Total_Head; i++)
				{
					if(!g_vars[id][g_acquiredHead][i])
					{
						continue
					}

					if(keyc == item)
					{
						if(g_vars[id][g_head] == i)
						{
							ColorChat(id, "%L", id, "ALREADY_ACTIVATED")
						}
						else
						{
							g_vars[id][g_head] = i
							checkCostumes(id, 1)
							ColorChat(id, "%L", id, "ACTIVATE_COSTUME", Costumes_Head[i][g_name])
						}

						break
					}

					keyc++
				}
			}
			case y+1:
			{
				for(new i = 1; i < Total_Back; i++)
				{
					if(!g_vars[id][g_acquiredBack][i])
					{
						continue
					}

					if(keyc == item)
					{
						if(g_vars[id][g_back] == i)
						{
							ColorChat(id, "%L", id, "ALREADY_ACTIVATED")
						}
						else
						{
							g_vars[id][g_back] = i
							checkCostumes(id, 2)
							ColorChat(id, "%L", id, "ACTIVATE_COSTUME", Costumes_Back[i][g_name])
						}

						break
					}

					keyc++
				}
			}
			case y+2:
			{
				for(new i = 1; i < Total_Pelvis; i++)
				{
					if(!g_vars[id][g_acquiredPelvis][i])
					{
						continue
					}

					if(keyc == item)
					{
						if(g_vars[id][g_pelvis] == i)
						{
							ColorChat(id, "%L", id, "ALREADY_ACTIVATED")
						}
						else
						{
							g_vars[id][g_pelvis] = i
							checkCostumes(id, 3)
							ColorChat(id, "%L", id, "ACTIVATE_COSTUME", Costumes_Pelvis[i][g_name])
						}

						break
					}

					keyc++
				}
			}
		}
	}

	show_menu_costumeinv(id)
	menu_destroy(menu)
	return PLUGIN_HANDLED
}

show_menu_costumeinv(id)
{
	new msgm[128], msg[128], msg1[16], msgactivated[32], msgback[32], msgnext[32], msgexit[32], item = 1
#if defined ZP_SUPPORT
	formatex(msgm, charsmax(msgm), "%s \y%L: %L^n\r", PREFIX_MENU, id, "INVENTORY", id, g_vars[id][g_costume] > -1 ? g_vars[id][g_costume] > 0 ? g_vars[id][g_costume] > 1 ? g_vars[id][g_costume] > 2 ? "COSTUME_PELVIS" : "COSTUME_BACK" : "COSTUME_HEAD" : "COSTUME_SKIN" : "")
#else
	formatex(msgm, charsmax(msgm), "%s \y%L: %L^n\r", PREFIX_MENU, id, "INVENTORY", id, g_vars[id][g_costume] > -1 ? g_vars[id][g_costume] > 0 ? g_vars[id][g_costume] > 1 ? g_vars[id][g_costume] > 2 ? g_vars[id][g_costume] > 3 ? "COSTUME_PELVIS" : "COSTUME_BACK" : "COSTUME_HEAD" : "COSTUME_SKINTR" : "COSTUME_SKINCT" : "")
#endif
	formatex(msgactivated, charsmax(msgactivated), " \r[%L]", id, "ACTIVATED")
	formatex(msgback, charsmax(msgback), "%L", id, "MENU_BACK")
	formatex(msgnext, charsmax(msgnext), "%L", id, "MENU_NEXT")
	formatex(msgexit, charsmax(msgexit), "%L", id, "MENU_EXIT")

	new menu = menu_create(msgm, "menu_costumeinv")

	formatex(msg, charsmax(msg), "%L", id, "COSTUME_NONE")
	menu_additem(menu, msg, "0", 0)

	switch(g_vars[id][g_costume])
	{
	#if defined ZP_SUPPORT
		case 0:
		{
			for(new i = 1; i < Total_Skin; i++)
			{
				if(!g_vars[id][g_acquiredSkin][i])
				{
					continue
				}

				formatex(msg, charsmax(msg), "%s%s", Costumes_Skin[i][g_name], g_vars[id][g_skin] == i ? msgactivated : "")
				num_to_str(item, msg1, charsmax(msg1))
				menu_additem(menu, msg, msg1, 0)

				item++
			}
		}
	#else
		case 0:
		{
			for(new i = 1; i < Total_SkinCT; i++)
			{
				if(!g_vars[id][g_acquiredSkinCT][i])
				{
					continue
				}

				formatex(msg, charsmax(msg), "%s%s", Costumes_SkinCT[i][g_name], g_vars[id][g_skinct] == i ? msgactivated : "")
				num_to_str(item, msg1, charsmax(msg1))
				menu_additem(menu, msg, msg1, 0)

				item++
			}
		}
		case 1:
		{
			for(new i = 1; i < Total_SkinTR; i++)
			{
				if(!g_vars[id][g_acquiredSkinTR][i])
				{
					continue
				}

				formatex(msg, charsmax(msg), "%s%s", Costumes_SkinTR[i][g_name], g_vars[id][g_skintr] == i ? msgactivated : "")
				num_to_str(item, msg1, charsmax(msg1))
				menu_additem(menu, msg, msg1, 0)

				item++
			}
		}
	#endif
		case y:
		{
			for(new i = 1; i < Total_Head; i++)
			{
				if(!g_vars[id][g_acquiredHead][i])
				{
					continue
				}

				formatex(msg, charsmax(msg), "%s%s", Costumes_Head[i][g_name], g_vars[id][g_head] == i ? msgactivated : "")
				num_to_str(item, msg1, charsmax(msg1))
				menu_additem(menu, msg, msg1, 0)

				item++
			}
		}
		case y+1:
		{
			for(new i = 1; i < Total_Back; i++)
			{
				if(!g_vars[id][g_acquiredBack][i])
				{
					continue
				}

				formatex(msg, charsmax(msg), "%s%s", Costumes_Back[i][g_name], g_vars[id][g_back] == i ? msgactivated : "")
				num_to_str(item, msg1, charsmax(msg1))
				menu_additem(menu, msg, msg1, 0)

				item++
			}
		}
		case y+2:
		{
			for(new i = 1; i < Total_Pelvis; i++)
			{
				if(!g_vars[id][g_acquiredPelvis][i])
				{
					continue
				}

				formatex(msg, charsmax(msg), "%s%s", Costumes_Pelvis[i][g_name], g_vars[id][g_pelvis] == i ? msgactivated : "")
				num_to_str(item, msg1, charsmax(msg1))
				menu_additem(menu, msg, msg1, 0)

				item++
			}
		}
	}

	if(item == 1)
	{
	#if defined ZP_SUPPORT
		ColorChat(id, "%L", id, "NO_COSTUME", id, g_vars[id][g_costume] > -1 ? g_vars[id][g_costume] > 0 ? g_vars[id][g_costume] > 1 ? g_vars[id][g_costume] > 2 ? "COSTUME_PELVIS" : "COSTUME_BACK" : "COSTUME_HEAD" : "COSTUME_SKIN" : "")
	#else
		ColorChat(id, "%L", id, "NO_COSTUME", id, g_vars[id][g_costume] > -1 ? g_vars[id][g_costume] > 0 ? g_vars[id][g_costume] > 1 ? g_vars[id][g_costume] > 2 ? g_vars[id][g_costume] > 3 ? "COSTUME_PELVIS" : "COSTUME_BACK" : "COSTUME_HEAD" : "COSTUME_SKINTR" : "COSTUME_SKINCT" : "")
	#endif
		show_menu_inventory(id)
		menu_destroy(menu)
		return
	}

	menu_setprop(menu, MPROP_BACKNAME, msgback)
	menu_setprop(menu, MPROP_NEXTNAME, msgnext)
	menu_setprop(menu, MPROP_EXITNAME, msgexit)

	menu_display(id, menu, 0)
}

public menu_shop(id, menu, item)
{
	switch(item)
	{
		case 0..z:
		{
		#if defined ZP_SUPPORT
			if(Total_Skin == 1 && item == 0 || Total_Head == 1 && item == 1 || Total_Back == 1 && item == 2 || Total_Pelvis == 1 && item == 3)
			{
				ColorChat(id, "%L", id, "NOT_AVAILABLE", id, item > -1 ? item > 0 ? item > 1 ? item > 2 ? "COSTUME_PELVIS" : "COSTUME_BACK" : "COSTUME_HEAD" : "COSTUME_SKIN" : "")
				show_menu_shop(id)
			}
		#else
			if(Total_SkinCT == 1 && item == 0 || Total_SkinTR == 1 && item == 1 || Total_Head == 1 && item == 2 || Total_Back == 1 && item == 3 || Total_Pelvis == 1 && item == 4)
			{
				ColorChat(id, "%L", id, "NOT_AVAILABLE", id, item > -1 ? item > 0 ? item > 1 ? item > 2 ? item > 3 ? "COSTUME_PELVIS" : "COSTUME_BACK" : "COSTUME_HEAD" : "COSTUME_SKINTR" : "COSTUME_SKINCT" : "")
				show_menu_shop(id)
			}
		#endif
			else
			{
				g_vars[id][g_costume] = item
				show_menu_costumeshop(id)
			}
		}
		case MENU_EXIT:
		{
			if(g_vars[id][is_connected])
			{
				show_menu_costumes(id)
			}
		}
	}

	menu_destroy(menu)
	return PLUGIN_HANDLED
}

show_menu_shop(id)
{
	new msgm[128], msghead[32], msgback[32], msgpelvis[32], msgexit[32]
	formatex(msgm, charsmax(msgm), "%s \y%L^n\w%L: \r%d", PREFIX_MENU, id, "SHOP", id, "MENU_CASH", g_vars[id][g_cash])
	formatex(msghead, charsmax(msghead), "%L", id, "COSTUME_HEAD")
	formatex(msgback, charsmax(msgback), "%L", id, "COSTUME_BACK")
	formatex(msgpelvis, charsmax(msgpelvis), "%L", id, "COSTUME_PELVIS")
	formatex(msgexit, charsmax(msgexit), "%L", id, "MENU_EXIT")

	new menu = menu_create(msgm, "menu_shop")

#if defined ZP_SUPPORT
	new msgskin[32]; formatex(msgskin, charsmax(msgskin), "%L", id, "COSTUME_SKIN")

	menu_additem(menu, msgskin, "0", 0)
	menu_additem(menu, msghead, "1", 0)
	menu_additem(menu, msgback, "2", 0)
	menu_additem(menu, msgpelvis, "3", 0)
#else
	new msgskinct[32], msgskintr[32]
	formatex(msgskinct, charsmax(msgskinct), "%L", id, "COSTUME_SKINCT")
	formatex(msgskintr, charsmax(msgskintr), "%L", id, "COSTUME_SKINTR")

	menu_additem(menu, msgskinct, "0", 0)
	menu_additem(menu, msgskintr, "1", 0)
	menu_additem(menu, msghead, "2", 0)
	menu_additem(menu, msgback, "3", 0)
	menu_additem(menu, msgpelvis, "4", 0)
#endif

	menu_setprop(menu, MPROP_EXITNAME, msgexit)

	menu_display(id, menu, 0)
}

public menu_costumeshop(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		if(g_vars[id][is_connected])
		{
			show_menu_shop(id)
		}

		menu_destroy(menu)
		return PLUGIN_HANDLED
	}

	new key = item+1

#if defined ZP_SUPPORT
	if(g_vars[id][g_costume] == 0 && g_vars[id][g_acquiredSkin][key] || g_vars[id][g_costume] == 1 && g_vars[id][g_acquiredHead][key] || g_vars[id][g_costume] == 2 && g_vars[id][g_acquiredBack][key] || g_vars[id][g_costume] == 3 && g_vars[id][g_acquiredPelvis][key])
	{
		ColorChat(id, "%L", id, "ALREADY_HAVECOSTUME")
		show_menu_costumeshop(id)
	}
#else
	if(g_vars[id][g_costume] == 0 && g_vars[id][g_acquiredSkinCT][key] || g_vars[id][g_costume] == 1 && g_vars[id][g_acquiredSkinTR][key] || g_vars[id][g_costume] == 2 && g_vars[id][g_acquiredHead][key] || g_vars[id][g_costume] == 3 && g_vars[id][g_acquiredBack][key] || g_vars[id][g_costume] == 4 && g_vars[id][g_acquiredPelvis][key])
	{
		ColorChat(id, "%L", id, "ALREADY_HAVECOSTUME")
		show_menu_costumeshop(id)
	}
#endif
	else
	{
		g_vars[id][g_buying] = key
		show_menu_buycostume(id)
	}

	menu_destroy(menu)
	return PLUGIN_HANDLED
}

show_menu_costumeshop(id)
{
	new msgm[128], msg[128], msg1[16], msg2[64], msgacquired[32], msgback[32], msgnext[32], msgexit[32]
#if defined ZP_SUPPORT
	formatex(msgm, charsmax(msgm), "%s \y%L: %L^n\w%L: \r%d^n", PREFIX_MENU, id, "SHOP", id, g_vars[id][g_costume] > -1 ? g_vars[id][g_costume] > 0 ? g_vars[id][g_costume] > 1 ? g_vars[id][g_costume] > 2 ? "COSTUME_PELVIS" : "COSTUME_BACK" : "COSTUME_HEAD" : "COSTUME_SKIN" : "", id, "MENU_CASH", g_vars[id][g_cash])
#else
	formatex(msgm, charsmax(msgm), "%s \y%L: %L^n\w%L: \r%d^n", PREFIX_MENU, id, "SHOP", id, g_vars[id][g_costume] > -1 ? g_vars[id][g_costume] > 0 ? g_vars[id][g_costume] > 1 ? g_vars[id][g_costume] > 2 ? g_vars[id][g_costume] > 3 ? "COSTUME_PELVIS" : "COSTUME_BACK" : "COSTUME_HEAD" : "COSTUME_SKINTR" : "COSTUME_SKINCT" : "", id, "MENU_CASH", g_vars[id][g_cash])
#endif
	formatex(msgacquired, charsmax(msgacquired), "[%L]", id, "ACQUIRED")
	formatex(msgback, charsmax(msgback), "%L", id, "MENU_BACK")
	formatex(msgnext, charsmax(msgnext), "%L", id, "MENU_NEXT")
	formatex(msgexit, charsmax(msgexit), "%L", id, "MENU_EXIT")

	new menu = menu_create(msgm, "menu_costumeshop")

	switch(g_vars[id][g_costume])
	{
	#if defined ZP_SUPPORT
		case 0:
		{
			for(new i = 1; i < Total_Skin; i++)
			{
				formatex(msg2, charsmax(msg2), "[%L: %d]", id, "PRICE", Costumes_Skin[i][g_price])
				formatex(msg, charsmax(msg), "%s%s \r%s", g_vars[id][g_acquiredSkin][i] ? "\d" : "", Costumes_Skin[i][g_name], g_vars[id][g_acquiredSkin][i] ? msgacquired : msg2)
				num_to_str(i-1, msg1, charsmax(msg1))
				menu_additem(menu, msg, msg1, 0)
			}
		}
	#else
		case 0:
		{
			for(new i = 1; i < Total_SkinCT; i++)
			{
				formatex(msg2, charsmax(msg2), "[%L: %d]", id, "PRICE", Costumes_SkinCT[i][g_price])
				formatex(msg, charsmax(msg), "%s%s \r%s", g_vars[id][g_acquiredSkinCT][i] ? "\d" : "", Costumes_SkinCT[i][g_name], g_vars[id][g_acquiredSkinCT][i] ? msgacquired : msg2)
				num_to_str(i-1, msg1, charsmax(msg1))
				menu_additem(menu, msg, msg1, 0)
			}
		}
		case 1:
		{
			for(new i = 1; i < Total_SkinTR; i++)
			{
				formatex(msg2, charsmax(msg2), "[%L: %d]", id, "PRICE", Costumes_SkinTR[i][g_price])
				formatex(msg, charsmax(msg), "%s%s \r%s", g_vars[id][g_acquiredSkinTR][i] ? "\d" : "", Costumes_SkinTR[i][g_name], g_vars[id][g_acquiredSkinTR][i] ? msgacquired : msg2)
				num_to_str(i-1, msg1, charsmax(msg1))
				menu_additem(menu, msg, msg1, 0)
			}
		}
	#endif
		case y:
		{
			for(new i = 1; i < Total_Head; i++)
			{
				formatex(msg2, charsmax(msg1), "[%L: %d]", id, "PRICE", Costumes_Head[i][g_price])
				formatex(msg, charsmax(msg), "%s%s \r%s", g_vars[id][g_acquiredHead][i] ? "\d" : "", Costumes_Head[i][g_name], g_vars[id][g_acquiredHead][i] ? msgacquired : msg2)
				num_to_str(i-1, msg1, charsmax(msg1))
				menu_additem(menu, msg, msg1, 0)
			}
		}
		case y+1:
		{
			for(new i = 1; i < Total_Back; i++)
			{
				formatex(msg2, charsmax(msg2), "[%L: %d]", id, "PRICE", Costumes_Back[i][g_price])
				formatex(msg, charsmax(msg), "%s%s \r%s", g_vars[id][g_acquiredBack][i] ? "\d" : "", Costumes_Back[i][g_name], g_vars[id][g_acquiredBack][i] ? msgacquired : msg2)
				num_to_str(i-1, msg1, charsmax(msg1))
				menu_additem(menu, msg, msg1, 0)
			}
		}
		case y+2:
		{
			for(new i = 1; i < Total_Pelvis; i++)
			{
				formatex(msg2, charsmax(msg2), "[%L: %d]", id, "PRICE", Costumes_Pelvis[i][g_price])
				formatex(msg, charsmax(msg), "%s%s \r%s", g_vars[id][g_acquiredPelvis][i] ? "\d" : "", Costumes_Pelvis[i][g_name], g_vars[id][g_acquiredPelvis][i] ? msgacquired : msg2)
				num_to_str(i-1, msg1, charsmax(msg1))
				menu_additem(menu, msg, msg1, 0)
			}
		}
	}

	menu_setprop(menu, MPROP_BACKNAME, msgback)
	menu_setprop(menu, MPROP_NEXTNAME, msgnext)
	menu_setprop(menu, MPROP_EXITNAME, msgexit)

	menu_display(id, menu, 0)
}

public menu_buycostume(id, menu, item)
{
	switch(item)
	{
		case 0:
		{
			show_motd_costume(id)
			show_menu_buycostume(id)
		}
		case 1:
		{
			switch(g_vars[id][g_costume])
			{
			#if defined ZP_SUPPORT
				case 0:
				{
					if(g_vars[id][g_cash] >= Costumes_Skin[g_vars[id][g_buying]][g_price])
					{
						g_vars[id][g_cash] -= Costumes_Skin[g_vars[id][g_buying]][g_price]
						g_vars[id][g_acquiredSkin][g_vars[id][g_buying]] = 1
						g_vars[id][g_skin] = g_vars[id][g_buying]
						checkCostumes(id, 0)

						ColorChat(id, "%L", id, "BOUGHT_COSTUME", Costumes_Skin[g_vars[id][g_buying]][g_name])
						ColorChat(id, "%L", id, "BOUGHT_COSTUME2")
					}
					else
					{
						ColorChat(id, "%L", id, "NO_CASH")
					}
				}
			#else
				case 0:
				{
					if(g_vars[id][g_cash] >= Costumes_SkinCT[g_vars[id][g_buying]][g_price])
					{
						g_vars[id][g_cash] -= Costumes_SkinCT[g_vars[id][g_buying]][g_price]
						g_vars[id][g_acquiredSkinCT][g_vars[id][g_buying]] = 1
						g_vars[id][g_skinct] = g_vars[id][g_buying]
						checkCostumes(id, 0)

						ColorChat(id, "%L", id, "BOUGHT_COSTUME", Costumes_SkinCT[g_vars[id][g_buying]][g_name])
						ColorChat(id, "%L", id, "BOUGHT_COSTUME2")
					}
					else
					{
						ColorChat(id, "%L", id, "NO_CASH")
					}
				}
				case 1:
				{
					if(g_vars[id][g_cash] >= Costumes_SkinTR[g_vars[id][g_buying]][g_price])
					{
						g_vars[id][g_cash] -= Costumes_SkinTR[g_vars[id][g_buying]][g_price]
						g_vars[id][g_acquiredSkinTR][g_vars[id][g_buying]] = 1
						g_vars[id][g_skintr] = g_vars[id][g_buying]
						checkCostumes(id, 0)

						ColorChat(id, "%L", id, "BOUGHT_COSTUME", Costumes_SkinTR[g_vars[id][g_buying]][g_name])
						ColorChat(id, "%L", id, "BOUGHT_COSTUME2")
					}
					else
					{
						ColorChat(id, "%L", id, "NO_CASH")
					}
				}
			#endif
				case y:
				{
					if(g_vars[id][g_cash] >= Costumes_Head[g_vars[id][g_buying]][g_price])
					{
						g_vars[id][g_cash] -= Costumes_Head[g_vars[id][g_buying]][g_price]
						g_vars[id][g_acquiredHead][g_vars[id][g_buying]] = 1
						g_vars[id][g_head] = g_vars[id][g_buying]
						checkCostumes(id, 1)

						ColorChat(id, "%L", id, "BOUGHT_COSTUME", Costumes_Head[g_vars[id][g_buying]][g_name])
						ColorChat(id, "%L", id, "BOUGHT_COSTUME2")
					}
					else
					{
						ColorChat(id, "%L", id, "NO_CASH")
					}
				}
				case y+1:
				{
					if(g_vars[id][g_cash] >= Costumes_Back[g_vars[id][g_buying]][g_price])
					{
						g_vars[id][g_cash] -= Costumes_Back[g_vars[id][g_buying]][g_price]
						g_vars[id][g_acquiredBack][g_vars[id][g_buying]] = 1
						g_vars[id][g_back] = g_vars[id][g_buying]
						checkCostumes(id, 2)

						ColorChat(id, "%L", id, "BOUGHT_COSTUME", Costumes_Back[g_vars[id][g_buying]][g_name])
						ColorChat(id, "%L", id, "BOUGHT_COSTUME2")
					}
					else
					{
						ColorChat(id, "%L", id, "NO_CASH")
					}
				}
				case y+2:
				{
					if(g_vars[id][g_cash] >= Costumes_Pelvis[g_vars[id][g_buying]][g_price])
					{
						g_vars[id][g_cash] -= Costumes_Pelvis[g_vars[id][g_buying]][g_price]
						g_vars[id][g_acquiredPelvis][g_vars[id][g_buying]] = 1
						g_vars[id][g_pelvis] = g_vars[id][g_buying]
						checkCostumes(id, 3)

						ColorChat(id, "%L", id, "BOUGHT_COSTUME", Costumes_Pelvis[g_vars[id][g_buying]][g_name])
						ColorChat(id, "%L", id, "BOUGHT_COSTUME2")
					}
					else
					{
						ColorChat(id, "%L", id, "NO_CASH")
					}
				}
			}

			show_menu_costumeshop(id)
		}
		case MENU_EXIT:
		{
			if(g_vars[id][is_connected])
			{
				show_menu_costumeshop(id)
			}
		}
	}

	menu_destroy(menu)
	return PLUGIN_HANDLED
}

show_menu_buycostume(id)
{
	new msgm[256], msgpreview[32], msgbuy[32], msgcancel[32]
	formatex(msgpreview, charsmax(msgpreview), "%L", id, "PREVIEW")
	formatex(msgbuy, charsmax(msgbuy), "%L", id, "BUY")
	formatex(msgcancel, charsmax(msgcancel), "%L", id, "CANCEL_PURCHASE")

	switch(g_vars[id][g_costume])
	{
	#if defined ZP_SUPPORT
		case 0: formatex(msgm, charsmax(msgm), "%s \y%L: %L^n\w%L: \r%s^n\w%L: \r%d", PREFIX_MENU, id, "SHOP", id, "COSTUME_SKIN", id, "COSTUME", Costumes_Skin[g_vars[id][g_buying]][g_name], id, "PRICE", Costumes_Skin[g_vars[id][g_buying]][g_price])
	#else
		case 0: formatex(msgm, charsmax(msgm), "%s \y%L: %L^n\w%L: \r%s^n\w%L: \r%d", PREFIX_MENU, id, "SHOP", id, "COSTUME_SKINCT", id, "COSTUME", Costumes_SkinCT[g_vars[id][g_buying]][g_name], id, "PRICE", Costumes_SkinCT[g_vars[id][g_buying]][g_price])
		case 1: formatex(msgm, charsmax(msgm), "%s \y%L: %L^n\w%L: \r%s^n\w%L: \r%d", PREFIX_MENU, id, "SHOP", id, "COSTUME_SKINTR", id, "COSTUME", Costumes_SkinTR[g_vars[id][g_buying]][g_name], id, "PRICE", Costumes_SkinTR[g_vars[id][g_buying]][g_price])
	#endif
		case y: formatex(msgm, charsmax(msgm), "%s \y%L: %L^n\w%L: \r%s^n\w%L: \r%d", PREFIX_MENU, id, "SHOP", id, "COSTUME_HEAD", id, "COSTUME", Costumes_Head[g_vars[id][g_buying]][g_name], id, "PRICE", Costumes_Head[g_vars[id][g_buying]][g_price])
		case y+1: formatex(msgm, charsmax(msgm), "%s \y%L: %L^n\w%L: \r%s^n\w%L: \r%d", PREFIX_MENU, id, "SHOP", id, "COSTUME_BACK", id, "COSTUME", Costumes_Back[g_vars[id][g_buying]][g_name], id, "PRICE", Costumes_Back[g_vars[id][g_buying]][g_price])
		case y+2: formatex(msgm, charsmax(msgm), "%s \y%L: %L^n\w%L: \r%s^n\w%L: \r%d", PREFIX_MENU, id, "SHOP", id, "COSTUME_PELVIS", id, "COSTUME", Costumes_Pelvis[g_vars[id][g_buying]][g_name], id, "PRICE", Costumes_Pelvis[g_vars[id][g_buying]][g_price])
	}

	new menu = menu_create(msgm, "menu_buycostume")

	menu_additem(menu, msgpreview, "0", 0)
	menu_additem(menu, msgbuy, "1", 0)

	menu_setprop(menu, MPROP_EXITNAME, msgcancel)

	menu_display(id, menu, 0)
}

public show_motd_costume(id)
{
	new motd[512], motd_name[128]

	switch(g_vars[id][g_costume])
	{
	#if defined ZP_SUPPORT
		case 0:
		{
			formatex(motd, charsmax(motd), "<html><head><style>img{display:block;margin-top:125px;margin-left:auto;margin-right:auto;}</style></head><body style=^"margin:0px;background:#000000;^"><img src=^"%s^"></body></html>", Costumes_Skin[g_vars[id][g_buying]][g_preview])
			formatex(motd_name, charsmax(motd_name), "%s", Costumes_Skin[g_vars[id][g_buying]][g_name])
		}
	#else
		case 0:
		{
			formatex(motd, charsmax(motd), "<html><head><style>img{display:block;margin-top:125px;margin-left:auto;margin-right:auto;}</style></head><body style=^"margin:0px;background:#000000;^"><img src=^"%s^"></body></html>", Costumes_SkinCT[g_vars[id][g_buying]][g_preview])
			formatex(motd_name, charsmax(motd_name), "%s", Costumes_SkinCT[g_vars[id][g_buying]][g_name])
		}
		case 1:
		{
			formatex(motd, charsmax(motd), "<html><head><style>img{display:block;margin-top:125px;margin-left:auto;margin-right:auto;}</style></head><body style=^"margin:0px;background:#000000;^"><img src=^"%s^"></body></html>", Costumes_SkinTR[g_vars[id][g_buying]][g_preview])
			formatex(motd_name, charsmax(motd_name), "%s", Costumes_SkinTR[g_vars[id][g_buying]][g_name])
		}
	#endif
		case y:
		{
			formatex(motd, charsmax(motd), "<html><head><style>img{display:block;margin-top:125px;margin-left:auto;margin-right:auto;}</style></head><body style=^"margin:0px;background:#000000;^"><img src=^"%s^"></body></html>", Costumes_Head[g_vars[id][g_buying]][g_preview])
			formatex(motd_name, charsmax(motd_name), "%s", Costumes_Head[g_vars[id][g_buying]][g_name])
		}
		case y+1:
		{
			formatex(motd, charsmax(motd), "<html><head><style>img{display:block;margin-top:125px;margin-left:auto;margin-right:auto;}</style></head><body style=^"margin:0px;background:#000000;^"><img src=^"%s^"></body></html>", Costumes_Back[g_vars[id][g_buying]][g_preview])
			formatex(motd_name, charsmax(motd_name), "%s", Costumes_Back[g_vars[id][g_buying]][g_name])
		}
		case y+2:
		{
			formatex(motd, charsmax(motd), "<html><head><style>img{display:block;margin-top:125px;margin-left:auto;margin-right:auto;}</style></head><body style=^"margin:0px;background:#000000;^"><img src=^"%s^"></body></html>", Costumes_Pelvis[g_vars[id][g_buying]][g_preview])
			formatex(motd_name, charsmax(motd_name), "%s", Costumes_Pelvis[g_vars[id][g_buying]][g_name])
		}
	}

	show_motd(id, motd, motd_name)
}

reset_vars(id)
{
	g_vars[id][g_cash] = 0

#if defined ZP_SUPPORT
	g_vars[id][g_skin] = 0

	for(new i = 1; i < Total_Skin; i++)
	{
		g_vars[id][g_acquiredSkin][i] = 0
	}
#else
	g_vars[id][g_skinct] = 0
	g_vars[id][g_skintr] = 0

	for(new i = 1; i < Total_SkinCT; i++)
	{
		g_vars[id][g_acquiredSkinCT][i] = 0
	}

	for(new i = 1; i < Total_SkinTR; i++)
	{
		g_vars[id][g_acquiredSkinTR][i] = 0
	}
#endif

	g_vars[id][g_head] = 0
	g_vars[id][g_back] = 0
	g_vars[id][g_pelvis] = 0

	for(new i = 1; i < Total_Head; i++)
	{
		g_vars[id][g_acquiredHead][i] = 0
	}

	for(new i = 1; i < Total_Back; i++)
	{
		g_vars[id][g_acquiredBack][i] = 0
	}

	for(new i = 1; i < Total_Pelvis; i++)
	{
		g_vars[id][g_acquiredPelvis][i] = 0
	}
}

checkCostumes(id, key)
{
	if(!is_user_alive(id))
	{
		return
	}

#if defined ZP_SUPPORT
	if(zp_get_user_survivor(id) || zp_get_user_zombie(id) || zp_get_user_nemesis(id))
	{
		return
	}
#endif

	switch(key)
	{
		case 0:
		{
		#if defined ZP_SUPPORT
			if(g_vars[id][g_skin] == 0)
			{
				cs_reset_player_model(id)
			}
			else
			{
				cs_set_player_model(id, Costumes_Skin[g_vars[id][g_skin]][g_model])
			}
		#else
			switch(get_user_team(id))
			{
				case 1:
				{
					if(g_vars[id][g_skintr] == 0)
					{
						cs_reset_player_model(id)
					}
					else
					{
						cs_set_player_model(id, Costumes_SkinTR[g_vars[id][g_skintr]][g_model])
					}
				}
				case 2:
				{
					if(g_vars[id][g_skinct] == 0)
					{
						cs_reset_player_model(id)
					}
					else
					{
						cs_set_player_model(id, Costumes_SkinCT[g_vars[id][g_skinct]][g_model])
					}
				}
			}
		#endif
		}
		case 1:
		{
			reset_costume(id, 1)

			if(g_vars[id][g_head] != 0)
			{
				make_costume(id, Costumes_Head[g_vars[id][g_head]][g_model], 1, Costumes_Head[g_vars[id][g_head]][g_anim])
			}
		}
		case 2:
		{
			reset_costume(id, 2)

			if(g_vars[id][g_back] != 0)
			{
				make_costume(id, Costumes_Back[g_vars[id][g_back]][g_model], 2, Costumes_Back[g_vars[id][g_back]][g_anim])
			}
		}
		case 3:
		{
			reset_costume(id, 3)

			if(g_vars[id][g_pelvis] != 0)
			{
				make_costume(id, Costumes_Pelvis[g_vars[id][g_pelvis]][g_model], 3, Costumes_Pelvis[g_vars[id][g_pelvis]][g_anim])
			}
		}
	}
}

make_costume(id, model[], part, anim)
{
	if(!is_user_alive(id))
	{
		return
	}

	switch(part)
	{
		case 1:
		{
			g_vars[id][g_CostumeModelHead] = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))

			set_pev(g_vars[id][g_CostumeModelHead], pev_movetype, MOVETYPE_FOLLOW)
			set_pev(g_vars[id][g_CostumeModelHead], pev_aiment, id)
			set_pev(g_vars[id][g_CostumeModelHead], pev_rendermode, kRenderNormal)
			engfunc(EngFunc_SetModel, g_vars[id][g_CostumeModelHead], model)
			set_pev(g_vars[id][g_CostumeModelHead], pev_body, anim)
			set_pev(g_vars[id][g_CostumeModelHead], pev_sequence, anim)
			set_pev(g_vars[id][g_CostumeModelHead], pev_animtime, get_gametime())
			set_pev(g_vars[id][g_CostumeModelHead], pev_framerate, 1.0)
		}
		case 2:
		{
			g_vars[id][g_CostumeModelBack] = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))

			set_pev(g_vars[id][g_CostumeModelBack], pev_movetype, MOVETYPE_FOLLOW)
			set_pev(g_vars[id][g_CostumeModelBack], pev_aiment, id)
			set_pev(g_vars[id][g_CostumeModelBack], pev_rendermode, kRenderNormal)
			engfunc(EngFunc_SetModel, g_vars[id][g_CostumeModelBack], model)
			set_pev(g_vars[id][g_CostumeModelBack], pev_body, anim)
			set_pev(g_vars[id][g_CostumeModelBack], pev_sequence, anim)
			set_pev(g_vars[id][g_CostumeModelBack], pev_animtime, get_gametime())
			set_pev(g_vars[id][g_CostumeModelBack], pev_framerate, 1.0)
		}
		case 3:
		{
			g_vars[id][g_CostumeModelPelvis] = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))

			set_pev(g_vars[id][g_CostumeModelPelvis], pev_movetype, MOVETYPE_FOLLOW)
			set_pev(g_vars[id][g_CostumeModelPelvis], pev_aiment, id)
			set_pev(g_vars[id][g_CostumeModelPelvis], pev_rendermode, kRenderNormal)
			engfunc(EngFunc_SetModel, g_vars[id][g_CostumeModelPelvis], model)
			set_pev(g_vars[id][g_CostumeModelPelvis], pev_body, anim)
			set_pev(g_vars[id][g_CostumeModelPelvis], pev_sequence, anim)
			set_pev(g_vars[id][g_CostumeModelPelvis], pev_animtime, get_gametime())
			set_pev(g_vars[id][g_CostumeModelPelvis], pev_framerate, 1.0)
		}
	}
}

reset_costume(id, number)
{
	if(!is_user_alive(id))
	{
		return
	}

	switch(number)
	{
		case 1:
		{
			fm_set_entity_visibility(g_vars[id][g_CostumeModelHead], 0)
			g_vars[id][g_CostumeModelHead] = 0
		}
		case 2:
		{
			fm_set_entity_visibility(g_vars[id][g_CostumeModelBack], 0)
			g_vars[id][g_CostumeModelBack] = 0
		}
		case 3:
		{
			fm_set_entity_visibility(g_vars[id][g_CostumeModelPelvis], 0)
			g_vars[id][g_CostumeModelPelvis] = 0
		}
	}
}

stock ColorChat(const id, const szInput[], any:...)
{
	new iPlayers[32], iCount = 1
	static szMessage[191]
	vformat(szMessage, charsmax(szMessage), szInput, 3)
	format(szMessage[0], charsmax(szMessage), "%s %s", PREFIX_CHAT, szMessage)

	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, iPlayer; i < iCount; i++)
	{
		iPlayer = iPlayers[i]

		if(g_vars[iPlayer][is_connected])
		{
			message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, iPlayer)
			write_byte(iPlayer)
			write_string(szMessage)
			message_end()
		}
	}
}

stock fm_set_entity_visibility(index, visible = 1)
{
	set_pev(index, pev_effects, visible == 1 ? pev(index, pev_effects) & ~EF_NODRAW : pev(index, pev_effects) | EF_NODRAW)

	return 1
}

stock precache_player_model(szModel[])
{
	static szFile[128]
	formatex(szFile, charsmax(szFile), "models/player/%s/%s.mdl", szModel, szModel)
	precache_model(szFile)
	replace(szFile, charsmax(szFile), ".mdl", "T.mdl")

	if(file_exists(szFile))
	{
		precache_model(szFile)
	}
}
i want to have currency with simple money cs, please help me.
nades 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 11:25.


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