#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <colorchat>
#include <hamsandwich>
#include <sqlx>
 
new const PLUGIN[] = "Skin Menü"
new const VERSION[] = "1.0"
new const AUTHOR[] = "exodus"
 
//------------------------------------------------------------------------------------------------
//Beállítások
//------------------------------------------------------------------------------------------------
 
new const SQLINFO[][] = 
 
new const Prefix[] = ".::Inside Out::.. Fun Szerver" //Menükben megjelenõ prefix
new const Chat_Prefix[] = "[.::Inside Out::..]" //Chatben megjelenõ prefix
new const Website[] = "fb.com/groups/insideoutszerver/" //Fõmenüben a menük alatt megjelenõ kiírás (pl.: fb oldal)
 
new const Drop[][] = { 50 }; //Mennyi ölés után adjon valamilyen skint.
 
#define MAX 51 //Felszerelhetõ skinek száma
#define ADMIN ADMIN_BAN //Addoláshoz szükséges jog
 
//------------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------------
new t_OSkin[MAX][33], t_Skin[5][33], Oles[2][33], name[32][33];
new Beallitasok[33];
new Handle:g_SqlTuple;
//------------------------------------------------------------------------------------------------
 
public plugin_init()
{
register_plugin(PLUGIN,VERSION,AUTHOR)
 
sql_create_table();
 
register_impulse(201, "m_Fomenu");
register_clcmd("say /menu", "m_Fomenu");
register_clcmd("say /add", "m_Addolas");
 
register_event("CurWeapon", "m_CurWeapon", "be", "1=1");
register_event("DeathMsg", "m_Halal", "a");
}
 
new const c_Fegyverek[MAX][] =
{
    { "Adidas AK47" },
    { "Barcelone AK47" },
    { "Black AK47" },
    { "Blooded AK47" },
    { "Blue AK47" },
    { "Carboned AK47" },
    { "Collect AK47" },
    { "Color AK47" },
    { "Curzon AK47" },
    { "Galaxy AK47" },
    { "Acho M4A1" },
    { "Black M4A1" },
    { "Cool M4A1" },
    { "Crome M4A1" },
    { "Desert M4A1" },
    { "Dragon M4A1" },
    { "Fain M4A1" },
    { "Fotote M4A1" },
    { "Future M4A1" },
    { "Galaxy M4A1" },
    { "Átlátszó Deagle" },
    { "Battle Deagle" },
    { "Black Deagle" },
    { "Colt Deagle" },
    { "Dragon Deagle" },
    { "Egyed Deagle" },
    { "Famosas Deagle" },
    { "Fantazi Deagle" },
    { "Galaxy Deagle" },
    { "Gold Deagle" },
    { "Amerika AWP" },
    { "Arany AWP" },
    { "Camon AWP" },
    { "Galaxy AWP" },
    { "Gyik AWP" },
    { "Ice AWP" },
    { "Joker AWP" },
    { "Katona AWP" },
    { "Laser AWP" },
    { "Monster AWP" },
    { "Adidas Kés" },
    { "Atom Kés" },
    { "Black Kés" },
    { "Botkés" },
    { "Color Kés" },
    { "Dragon Kés" },
    { "Gold Kés" },
    { "Jungel Kés" },
    { "Megatron Kés" },
    { "Natural Kés" },
    { "Stilletto Kés" }
};
 
