#include <amxmodx>
#include <nvault>
#include <fakemeta>
#include <hamsandwich>

/******************************************************** PLUGIN PREPARE ********************************************************/

enum ModelData
{
    ModelAK,
    ModelAWP,
    ModelFamas,
    ModelGalil,
    ModelGlock,
    ModelM4A1,
    ModelUSP,
    ModelDeagle,
    ModelMP5,
    ModelScout
}

new UserData[33][ModelData];

public plugin_init()
{
    
    register_plugin("Change Model", "2.5", "Sloenthran");
    
    register_clcmd("say /skiny", "OpenMenu");
    register_clcmd("say_team /skiny", "OpenMenu");
    
    RegisterHam(Ham_Item_Deploy, "weapon_ak47", "EventChangeAK", 1);
    RegisterHam(Ham_Item_Deploy, "weapon_awp", "EventChangeAWP", 1);
    RegisterHam(Ham_Item_Deploy, "weapon_famas", "EventChangeFamas", 1);
    RegisterHam(Ham_Item_Deploy, "weapon_galil", "EventChangeGalil", 1);
    RegisterHam(Ham_Item_Deploy, "weapon_glock18", "EventChangeGlock", 1);
    RegisterHam(Ham_Item_Deploy, "weapon_m4a1", "EventChangeM4A1", 1);
    RegisterHam(Ham_Item_Deploy, "weapon_usp", "EventChangeUSP", 1);
    RegisterHam(Ham_Item_Deploy, "weapon_deagle", "EventChangeDeagle", 1);
    RegisterHam(Ham_Item_Deploy, "weapon_mp5navy", "EventChangeMP5", 1);
    RegisterHam(Ham_Item_Deploy, "weapon_scout", "EventChangeScout", 1);
    
}

public plugin_precache() 
{
    
    precache_model("models/ak47/v_curzon.mdl");
    precache_model("models/ak47/p_curzon.mdl");
    precache_model("models/ak47/v_vulcan.mdl");
    precache_model("models/ak47/p_vulcan.mdl");
    precache_model("models/awp/v_carbon.mdl");
    precache_model("models/awp/p_carbon.mdl");
    precache_model("models/awp/v_cyrex.mdl");
    precache_model("models/awp/p_cyrex.mdl");
    precache_model("models/famas/v_neon.mdl");
    precache_model("models/famas/p_neon.mdl");
    precache_model("models/famas/v_pulse.mdl");
    precache_model("models/galil/v_chatter.mdl");
    precache_model("models/galil/v_odyssy.mdl");
    precache_model("models/glock/v_vulcan.mdl");
    precache_model("models/glock/p_vulcan.mdl");
    precache_model("models/glock/v_water.mdl");
    precache_model("models/m4a1/v_asiimov.mdl");
    precache_model("models/m4a1/p_asiimov.mdl");
    precache_model("models/m4a1/v_hyper.mdl");
    precache_model("models/usp/v_kill.mdl");
    precache_model("models/usp/v_orion.mdl");
    precache_model("models/deagle/v_blaze.mdl");
    precache_model("models/deagle/v_storm.mdl");
    precache_model("models/mp5/v_asiimov.mdl");
    precache_model("models/mp5/p_asiimov.mdl");
    precache_model("models/mp5/v_max.mdl");
    precache_model("models/scout/v_power.mdl");
    precache_model("models/scout/p_power.mdl");
    precache_model("models/scout/v_ballista.mdl");
    
}
    
/******************************************************** PLUGIN PREPARE ********************************************************/

/******************************************************** USER ********************************************************/

public client_authorized(User)
{

    UserData[User][ModelAK] = 3;
    UserData[User][ModelAWP] = 3;
    UserData[User][ModelFamas] = 3;
    UserData[User][ModelGalil] = 3;
    UserData[User][ModelGlock] = 3;
    UserData[User][ModelM4A1] = 3;
    UserData[User][ModelUSP] = 3;
    UserData[User][ModelDeagle] = 3;
    UserData[User][ModelMP5] = 3;
    UserData[User][ModelScout] = 3;
    
}

/******************************************************** USER ********************************************************/

