#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <ColorChat>
#include <fakemeta>

#define PLUGIN "Fegyver Skin Menu"
#define VERSION "1.0"
#define AUTHOR "RaZzoR"

#define DICTIONARY "fegyver_skin_menu.txt"

//#define HOOK_P_MODELS
#define HOOK_V_MODELS
//#define HOOK_W_MODELS

new weapon_select[33]
new filename[128];
new oles[33]

new const menu_item_names[][][] = {
	{ "Alap Csomag [Ingyenes]",	"0",	"" 	    },
	{ "CSGO Csomag [Ingyenes]",	"0",	"black_night_fun_shedi/csgo" 	    },
	{ "Rozsdás Csomag",		"50",	"black_night_fun_shedi/rozsdas" },
	{ "Metál Csomag",		"150",	"black_night_fun_shedi/metal" },
	{ "Arany Csomag",		"400",	"black_night_fun_shedi/arany" },
	{ "Galaxy Csomag",		"550",	"black_night_fun_shedi/galaxy" },
	{ "Eagle Csomag",		"1000",	"black_night_fun_shedi/eagle" },
	{ "Star Csomag",		"1150",	"black_night_fun_shedi/star" },
	{ "Ultra Csomag",		"2550",	"black_night_fun_shedi/ultra" },
	{ "Tűz Csomag",		"3250",	"black_night_fun_shedi/tuz" },
	{ "Choijiyoonpaint Csomag",		"4450",	"black_night_fun_shedi/choijiyoonpaint" },
	{ "Prémium Csomag",		"11150",	"black_night_fun_shedi/vip" }
}

new const models_name[][] = {
	"ak47.mdl",                  
	"m4a1.mdl",                    
	"awp.mdl",
	"deagle.mdl",
	"knife.mdl"
} 

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	register_impulse(201, "clcmd_menu")
	register_event("DeathMsg","death","a")
	
	register_dictionary(DICTIONARY)
	
	register_clcmd("say /menu", "clcmd_menu")
	register_event("CurWeapon","Hook_P_V_Model","be","1=1")
	
	#if defined HOOK_W_MODELS
	register_forward(FM_SetModel, "Hook_W_Model", 1)
	#endif
}
public death(){
	new killer = read_data(1)
	new victim = read_data(2)
 
	if(killer == victim)
	{
		return PLUGIN_HANDLED
	}
	oles[killer]++
	return PLUGIN_HANDLED
}
public plugin_precache() {
	for(new i = 0; i < sizeof(models_name); i++) {
		for(new j = 1; j < sizeof(menu_item_names); j++) {
			#if defined HOOK_P_MODELS
			new precache_p[256]
			format(precache_p, sizeof(precache_p), "models/%s/p_%s", menu_item_names[j][2], models_name[i])
			
			precache_model(precache_p)
			#endif
			
			#if defined HOOK_V_MODELS
			new precache_v[256]
			format(precache_v, sizeof(precache_v), "models/%s/v_%s", menu_item_names[j][2], models_name[i])
			
			precache_model(precache_v)
			#endif
			
			#if defined HOOK_W_MODELS
			new precache_w[256]
			format(precache_w, sizeof(precache_w), "models/%s/w_%s", menu_item_names[j][2], models_name[i])
			
			precache_model(precache_w)
			#endif
		}
	}
}

	
public W_Model_Hook(ent, model[]) {
	if(!pev_valid(ent)) return FMRES_IGNORED

	new owner = pev(ent, pev_owner)

	for(new i = 0; i < sizeof(models_name); i++) {
		new old_w[256]
		format(old_w, sizeof(old_w), "models/w_%s", models_name[i])

		new new_w[256]			
		format(new_w, sizeof(new_w), "models/%s/w_%s", menu_item_names[weapon_select[owner]][2], models_name[i])
		
		if(equali(model, old_w) || equali(model, new_w)) {
			if(weapon_select[owner] >= 1) engfunc(EngFunc_SetModel, ent, new_w)
			else engfunc(EngFunc_SetModel, ent, old_w)
				
			return FMRES_SUPERCEDE
		}
	}
	
	return FMRES_IGNORED
}

public Hook_P_V_Model(id) {
	if(!is_user_alive(id))
		return PLUGIN_CONTINUE
	
	static v_model[32], p_model[32]
	pev(id, pev_viewmodel2, v_model, 31)
	pev(id, pev_weaponmodel2, p_model,31)
	
	for(new i = 0; i < sizeof(models_name); i++) {
		#if defined HOOK_V_MODELS
		new old_v[256]
		format(old_v, sizeof(old_v), "models/v_%s", models_name[i])

		new new_v[256]
		format(new_v, sizeof(new_v), "models/%s/v_%s", menu_item_names[weapon_select[id]][2], models_name[i])
		
		if(equali(v_model, old_v) || equali(v_model, new_v)) {
			if(weapon_select[id] >= 1) set_pev(id, pev_viewmodel2, new_v)			
			else set_pev(id, pev_viewmodel2, old_v)

			break
		}
		#endif
		
		#if defined HOOK_P_MODELS
		new old_p[256]
		format(old_p, sizeof(old_p), "models/p_%s", models_name[i])

		new new_p[256]
		format(new_p, sizeof(new_p), "models/%s/p_%s", menu_item_names[weapon_select[id]][2], models_name[i])

		if(equali(p_model, old_p) || equali(p_model, new_p)) {
			if(weapon_select[id] >= 1) set_pev(id, pev_weaponmodel2, new_p)		
			else set_pev(id, pev_weaponmodel2, old_p)

			break
		}
		#endif
	}
	
	return PLUGIN_CONTINUE
}
public client_disconnect(id)
weapon_select[id] = 0

public clcmd_menu_handler(id, menu, item) {
	if(item == MENU_EXIT) {
		menu_destroy(menu)
		return PLUGIN_HANDLED
	}
	
	new data[64], szName[64]
	new access, callback
	menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback)
	
	new key = str_to_num(data)
	new convert_num = str_to_num(menu_item_names[key][1])
	
	if(get_user_frags(id) < convert_num) {
	ColorChat(id, GREEN, "^3[^4Black*.*Night^3]^1 Ezt a csomagot ^3(^4%s^1) nem használhatod mert nincs elég ^3(^4%d^1) pontod!", menu_item_names[key][0], convert_num);
		return PLUGIN_HANDLED
	}
	
	else {
		weapon_select[id] = key
		ColorChat(id, GREEN, "^3[^4Black*.*Night^3]^1 Ezt a csomagot ^3(^4%s^1) kiválasztottad!", menu_item_names[key][0]);
		Hook_P_V_Model(id)
	}
	
	return PLUGIN_CONTINUE
}