new const m_AK47[][] =
{
    "models/exodus_skinmenu/Ak47/Adidas.mdl",
    "models/exodus_skinmenu/Ak47/Barcelone.mdl",
    "models/exodus_skinmenu/Ak47/Black.mdl",
    "models/exodus_skinmenu/Ak47/Blooded.mdl",
    "models/exodus_skinmenu/Ak47/Blue.mdl",
    "models/exodus_skinmenu/Ak47/Carboned.mdl",
    "models/exodus_skinmenu/Ak47/Collect.mdl",
    "models/exodus_skinmenu/Ak47/Collor.mdl",
    "models/exodus_skinmenu/Ak47/Curzon.mdl",
    "models/exodus_skinmenu/Ak47/Galaxy.mdl"
};
new const m_M4A1[][] =
{
    "models/exodus_skinmenu/M4a1/Acho.mdl",
    "models/exodus_skinmenu/M4a1/Black.mdl",
    "models/exodus_skinmenu/M4a1/Cool.mdl",
    "models/exodus_skinmenu/M4a1/Crome.mdl",
    "models/exodus_skinmenu/M4a1/Desert.mdl",
    "models/exodus_skinmenu/M4a1/Dragon.mdl",
    "models/exodus_skinmenu/M4a1/Fain.mdl",
    "models/exodus_skinmenu/M4a1/Fotote.mdl",
    "models/exodus_skinmenu/M4a1/Future.mdl",
    "models/exodus_skinmenu/M4a1/Galaxy.mdl"
};
new const m_DEAGLE[][] =
{
    "models/exodus_skinmenu/Deagle/Atlatszo.mdl",
    "models/exodus_skinmenu/Deagle/Batle.mdl",
    "models/exodus_skinmenu/Deagle/Black.mdl",
    "models/exodus_skinmenu/Deagle/Colt.mdl",
    "models/exodus_skinmenu/Deagle/Dragon.mdl",
    "models/exodus_skinmenu/Deagle/Egyed.mdl",
    "models/exodus_skinmenu/Deagle/Famosas.mdl",
    "models/exodus_skinmenu/Deagle/Fantazi.mdl",
    "models/exodus_skinmenu/Deagle/Galaxy.mdl",
    "models/exodus_skinmenu/Deagle/Gold.mdl"
};
new const m_AWP[][] =
{
    "models/exodus_skinmenu/awp/Amerika.mdl",
    "models/exodus_skinmenu/awp/Arany.mdl",
    "models/exodus_skinmenu/awp/Camon.mdl",
    "models/exodus_skinmenu/awp/Galaxy.mdl",
    "models/exodus_skinmenu/awp/Gyik.mdl",
    "models/exodus_skinmenu/awp/Ice.mdl",
    "models/exodus_skinmenu/awp/Joker.mdl",
    "models/exodus_skinmenu/awp/Katona.mdl",
    "models/exodus_skinmenu/awp/Laser.mdl",
    "models/exodus_skinmenu/awp/Monster.mdl"
};
new const m_KNIFE[][] =
{
    "models/exodus_skinmenu/knife/Adidas.mdl",
    "models/exodus_skinmenu/knife/Atom.mdl",
    "models/exodus_skinmenu/knife/Black.mdl",
    "models/exodus_skinmenu/knife/Bot.mdl",
    "models/exodus_skinmenu/knife/Color.mdl",
    "models/exodus_skinmenu/knife/Dragon.mdl",
    "models/exodus_skinmenu/knife/Gold.mdl",
    "models/exodus_skinmenu/knife/Jungel.mdl",
    "models/exodus_skinmenu/knife/Megatron.mdl",
    "models/exodus_skinmenu/knife/Natural.mdl",
    "models/exodus_skinmenu/knife/Stilletto.mdl"
};
public m_Addolas(id)
{
    if(get_user_flags(id) & ADMIN)
    {
        for(new i;i < MAX; i++)
        t_OSkin[i][id] += 1;
        ColorChat(id, GREEN, "%s^1Megkaptál minden skint!", Chat_Prefix);
    }
    else
    {
        ColorChat(id, GREEN, "%s^1Nincs jogod ehhez a parancshoz", Chat_Prefix);
    }
}
public m_Fomenu(id)
{
new cim[121];
format(cim, charsmax(cim), "[%s] \r~ \dFõmenü^n\dKövetkezõ Drop: [\r%d\d/%dÖlés]", Prefix, Oles[0][id], Drop[0][0]);
new menu = menu_create(cim, "h_Fomenu");
 
menu_additem(menu, "Felszerelések", "1", 0);
menu_additem(menu, "Beállitások", "2", 0);
format(cim, charsmax(cim), "Random Skin \d[\r%d\d/50Ölés]^n^n\d%s", Oles[1][id], Website);
menu_additem(menu, cim, "3", 0);
 
menu_display(id, menu, 0);
}
 
public h_Fomenu(id, menu, item)
{
if(item == MENU_EXIT)
{
    menu_destroy(menu);
    return;
}
 
new data[9], szName[64];
new access, callback;
menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);
new key = str_to_num(data);
 
switch(key)
    {
        case 1: m_Felszereles(id);
        case 2: m_Skinbeallitas(id);
        case 3:
        {
            if(Oles[1][id] >= 15)
            {
                m_RandomDrop(id);
            }
            else
            {
                ColorChat(id, GREEN, "%s^1Nincs meg a szükséges 50 ölésed", Chat_Prefix);
            }
        }
    }
}
public m_Felszereles(id)
{
new String[121];
formatex(String, charsmax(String), "[%s] \r~ \dFelszerelés", Prefix);
new menu = menu_create(String, "h_Felszereles");
 
    for(new i;i < sizeof(c_Fegyverek); i++)
    {
        if(t_OSkin[i][id] > 0)
        {
            new Sor[6]; num_to_str(i, Sor, 5);
            formatex(String, charsmax(String), "%s \d[\r%d \dDB]", c_Fegyverek[i][0], t_OSkin[i][id]);
            menu_additem(menu, String, Sor);
        }
    }
   
menu_display(id, menu, 0);
}
 
public h_Felszereles(id, menu, item)
{
if(item == MENU_EXIT)
{
    menu_destroy(menu);
    return;
}
 
new data[9], szName[64];
new access, callback;
menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);
new key = str_to_num(data);
 