/******************************************************** CHANGE MODEL ********************************************************/

public EventChangeAK(Weapon) 
{
    
    static User;
    User = pev(Weapon, pev_owner);

    switch(UserData[User][ModelAK])
    {

        case 1:
        {
        
            set_pev(User, pev_viewmodel2, "models/ak47/v_curzon.mdl");
            set_pev(User, pev_weaponmodel2, "models/ak47/p_curzon.mdl");
        
        }
        
        case 2:
        {
        
            set_pev(User, pev_viewmodel2, "models/ak47/v_vulcan.mdl");
            set_pev(User, pev_weaponmodel2, "models/ak47/p_vulcan.mdl");
        
        }
    
        case 3:
        {
    
            set_pev(User, pev_viewmodel2, "models/v_ak47.mdl");
            set_pev(User, pev_weaponmodel2, "models/p_ak47.mdl");
        
        }
        
    }
    
}

public EventChangeAWP(Weapon) 
{
    
    static User;
    User = pev(Weapon, pev_owner);
    
    switch(UserData[User][ModelAWP])
    {
    
        case 1:
        {
        
            set_pev(User, pev_viewmodel2, "models/awp/v_carbon.mdl");
            set_pev(User, pev_weaponmodel2, "models/awp/p_carbon.mdl");
        
        }
    
        case 2:
        {
        
            set_pev(User, pev_viewmodel2, "models/awp/v_cyrex.mdl");
            set_pev(User, pev_weaponmodel2, "models/awp/p_cyrex.mdl");
        
        }

        case 3:
        {
    
            set_pev(User, pev_viewmodel2, "models/v_awp.mdl");
            set_pev(User, pev_weaponmodel2, "models/p_awp.mdl");
        
        }

    }

}

public EventChangeFamas(Weapon) 
{
    
    static User;
    User = pev(Weapon, pev_owner);
    
    switch(UserData[User][ModelFamas])
    {
    
        case 1:
        {
        
            set_pev(User, pev_viewmodel2, "models/famas/v_neon.mdl");
            set_pev(User, pev_weaponmodel2, "models/famas/p_neon.mdl");
        
        }
    
        case 2:
        {
        
            set_pev(User, pev_viewmodel2, "models/famas/v_pulse.mdl");
        
        }
        
        case 3:
        {
            
            set_pev(User, pev_viewmodel2, "models/v_famas.mdl");
            set_pev(User, pev_weaponmodel2, "models/p_famas.mdl");
            
        }
        
    }
    
}

public EventChangeGalil(Weapon) 
{
    
    static User;
    User = pev(Weapon, pev_owner);
    
    switch(UserData[User][ModelGalil])
    {
    
        case 1:
        {
        
            set_pev(User, pev_viewmodel2, "models/galil/v_chatter.mdl");
    
        }
        
        case 2:
        {
            
            set_pev(User, pev_viewmodel2, "models/galil/v_odyssy.mdl");
            
        }
        
        case 3:
        {
            
            set_pev(User, pev_viewmodel2, "models/v_galil.mdl");
            set_pev(User, pev_weaponmodel2, "models/p_galil.mdl");
            
        }
        
    }
    
}

public EventChangeGlock(Weapon) 
{
    
    static User;
    User = pev(Weapon, pev_owner);
    
    switch(UserData[User][ModelGlock])
    {
    
        case 1:
        {
        
            set_pev(User, pev_viewmodel2, "models/glock/v_vulcan.mdl");
            set_pev(User, pev_weaponmodel2, "models/glock/p_vulcan.mdl");
        
        }
        
        case 2:
        {
            
            set_pev(User, pev_viewmodel2, "models/glock/v_water.mdl");
            
        }
        
        case 3:
        {
            
            set_pev(User, pev_viewmodel2, "models/v_glock18.mdl");
            set_pev(User, pev_weaponmodel2, "models/p_glock18.mdl");
            
        }
    
    }
    
}

