#include <amxmodx>
    #include <amxmisc>
    #include <fakemeta>
    #include <nvault>
    #include <colorchat>
 
    #define PLUGIN "Fegyver Skin Menu"
    #define VERSION "1.0"
    #define AUTHOR "RaZzoR"
 
 
    #define HOOK_P_MODELS
    #define HOOK_V_MODELS
 
    new weapon_select[33]
    new g_vault, vault
    new fragek[33]
    new name[32][33]
 
    new const menu_item_names[][][] = {
    { "Alap Csomag", "0", "" },
    { "Arany Csomag", "2", "arany" }
    }
 
    new const models_name[][] = {
    "ak47.mdl"
    }
 
    public plugin_init() {
    register_plugin(PLUGIN, VERSION, AUTHOR)
 
    register_clcmd("say /menu", "clcmd_menu")
    register_event("CurWeapon","Hook_P_V_Model","be","1=1")
    vault = nvault_open("fegyver_skin_menu")
    register_event("DeathMsg", "event_death", "ade")
 
    #if defined HOOK_W_MODELS
    register_forward(FM_SetModel, "Hook_W_Model", 1)
    #endif
    }
 
    public event_death() {
    new killer = read_data(1)
    new victim = read_data(2)
 
    if(killer == victim)
    {
    return PLUGIN_HANDLED	
    }
    fragek[killer]++ 
    }
    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
    }
    }
    }
 
 
    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), "\wFegyver Skin Menü^nÖléseid: \r%i", fragek[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(fragek[id] < convert_num)
    format(menu_newline, charsmax(menu_newline), "%s (\d%i Ölés Kell)", menu_item_names[i][0], convert_num)
    else
    format(menu_newline, charsmax(menu_newline), "%s (\dElérve)", 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(fragek[id] < convert_num) {
    ColorChat(id, GREEN, "[Infórmáció] ^1Sajnálom túl kevés ölésed van!", menu_item_names[key][0])	
 
    return PLUGIN_HANDLED
    }
 
    else {
    weapon_select[id] = key
    ColorChat(id, GREEN, "[Infórmáció] ^1Sikeresen kivlásztottad az ^3%s ^1-ot", menu_item_names[key][0])
    }
 
    return PLUGIN_CONTINUE
    }
 
    public client_putinserver(id) {
    betoltes(id)
    get_user_name(id, name[id], 31)
    }
 
    public mentes(id)
    {
    new vaultkey[64],vaultdata[256], name[32]
    get_user_name(id, name, 31)
    format(vaultkey,63,"%s-frag", name[id])
    format(vaultdata,511,"%d", fragek[id])
    nvault_set(vault,vaultkey,vaultdata)
    nvault_set(g_vault,vaultkey,vaultdata)
    return PLUGIN_CONTINUE
    }
    public betoltes(id)
    {
    new vaultkey[64],vaultdata[256], name[32]
    get_user_name(id, name, 31)
    format(vaultkey,63,"%s-frag", name[id])
    nvault_get(vault,vaultkey,vaultdata,255) 
    nvault_get(g_vault,vaultkey,vaultdata,511)
    fragek[id] = str_to_num(vaultdata)
    return PLUGIN_CONTINUE;
    }
    public client_disconnect(id)
    {
    mentes(id)
    }
    public client_connect(id)
    {
    betoltes(id)
    }