switch(key)
    {
        case 0..9: t_Skin[0][id] = key;
        case 10..19: t_Skin[1][id] = key-9;
        case 20..29: t_Skin[2][id] = key-19;
        case 30..39: t_Skin[3][id] = key-29;
        case 40..49: t_Skin[4][id] = key-39;
    }
}
 
public m_Halal()
{
new Gyilkos = read_data(1);
new Aldozat = read_data(2);
 
if(Gyilkos == Aldozat)
return PLUGIN_HANDLED;
 
for(new i;i < 2; i++)
Oles[i][Gyilkos] ++;
 
m_Halal_Ellenorzes(Gyilkos);
return PLUGIN_HANDLED;
}
public m_Halal_Ellenorzes(id)
{
new FegyverID = random_num(0, MAX)
 
    if(Oles[0][id] >= Drop[0][0])
    {
        t_OSkin[FegyverID][id]++;
        Oles[0][id] = 0;
        ColorChat(id, GREEN, "%s^1Találtál egy ^4%s^1-t.", Chat_Prefix, c_Fegyverek[FegyverID]);
    }
}
public m_Skinbeallitas(id)
{
new cim[121];
format(cim, charsmax(cim), "[%s] \r~ \dBeállítások", Prefix);
new menu = menu_create(cim, "Skinbeallitas_h");
   
menu_additem(menu, Beallitasok[id] == 1 ? "Skin: \rBekapcsolva \y| \wKikapcsolva":"Skin: \wBekapcsolva \y| \rKikapcsolva", "1",0);
   
menu_display(id, menu, 0);
}
public Skinbeallitas_h(id, menu, item)
{
if(item == MENU_EXIT)
{
        menu_destroy(menu);
        return;
}
   
new data[9], szName[64];
new access, callback;
menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);
new key = str_to_num(data);
   
switch(key)
{
        case 1:
        {
            if(Beallitasok[id] == 1)
            {
                Beallitasok[id] = 0;
            }
            else
            {
                Beallitasok[id] = 1;
            }
            m_Skinbeallitas(id);
        }
    }
}
public plugin_precache()
{
    for(new i;i < sizeof(m_AK47); i++)
    {
        precache_model(m_AK47[i]);
    }
    for(new i;i < sizeof(m_M4A1); i++)
    {
        precache_model(m_M4A1[i]);
    }
    for(new i;i < sizeof(m_DEAGLE); i++)
    {
        precache_model(m_DEAGLE[i]);
    }
    for(new i;i < sizeof(m_AWP); i++)
    {
        precache_model(m_AWP[i]);
    }
    for(new i;i < sizeof(m_KNIFE); i++)
    {
        precache_model(m_KNIFE[i]);
    }
}
public m_CurWeapon(id)
{
    if(Beallitasok[id] == 0)
        return;
 
    new beallitasok = get_user_weapon(id);
 
    for(new i;i < sizeof(m_AK47); i++)
    {
        if(t_Skin[0][id] == 1 + i && beallitasok == CSW_AK47)
        {
            set_pev(id, pev_viewmodel2, m_AK47[i]);
        }
    }
    for(new i;i < sizeof(m_M4A1); i++)
    {
        if(t_Skin[1][id] == 1 + i && beallitasok == CSW_M4A1)
        {
            set_pev(id, pev_viewmodel2, m_M4A1[i]);
        }
    }
    for(new i;i < sizeof(m_DEAGLE); i++)
    {
        if(t_Skin[2][id] == 1 + i && beallitasok == CSW_DEAGLE)
        {
            set_pev(id, pev_viewmodel2, m_DEAGLE[i]);
        }
    }
    for(new i;i < sizeof(m_AWP); i++)
    {
        if(t_Skin[3][id] == 1 + i && beallitasok == CSW_AWP)
        {
            set_pev(id, pev_viewmodel2, m_AWP[i]);
        }
    }
    for(new i;i < sizeof(m_KNIFE); i++)
    {
        if(t_Skin[4][id] == 1 + i && beallitasok == CSW_KNIFE)
        {
            set_pev(id, pev_viewmodel2, m_KNIFE[i]);
        }
    }
}
public m_RandomDrop(id)
{
new FegyverID = random_num(0, MAX)
 
t_OSkin[FegyverID][id]++;
Oles[1][id] -= 25;
ColorChat(id, GREEN, "%s^1Random Drop: ^4%s^1.", Chat_Prefix, c_Fegyverek[FegyverID]);
}
public client_disconnect(id)
{
if(!is_user_bot(id))
{
    sql_update_user(id);
}
for(new i;i < 2; i++)
Oles[i][id] = 0;
 
for(new i;i < MAX; i++)
t_OSkin[i][id] = 0;
 
for(new i;i < 5; i++)
t_Skin[i][id] = 0;
 
copy(name[id], charsmax(name[]), "");
}
public client_putinserver(id)
{
    if(!is_user_bot(id))
    {
        get_user_name(id, name[id], charsmax(name));
        sql_load_user(id);
    }
   
    Beallitasok[id] = 1;
}
public sql_create_table()
{
g_SqlTuple = SQL_MakeDbTuple(SQLINFO[0], SQLINFO[1], SQLINFO[2], SQLINFO[3]);
 
static Query[10048];
new Len;
 
Len += formatex(Query[Len], charsmax(Query), "CREATE TABLE IF NOT EXISTS `skin_menu_1.0`");
Len += formatex(Query[Len], charsmax(Query)-Len, "(`Nev` varchar(32) NOT NULL, ");
 
for(new i;i < MAX; i++)
Len += formatex(Query[Len], charsmax(Query)-Len, "`IT_%d` int(11) NOT NULL,", i);
 
for(new i;i < 2; i++)
Len += formatex(Query[Len], charsmax(Query)-Len, "`Kill_%d` int(11) NOT NULL,", i);
 
for(new i;i < 5; i++)
Len += formatex(Query[Len], charsmax(Query)-Len, "`SK_%d` int(11) NOT NULL,", i);
 
Len += formatex(Query[Len], charsmax(Query)-Len, "`id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY)");
 
SQL_ThreadQuery(g_SqlTuple, "createTableThread", Query);
}
 