public EventChangeM4A1(Weapon) 
{
    
    static User;
    User = pev(Weapon, pev_owner);
    
    switch(UserData[User][ModelM4A1])
    {
        
        case 1:
        {
            
            set_pev(User, pev_viewmodel2, "models/m4a1/v_asiimov.mdl");
            set_pev(User, pev_weaponmodel2, "models/m4a1/p_asiimov.mdl");
            
        }
        
        case 2:
        {
            
            set_pev(User, pev_viewmodel2, "models/m4a1/v_hyper.mdl");
            
        }
    
        case 3:
        {
        
            set_pev(User, pev_viewmodel2, "models/v_m4a1.mdl");
            set_pev(User, pev_weaponmodel2, "models/p_m4a1.mdl");
            
        }
        
    }
    
}

public EventChangeUSP(Weapon) 
{
    
    static User;
    User = pev(Weapon, pev_owner);
    
    switch(UserData[User][ModelUSP])
    {
    
        case 1:
        {
        
            set_pev(User, pev_viewmodel2, "models/usp/v_kill.mdl");
        
        }
    
        case 2:
        {
            
            set_pev(User, pev_viewmodel2, "models/usp/v_orion.mdl");
            
        }
    
        case 3:
        {
            
            set_pev(User, pev_viewmodel2, "models/v_usp.mdl");
            set_pev(User, pev_weaponmodel2, "models/p_usp.mdl");
            
        }
        
    }
    
}

public EventChangeDeagle(Weapon) 
{
    
    static User;
    User = pev(Weapon, pev_owner);
    
    switch(UserData[User][ModelDeagle])
    {
        
        case 1:
        {
            
            set_pev(User, pev_viewmodel2, "models/deagle/v_blaze.mdl");
            
        }
        
        case 2:
        {
            
            set_pev(User, pev_viewmodel2, "models/deagle/v_storm.mdl");
            
        }
        
        case 3:
        {
            
            set_pev(User, pev_viewmodel2, "models/v_deagle.mdl");
            set_pev(User, pev_weaponmodel2, "models/p_deagle.mdl");
            
        }
        
    }
    
}

public EventChangeMP5(Weapon) 
{
    
    static User;
    User = pev(Weapon, pev_owner);
    
    switch(UserData[User][ModelMP5])
    {
        
        case 1:
        {
            
            set_pev(User, pev_viewmodel2, "models/mp5/v_asiimov.mdl");
            set_pev(User, pev_weaponmodel2, "models/mp5/p_asiimov.mdl");
        
        }
        
        case 2:
        {
            
            set_pev(User, pev_viewmodel2, "models/mp5/v_max.mdl");
            
        }
        
        case 3:
        {
            
            set_pev(User, pev_viewmodel2, "models/v_mp5.mdl");
            set_pev(User, pev_weaponmodel2, "models/p_mp5.mdl");
            
        }
        
    }
    
}

public EventChangeScout(Weapon) 
{
    
    static User;
    User = pev(Weapon, pev_owner);
    
    switch(UserData[User][ModelScout])
    {
        
        case 1:
        {
        
            set_pev(User, pev_viewmodel2, "models/scout/v_power.mdl");
            set_pev(User, pev_weaponmodel2, "models/scout/p_power.mdl");
        
        }
    
        case 2:
        {
        
            set_pev(User, pev_viewmodel2, "models/scout/v_ballista.mdl");
            
        }
    
        case 3:
        {
            
            set_pev(User, pev_viewmodel2, "models/v_scout.mdl");
            set_pev(User, pev_weaponmodel2, "models/p_scout.mdl");
            
        }
        
    }
    
}

/******************************************************** CHANGE MODEL ********************************************************/

/******************************************************** WEAPON MENU ********************************************************/

public OpenMenu(User)
{
    
    new Menu = menu_create("[ChangeModel] Wybierz bron", "HandleMenu");
    
    menu_additem(Menu, "AK47");
    menu_additem(Menu, "AWP");
    menu_additem(Menu, "FAMAS");
    menu_additem(Menu, "GALIL");
    menu_additem(Menu, "GLOCK");
    menu_additem(Menu, "M4A1");
    menu_additem(Menu, "USP");
    menu_additem(Menu, "DEAGLE");
    menu_additem(Menu, "MP5");
    menu_additem(Menu, "SCOUT");
    
    menu_setprop(Menu, MPROP_BACKNAME, "Wroc");
    menu_setprop(Menu, MPROP_NEXTNAME, "Dalej");
    menu_setprop(Menu, MPROP_EXITNAME, "Wyjscie");
    
    menu_display(User, Menu);
    
    return PLUGIN_HANDLED;
    
}

