#include <amxmodx>
#include <amxmisc>
#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 const menu_item_names[][][] = {
	{ "Alap Csomag",	"0",	"" 	    },
	{ "CSO Csomag",		"2",	"cso_skins" }
}
 
new const models_name[][] = {
	"ak47.mdl",                  
	"aug.mdl",                    
	"awp.mdl"
} 
 
public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
 
	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 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 client_disconnect(id) 
	weapon_select[id] = 0
 
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 clcmd_menu(id) {
	new menu_line[64], menu_newline[64], i_data[64]
	format(menu_line, charsmax(menu_line), "\w%L", id, "SKIN_MENU", get_user_frags(id))
 
	new menu = menu_create(menu_line, "clcmd_menu_handler")
 
	for(new  i = 0; i < sizeof(menu_item_names); i++) {
		new convert_num = str_to_num(menu_item_names[i][1])
		num_to_str(i, i_data, sizeof(i_data))
 
		if(get_user_frags(id) < convert_num)
			format(menu_newline, charsmax(menu_newline), "%L", id, "SKIN_ITEM1", menu_item_names[i][0], convert_num)
		else
			format(menu_newline, charsmax(menu_newline), "%L", id, "SKIN_ITEM2", menu_item_names[i][0])
		menu_additem(menu, menu_newline, i_data, 0)
	}
 
	menu_display(id, menu, 0)
 
	return PLUGIN_HANDLED
}
 
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) {
		client_print(id, print_chat, "%L", id, "SKIN_NOT_USE", menu_item_names[key][0], convert_num)
		return PLUGIN_HANDLED
	}
 
	else {
		weapon_select[id] = key
		client_print(id, print_chat, "%L", id, "SKIN_CHOOSED", menu_item_names[key][0])
		Hook_P_V_Model(id)
	}
 
	return PLUGIN_CONTINUE
}