public sql_load_user(id)
{
static Query[10048];
new Data[1];
Data[0] = id;
 
formatex(Query, charsmax(Query), "SELECT * FROM `skin_menu_1.0` WHERE Nev = ^"%s^";", name[id]);
SQL_ThreadQuery(g_SqlTuple, "QuerySelectData", Query, Data, 1);
}
public QuerySelectData(FailState, Handle:Query, Error[], Errcode, Data[], DataSize, Float:Queuetime)
{
    if(FailState == TQUERY_CONNECT_FAILED || FailState == TQUERY_QUERY_FAILED)
    {
        log_amx("%s", Error);
        return;
    }
    else
    {
    new id = Data[0];
   
    if(SQL_NumRows(Query) > 0)
    {
        for(new i;i < 2; i++)
        {
            new String[64];
            formatex(String, charsmax(String), "Kill_%d", i);
            Oles[i][id] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, String));
        }
       
        for(new i;i < MAX; i++)
        {
            new String[64];
            formatex(String, charsmax(String), "IT_%d", i);
            t_OSkin[i][id] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, String));
        }
   
        for(new i;i < 5; i++)
        {
            new String[64];
            formatex(String, charsmax(String), "SK%d", i);
            t_Skin[i][id] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, String));
        }
    }
    else
    {
        sql_save_user(id);
    }
    }
}
public sql_save_user(id)
{
static Query[256];
 
formatex(Query, charsmax(Query), "INSERT INTO `skin_menu_1.0` (`Nev`) VALUES (^"%s^");", name[id]);
SQL_ThreadQuery(g_SqlTuple, "QuerySetData", Query);
}
public sql_update_user(id)
{
static Query[10048];
new Len;
 
Len += formatex(Query[Len], charsmax(Query), "UPDATE `skin_menu_1.0` SET Kill_1 = ^"%i^", ",Oles[0][id]);
 
for(new i;i < MAX; i++)
Len += formatex(Query[Len], charsmax(Query)-Len, "IT_%d = ^"%i^", ", i, t_OSkin[i][id]);
 
for(new i;i < 5; i++)
Len += formatex(Query[Len], charsmax(Query)-Len, "SK_%d = ^"%i^", ", i, t_Skin[i][id]);
 
Len += formatex(Query[Len], charsmax(Query)-Len, "Kill_0 = ^"%i^" WHERE Nev = ^"%s^";", Oles[1][id], name[id]);
 
SQL_ThreadQuery(g_SqlTuple, "QuerySetData", Query);
}
public createTableThread(FailState, Handle:Query, Error[], Errcode, Data[], DataSize, Float:Queuetime)
{
    if(FailState == TQUERY_CONNECT_FAILED)
    set_fail_state("[HIBA*] NEM TUDTAM CSATLAKOZNI AZ ADATBAZISHOZ!");
    else if(FailState == TQUERY_QUERY_FAILED)
    set_fail_state("Query Error");
    if(Errcode)
    log_amx("[HIBA*] HIBAT DOBTAM: %s",Error);
}
public QuerySetData(FailState, Handle:Query, Error[], Errcode, Data[], DataSize, Float:Queuetime)
{
    if(FailState == TQUERY_CONNECT_FAILED || FailState == TQUERY_QUERY_FAILED)
    {
        log_amx("%s", Error);
        return;
    }
}
public plugin_end()
{
    SQL_FreeHandle(g_SqlTuple);
}