public HandleMenu(User, Menu, Item)
{
    
    if(Item == MENU_EXIT) 
    {
        
        menu_destroy(Menu);
        
        return PLUGIN_HANDLED;
        
    }
    
    switch(Item)
    {
        
        case 0:
        {
            
            menu_destroy(Menu);
            
            OpenMenuAK(User);
            
        }
        
        case 1:
        {
            
            menu_destroy(Menu);
            
            OpenMenuAWP(User);
            
        }
        
        case 2:
        {
            
            menu_destroy(Menu);
            
            OpenMenuFamas(User);
            
        }
        
        case 3:
        {
            
            menu_destroy(Menu);
            
            OpenMenuGalil(User);
            
        }
        
        case 4:
        {
            
            menu_destroy(Menu);
            
            OpenMenuGlock(User);
            
        }
        
        case 5:
        {
            
            menu_destroy(Menu);
            
            OpenMenuM4A1(User);
            
        }
        
        case 6:
        {
            
            menu_destroy(Menu);
            
            OpenMenuUSP(User);
            
        }
        
        case 7:
        {
            
            menu_destroy(Menu);
            
            OpenMenuDeagle(User);
            
        }
        
        case 8:
        {
            
            menu_destroy(Menu);
            
            OpenMenuMP5(User);
            
        }
        
        case 9:
        {
            
            menu_destroy(Menu);
            
            OpenMenuScout(User);
            
        }
        
    }
    
    return PLUGIN_HANDLED;
    
}

public OpenMenuAK(User)
{
    
    new Menu = menu_create("[ChangeModel] AK47", "HandleMenuAK");
    
    menu_additem(Menu, "Curzon");
    menu_additem(Menu, "Vulcan");
    menu_additem(Menu, "Standardowe");
    
    menu_setprop(Menu, MPROP_BACKNAME, "Wroc");
    menu_setprop(Menu, MPROP_NEXTNAME, "Dalej");
    menu_setprop(Menu, MPROP_EXITNAME, "Wyjscie");
    
    menu_display(User, Menu);
    
    return PLUGIN_HANDLED;
    
}

public HandleMenuAK(User, Menu, Item)
{
    
    if(Item == MENU_EXIT) 
    {
        
        menu_destroy(Menu);
        
        return PLUGIN_HANDLED;
        
    }
    
    UserData[User][ModelAK] = Item + 1;
    
    menu_destroy(Menu);
    
    client_cmd(User, "; lastinv; wait; lastinv;");

    return PLUGIN_HANDLED;
    
}

public OpenMenuAWP(User)
{
    
    new Menu = menu_create("[ChangeModel] AWP", "HandleMenuAWP");

    menu_additem(Menu, "Carbon");
    menu_additem(Menu, "Cyrex");
    menu_additem(Menu, "Standardowe");
    
    menu_setprop(Menu, MPROP_BACKNAME, "Wroc");
    menu_setprop(Menu, MPROP_NEXTNAME, "Dalej");
    menu_setprop(Menu, MPROP_EXITNAME, "Wyjscie");
    
    menu_display(User, Menu);
    
    return PLUGIN_HANDLED;
    
}

public HandleMenuAWP(User, Menu, Item)
{
    
    if(Item == MENU_EXIT) 
    {
        
        menu_destroy(Menu);
        
        return PLUGIN_HANDLED;
        
    }
    
    UserData[User][ModelAWP] = Item + 1;
    
    menu_destroy(Menu);
    
    client_cmd(User, "; lastinv; wait; lastinv;");

    return PLUGIN_HANDLED;
    
}

public OpenMenuFamas(User)
{
    
    new Menu = menu_create("[ChangeModel] FAMAS", "HandleMenuFamas");
    
    menu_additem(Menu, "Neon");
    menu_additem(Menu, "Pulse");
    menu_additem(Menu, "Standardowe");
    
    menu_setprop(Menu, MPROP_BACKNAME, "Wroc");
    menu_setprop(Menu, MPROP_NEXTNAME, "Dalej");
    menu_setprop(Menu, MPROP_EXITNAME, "Wyjscie");
    
    menu_display(User, Menu);
    
    return PLUGIN_HANDLED;
    
}

public HandleMenuFamas(User, Menu, Item)
{
    
    if(Item == MENU_EXIT) 
    {
        
        menu_destroy(Menu);
        
        return PLUGIN_HANDLED;
        
    }
    
    UserData[User][ModelFamas] = Item + 1;
    
    menu_destroy(Menu);
    
    client_cmd(User, "; lastinv; wait; lastinv;");

    return PLUGIN_HANDLED;
    
}

public OpenMenuGalil(User)
{
    
    new Menu = menu_create("[ChangeModel] GALIL", "HandleMenuGalil");
    
    menu_additem(Menu, "Chatter");
    menu_additem(Menu, "Odyssy");
    menu_additem(Menu, "Standardowe");
    
    menu_setprop(Menu, MPROP_BACKNAME, "Wroc");
    menu_setprop(Menu, MPROP_NEXTNAME, "Dalej");
    menu_setprop(Menu, MPROP_EXITNAME, "Wyjscie");
    
    menu_display(User, Menu);
    
    return PLUGIN_HANDLED;
    
}

public HandleMenuGalil(User, Menu, Item)
{
    
    if(Item == MENU_EXIT) 
    {
        
        menu_destroy(Menu);
        
        return PLUGIN_HANDLED;
        
    }
    
    UserData[User][ModelGalil] = Item + 1;
    
    menu_destroy(Menu);
    
    client_cmd(User, "; lastinv; wait; lastinv;");

    return PLUGIN_HANDLED;
    
}

public OpenMenuGlock(User)
{
    
    new Menu = menu_create("[ChangeModel] GLOCK", "HandleMenuGlock");
    
    menu_additem(Menu, "Vulcan");
    menu_additem(Menu, "Water");
    menu_additem(Menu, "Standardowe");
    
    menu_setprop(Menu, MPROP_BACKNAME, "Wroc");
    menu_setprop(Menu, MPROP_NEXTNAME, "Dalej");
    menu_setprop(Menu, MPROP_EXITNAME, "Wyjscie");
    
    menu_display(User, Menu);
    
    return PLUGIN_HANDLED;
    
}

public HandleMenuGlock(User, Menu, Item)
{
    
    if(Item == MENU_EXIT) 
    {
        
        menu_destroy(Menu);
        
        return PLUGIN_HANDLED;
        
    }
    
    UserData[User][ModelGlock] = Item + 1;
    
    menu_destroy(Menu);
    
    client_cmd(User, "; lastinv; wait; lastinv;");

    return PLUGIN_HANDLED;
    
}

public OpenMenuM4A1(User)
{
    
    new Menu = menu_create("[ChangeModel] M4A1", "HandleMenuM4A1");
    
    menu_additem(Menu, "Asiimov");
    menu_additem(Menu, "Hyper");
    menu_additem(Menu, "Standardowe");
    
    menu_setprop(Menu, MPROP_BACKNAME, "Wroc");
    menu_setprop(Menu, MPROP_NEXTNAME, "Dalej");
    menu_setprop(Menu, MPROP_EXITNAME, "Wyjscie");
    
    menu_display(User, Menu);
    
    return PLUGIN_HANDLED;
    
}

public HandleMenuM4A1(User, Menu, Item)
{
    
    if(Item == MENU_EXIT) 
    {
        
        menu_destroy(Menu);
        
        return PLUGIN_HANDLED;
        
    }
    
    UserData[User][ModelM4A1] = Item + 1;
    
    menu_destroy(Menu);
    
    client_cmd(User, "; lastinv; wait; lastinv;");

    return PLUGIN_HANDLED;
    
}

public OpenMenuUSP(User)
{
    
    new Menu = menu_create("[ChangeModel] USP", "HandleMenuUSP");
    
    menu_additem(Menu, "Kill");
    menu_additem(Menu, "Orion");
    menu_additem(Menu, "Standardowe");
    
    menu_setprop(Menu, MPROP_BACKNAME, "Wroc");
    menu_setprop(Menu, MPROP_NEXTNAME, "Dalej");
    menu_setprop(Menu, MPROP_EXITNAME, "Wyjscie");
    
    menu_display(User, Menu);
    
    return PLUGIN_HANDLED;
    
}

public HandleMenuUSP(User, Menu, Item)
{
    
    if(Item == MENU_EXIT) 
    {
        
        menu_destroy(Menu);
        
        return PLUGIN_HANDLED;
        
    }
    
    UserData[User][ModelUSP] = Item + 1;
    
    menu_destroy(Menu);
    
    client_cmd(User, "; lastinv; wait; lastinv;");

    return PLUGIN_HANDLED;
    
}

public OpenMenuDeagle(User)
{
    
    new Menu = menu_create("[ChangeModel] DEAGLE", "HandleMenuDeagle");
    
    menu_additem(Menu, "Blaze");
    menu_additem(Menu, "Storm");
    menu_additem(Menu, "Standardowe");
    
    menu_setprop(Menu, MPROP_BACKNAME, "Wroc");
    menu_setprop(Menu, MPROP_NEXTNAME, "Dalej");
    menu_setprop(Menu, MPROP_EXITNAME, "Wyjscie");
    
    menu_display(User, Menu);
    
    return PLUGIN_HANDLED;
    
}

public HandleMenuDeagle(User, Menu, Item)
{
    
    if(Item == MENU_EXIT) 
    {
        
        menu_destroy(Menu);
        
        return PLUGIN_HANDLED;
        
    }
    
    UserData[User][ModelDeagle] = Item + 1;
    
    menu_destroy(Menu);
    
    client_cmd(User, "; lastinv; wait; lastinv;");

    return PLUGIN_HANDLED;
    
}

public OpenMenuMP5(User)
{
    
    new Menu = menu_create("[ChangeModel] MP5", "HandleMenuMP5");
    
    menu_additem(Menu, "Asiimov");
    menu_additem(Menu, "Max");
    menu_additem(Menu, "Standardowe");
    
    menu_setprop(Menu, MPROP_BACKNAME, "Wroc");
    menu_setprop(Menu, MPROP_NEXTNAME, "Dalej");
    menu_setprop(Menu, MPROP_EXITNAME, "Wyjscie");
    
    menu_display(User, Menu);
    
    return PLUGIN_HANDLED;
    
}

public HandleMenuMP5(User, Menu, Item)
{
    
    if(Item == MENU_EXIT) 
    {
        
        menu_destroy(Menu);
        
        return PLUGIN_HANDLED;
        
    }
    
    UserData[User][ModelMP5] = Item + 1;
    
    menu_destroy(Menu);
    
    client_cmd(User, "; lastinv; wait; lastinv;");

    return PLUGIN_HANDLED;
    
}

public OpenMenuScout(User)
{
    
    new Menu = menu_create("[ChangeModel] SCOUT", "HandleMenuScout");
    
    menu_additem(Menu, "Power");
    menu_additem(Menu, "Ballista");
    menu_additem(Menu, "Standardowe");
    
    menu_setprop(Menu, MPROP_BACKNAME, "Wroc");
    menu_setprop(Menu, MPROP_NEXTNAME, "Dalej");
    menu_setprop(Menu, MPROP_EXITNAME, "Wyjscie");
    
    menu_display(User, Menu);
    
    return PLUGIN_HANDLED;
    
}

public HandleMenuScout(User, Menu, Item)
{
    
    if(Item == MENU_EXIT) 
    {
        
        menu_destroy(Menu);
        
        return PLUGIN_HANDLED;
        
    }
    
    UserData[User][ModelScout] = Item + 1;
    
    menu_destroy(Menu);
    
    client_cmd(User, "; lastinv; wait; lastinv;");

    return PLUGIN_HANDLED;
    
}

/******************************************************** WEAPON MENU ********************************************************/