/*[Bugok]:  *Amíg nem választod ki a raktárban az 1. skint, nem mutatja a többit
*/
        
/*[Tennivalók]:    *CS:GO-s gránát hangok berakása.
        *Tec-9, PP-Bizon, és egyéb fegyverek berakása
        *Offline piac elkészítése
        *Natívok készítése külső pluginokhoz (kérésre megcsinálok bármilyet)
        *Offline piac
*/
 
/*[Megjegyzések]:  *A teszteléshez használt skinek, ládák és kulcsok lecserélendőek!
            *A ládák droppolását nem tudtam elég behatóan tesztelni a kevés skin miatt. Ha hibás, jelezzétek!
            *A plugin nincs ékezetesítve!
*/
 
/*[Changelog]
v1.0.5 - Minimális teljesítményjavítás via mforce
v1.0.4 - Összetettebb dropp rendszer
v1.0.3 - Minden ládának saját kulcs
v1.0.2 - Több láda
v1.0.1 - SQL mentés és még pár bug javítása
v1.0.0 - Alap ötlet
*/
 
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <engine>
#include <fakemeta>
#include <sqlx>
#include <colorchat>
 
//Köszönet mforce-nak a definiálásokért :)
const m_pPlayer = 41
const XO_WEAPON = 4
#define get_weapon_owner(%1)        get_pdata_cbase(%1, m_pPlayer, XO_WEAPON)
 
new const Author[] = {"LyleChriss"}
new const Version[] = {"1.0.5"}
new const Plugin[] = {"CS:GO Mod"}
 
new const Prefix[] = {"CS:GO"}
 
//Droppok
#define CASE_DROP 25.0      //Láda dropp (Alap: 25%)
#define KEY_DROP 7.0        //Kulcs dropp (Alap 7%)
 
//SQL
new const SQL_INFO[][] = {
    "127.0.0.1",
    "SH24765_default",
    "hHaTf1RsrPiy78",
    "SH24765_default"
}
new Handle:g_SqlTuple
 
//Fegyverek, amiket skinezni akarsz
new const Weapons[][] = {
    "weapon_ak47",
    "weapon_m4a1"
}
 
//Egyéb dolgok, amiket skinezel
new const Others[][] = {
    "weapon_smokegrenade",
    "weapon_c4"
}
 
enum _:DATA
{
    Drop_from,
    Rarity,
    InSQL[32],
    Name[32],
    Model[64]
}
 
/*Fegyver ritkasága [CS:GO-s színekkel jellemezve]:
0 - Szürke
1 - Világos kék
2 - Kék
3 - Lila
4 - Pink
5 - Piros
6 - Arany [Késeknek]*/
 
//Az első szám azt jelzi, hogy a Cases conts hanyadik sorában lévő ládából legyen droppolva a skin
//Megszerezhető fegyver skinek
new const Skins[][DATA] = {
    //Ládája, Ritkaság, Neve az SQL táblában, Neve a játékban, models/modell.mdl
    {0, 0, "vanquish_ak", "AK47 | Vanquish", "models/g_offen/ak47_1.mdl"},
    {0, 1, "guardian_m4", "M4A1 | Guardian", "models/g_offen/m4a1_1.mdl"},
    {0, 2, "vanquish2_ak", "AK47 | Vanquish2", "models/g_offen/ak47_1.mdl"},
    {1, 3, "vanquish3_ak", "AK47 | Vanquish3", "models/g_offen/ak47_1.mdl"},
    {1, 4, "vanquish4_ak", "AK47 | Vanquish4", "models/g_offen/ak47_1.mdl"},
    {1, 5, "vanquish5_ak", "AK47 | Vanquish5", "models/g_offen/ak47_1.mdl"}
}
 
//Alap skinek
/*new const Default_Skins[][DATA] = {
    //Nulla, Nulla, Üresen hagyni, fegyver neve, models/modell.mdl
    {0, 0, "", "AK47", "models/g_offen/v_ak47.mdl"},
    {0, 0, "", "M4A1", "models/g_offen/v_m4a1.mdl"}
}*/
 
//Egyéb modellek
new const Other_Skins[][DATA] = {
    //Nulla, Nulla, Üresen hagyni, fegyver neve, modells/modell.mdl
    {0, 0, "", "Smokegrenade", "models/g_offen/v_smokegrenade.mdl"},
    {0, 0, "", "C4",  "models/g_offen/v_c4.mdl"}
}
 
enum _:CASE_DATA
{
    CaseInSQL[32],
    CaseName[32],
    KeyInSQL[32],
    KeyName[32]
}
 
new const Cases[][CASE_DATA] = {
    //Neve az SQL táblában, Neve a játékban, kulcs neve az SQL-ben, kulcs neve a játékban
    {"falchion", "Falchion Case", "falchion_k", "Falchion Case Key"},
    {"winter", "Winter Offensive Case", "winter_k", "Winter Offensive Case Key"}
}
 
//Birtokolt cuccok, kiválasztott skinek
new owned[33][sizeof(Skins)]
new chosen[33][sizeof(Weapons)]
new cases[33][sizeof(Cases)]
new keys[33][sizeof(Cases)]
 
//Arany
new arany[33]
 
//Küldés menü
new send[33][8], target[33]
 
//Piac
enum _:Market
{
    bool:Stuff,
    Put_out,
    Value
}
 
new Market_Things[33][Market]
 
//Egyéb
new name[33][32], authid[33][32]
 
public plugin_init() {
    register_plugin(Plugin, Version, Author)
    register_cvar("public_csgo", Version, FCVAR_SERVER | FCVAR_SPONLY)
    
    //Fegyver modellcserék
    for(new i; i<sizeof(Weapons); i++)
        RegisterHam(Ham_Item_Deploy, Weapons[i], "ItemDeploy_Weapon", 1)
    for(new i; i<sizeof(Others);i++)
        RegisterHam(Ham_Item_Deploy, Others[i], "ItemDeploy_Other", 1)
    
    //Menü parancsok
    register_impulse(201, "FoMenu")
    register_clcmd("say /fomenu", "FoMenu")
    register_clcmd("say_team /fomenu", "FoMenu")
    register_clcmd("say /menu", "FoMenu")
    register_clcmd("say_team /menu", "FoMenu")
    
    //Say módok
    register_clcmd("DARAB", "Kuldes")
    register_clcmd("ARANY", "Ellenorzes")
    
    //Halál
    register_event("DeathMsg", "eDeathMsg", "a")
}
 
/*==========PRECACHE==========*/
public plugin_precache()
{
    for(new i; i<sizeof(Skins);i++)
        precache_model(Skins[i][Model])
        
    /*for(new i; i<sizeof(Default_Skins);i++)
        precache_model(Default_Skins[i][Model])*/
    
    for(new i; i<sizeof(Other_Skins);i++)
        precache_model(Other_Skins[i][Model])
}
 
/*==========SQL MENTÉS==========*/
//Ne piszkáld, tökéletes!
public plugin_cfg()
{
    static Query[5120], Len
    g_SqlTuple = SQL_MakeDbTuple(SQL_INFO[0],SQL_INFO[1],SQL_INFO[2],SQL_INFO[3])
    
    Len += formatex(Query[Len], charsmax(Query), "CREATE TABLE IF NOT EXISTS `g_offen` (`authid` varchar(32) NOT NULL, `username` varchar(32) NOT NULL")
    for(new i; i<sizeof(Skins);i++)
    {
        Len += formatex(Query[Len], charsmax(Query)-Len, ", `%s` int(11) NOT NULL", Skins[i][InSQL])
    }
    for(new i; i<sizeof(Cases);i++)
    {
        Len += formatex(Query[Len], charsmax(Query)-Len, ", `%s` int(11) NOT NULL, `%s` int(11) NOT NULL", Cases[i][CaseInSQL], Cases[i][KeyInSQL])
    }
    Len += formatex(Query[Len], charsmax(Query)-Len, ", `gold` int(11) NOT NULL, `id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY)")
    SQL_ThreadQuery(g_SqlTuple,"createTableThread", Query)
}
     
public createTableThread(FailState, Handle:Query, Error[], Errcode, Data[], DataSize, Float:Queuetime)
{
    if(FailState == TQUERY_CONNECT_FAILED)
        set_fail_state("Nem lehet csatlakozni az adatbazishoz.")
    else if(FailState == TQUERY_QUERY_FAILED)
        set_fail_state("Query Error")
    if(Errcode)
        log_amx("Hiba: %s",Error)
}
 
public client_putinserver(id)
{
    if(!is_user_bot(id) && !is_user_hltv(id))
    {
        get_user_name(id, name[id], charsmax(name))
        get_user_authid(id, authid[id], charsmax(authid))
        if(contain(authid[id], "_ID_LAN") != -1) get_user_ip(id, authid[id], charsmax(authid), 1)
        Load_SQL(id)
    }
}
 
public client_disconnect(id)
{
    if(!is_user_bot(id) && !is_user_hltv(id))
        Update_SQL(id)
    
    arrayset(owned[id], 0, sizeof(Skins))
    arrayset(cases[id], 0, sizeof(Cases))
    arrayset(keys[id], 0, sizeof(Cases))
    arrayset(chosen[id], 0, sizeof(Weapons))
    authid[id][0] = EOS;
    name[id][0] = EOS;
}
 
public client_infochanged(id)
{
    if(!is_user_connected(id))
        return PLUGIN_HANDLED
    
    get_user_info(id, "name", name[id], charsmax(name[]))
    
    return PLUGIN_CONTINUE
}
 
public Load_SQL(id)
{
    static Query[5120], Data[1]; Data[0] = id
    
    formatex(Query, charsmax(Query), "SELECT * FROM `g_offen` WHERE authid = ^"%s^";", authid[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<sizeof(Skins);i++)
            {
                owned[id][i] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, Skins[i][InSQL]))
            }
            for(new i; i<sizeof(Cases);i++)
            {
                keys[id][i] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, Cases[i][KeyInSQL]))
            }
            for(new i; i<sizeof(Cases);i++)
            {
                cases[id][i] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, Cases[i][CaseInSQL]))
            }
            arany[id] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "gold"))
        }
        else
        {
            Save_SQL(id)
        }
    }
}
 
public Save_SQL(id)
{
    static Query[5120], Len
    Len += formatex(Query[Len], charsmax(Query), "INSERT INTO `g_offen` (`authid`, `username`")
    for(new i; i<sizeof(Skins);i++)
    {
        Len += formatex(Query[Len], charsmax(Query)-Len, ", `%s`", Skins[i][InSQL])
    }
    for(new i; i<sizeof(Cases); i++)
    {
        Len += formatex(Query[Len], charsmax(Query)-Len, ", `%s`, `%s`", Cases[i][CaseInSQL], Cases[i][KeyInSQL])
    }
    Len += formatex(Query[Len], charsmax(Query)-Len, ", `gold`) VALUES (^"%s^", ^"%s^"", authid[id], name[id])
    for(new i;i<sizeof(Skins);i++)
    {
        Len += formatex(Query[Len], charsmax(Query)-Len, ", ^"0^"")
    }
    for(new i; i<sizeof(Cases); i++)
    {
        Len += formatex(Query[Len], charsmax(Query)-Len, ", ^"0^", ^"0^"")
    }
    Len += formatex(Query[Len], charsmax(Query)-Len, ", ^"0^");")
    SQL_ThreadQuery(g_SqlTuple, "QuerySetData", Query)
}
 
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 Update_SQL(id)
{
    static Query[5120], Len
    Len += formatex(Query[Len], charsmax(Query), "UPDATE `g_offen` SET `username` = ^"%s^"", name[id])
    for(new i;i<sizeof(Skins);i++)
    {
        Len += formatex(Query[Len], charsmax(Query)-Len, ", `%s` = %d", Skins[i][InSQL], owned[id][i])
    }
    for(new i;i<sizeof(Cases);i++)
    {
        Len += formatex(Query[Len], charsmax(Query)-Len, ", `%s` = %d, `%s` = %d", Cases[i][CaseInSQL], cases[id][i], Cases[i][KeyInSQL], keys[id][i])
    }
    Len += formatex(Query[Len], charsmax(Query)-Len, ", `gold` = %d WHERE `authid` = ^"%s^";", keys[id], arany[id], authid[id])
    
    SQL_ThreadQuery(g_SqlTuple, "QuerySetData", Query)
}
 
public plugin_end() SQL_FreeHandle(g_SqlTuple)
 
/*==========MENÜK==========*/
//Tökéletes, de ha akarsz, belenyúlsz.
//Javaslom, hogy csak a menük neveit módosítsd, a ciklusokba és handlerekbe ne nyúlj bele.
public FoMenu(id)
{
    new txt[128]
    formatex(txt, charsmax(txt), "\r%s\w%s^nby \y%s^nFőMenü", Plugin, Version, Author)
    new menu = menu_create(txt, "FoMenu_h")
    
    menu_additem(menu, "Raktár", "", 0)
    menu_additem(menu, "Láda nyitás", "", 0)
    menu_additem(menu, "Lomtár", "", 0)
    menu_additem(menu, "Küldés", "", 0)
    menu_additem(menu, "Piac", "", 0)
    
    menu_setprop(menu, MPROP_EXIT, MEXIT_ALL)
    menu_setprop(menu, MPROP_EXITNAME, "Kilépés")
     
    menu_display(id, menu, 0)
    return PLUGIN_HANDLED
}
 
public FoMenu_h(id, menu, item)
{
    switch(item)
    {
        case 0:Raktar_M(id)
        case 1:Lada_M(id)
        case 2:Lomtar_M(id)
        case 3:Kuldes_M(id)
        case 4:Piac_M(id)
        case MENU_EXIT:{
            menu_destroy(menu)
            return PLUGIN_HANDLED
        }
    }
    
    menu_destroy(menu)
    return PLUGIN_HANDLED
}
 
public Raktar_M(id)
{
    new txt[128], num[8]
    formatex(txt, charsmax(txt), "\r%s\w%s^nRaktár", Plugin, Version)
    new menu = menu_create(txt, "Raktar_h")
    
    for(new i; i<sizeof(Skins);i++)
    {
        if(owned[id][i] > 0)
        {
            num_to_str(i, num, charsmax(num))
            formatex(txt, charsmax(txt), "%s [%d DB]", Skins[i][Name], owned[id][i])
            menu_additem(menu, txt, num, 0)
        }
    }
    
    menu_setprop(menu, MPROP_EXIT, MEXIT_ALL)
    menu_setprop(menu, MPROP_BACKNAME, "Vissza")
    menu_setprop(menu, MPROP_NEXTNAME, "Előre")
    menu_setprop(menu, MPROP_EXITNAME, "Kilépés")
     
    menu_display(id, menu, 0)
    return PLUGIN_HANDLED
}
 
public Raktar_h(id, menu, item)
{
    if(item == MENU_EXIT)
    {
        menu_destroy(menu)
        return PLUGIN_HANDLED
    }
    
    new data[9], access, callback, szName[64]
    menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback)
    new key = str_to_num(data)
    
    for(new i; i<sizeof(Weapons);i++)
    {
        copy(szName, charsmax(szName), Weapons[i])
        replace(szName, charsmax(szName), "weapon_", "")
        if(containi(Skins[key][Name], szName) != -1)
        {
            chosen[id][i] = key+1
            ColorChat(id, NORMAL, "^4[%s]^1 Kiválasztottad a(z) ^3%s ^1skint!", Prefix, Skins[key][Name])
            
            break;
        }
    }
    
    menu_destroy(menu)
    return PLUGIN_HANDLED
}
 
public Lada_M(id)
{
    new txt[128]
    formatex(txt, charsmax(txt), "\r%s\w%s^nLáda nyitás", Plugin, Version)
    new menu = menu_create(txt, "Lada_h")
    
    for(new i; i<sizeof(Cases);i++)
    {
        formatex(txt, charsmax(txt), "%s [%d DB] | [%d DB Kulcs]", Cases[i][CaseName], cases[id][i], keys[id][i])
        menu_additem(menu, txt, "", 0)
    }
    
    menu_setprop(menu, MPROP_EXIT, MEXIT_ALL)
    menu_setprop(menu, MPROP_EXITNAME, "Kilépés")
     
    menu_display(id, menu, 0)
    return PLUGIN_HANDLED
}
 
public Lada_h(id, menu, item)
{
    if(item == MENU_EXIT)
    {
        menu_destroy(menu)
        return PLUGIN_HANDLED
    }
    
    if(keys[id][item] > 0 && cases[id][item] > 0)
    {
        keys[id][item]--
        cases[id][item]--
        weapon_drop(id, item)
    }
    else
    {
        if(keys[id][item] == 0)
            ColorChat(id, NORMAL, "^4[%s]^1 Nincs elég ^4%s^1-ed!", Prefix, Cases[item][KeyName])
        else
            ColorChat(id, NORMAL, "^4[%s]^1 Nincs elég ^4%s^1-d!", Prefix, Cases[item][CaseName])
    }
    menu_destroy(menu)
    return PLUGIN_HANDLED
}
 
public Lomtar_M(id)
{
    new txt[128], num[8]
    formatex(txt, charsmax(txt), "\r%s\w%s^nLomtár", Plugin, Version)
    new menu = menu_create(txt, "Lomtar_h")
    
    for(new i; i<sizeof(Skins);i++)
    {
        if(owned[id][i] > 0)
        {
            num_to_str(i, num, charsmax(num))
            formatex(txt, charsmax(txt), "%s [%d DB]", Skins[i][Name], owned[id][i])
            menu_additem(menu, txt, num, 0)
        }
    }
    
    menu_setprop(menu, MPROP_EXIT, MEXIT_ALL)
    menu_setprop(menu, MPROP_BACKNAME, "Vissza")
    menu_setprop(menu, MPROP_NEXTNAME, "Előre")
    menu_setprop(menu, MPROP_EXITNAME, "Kilépés")
     
    menu_display(id, menu, 0)
    return PLUGIN_HANDLED
}
 
public Lomtar_h(id, menu, item)
{
    if(item == MENU_EXIT)
    {
        menu_destroy(menu)
        return PLUGIN_HANDLED
    }
    
    new data[9], access, callback, szName[64]
    menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback)
    new key = str_to_num(data)
    
    owned[id][key]--
    ColorChat(id, NORMAL, "^4[%s]^1 Eldobtál egy ^3%s ^1skint!", Prefix, Skins[key][Name])
    Update_SQL(id)
    
    menu_destroy(menu)
    return PLUGIN_HANDLED
}
 
public Kuldes_M(id)
{
    new txt[128], num[8]
    formatex(txt, charsmax(txt), "\r%s\w%s^nKüldés", Plugin, Version)
    new menu = menu_create(txt, "Kuldes_h")
    
    formatex(txt, charsmax(txt), "Arany: %d", arany[id])
    menu_additem(menu, txt, "Arany", 0)
    
    for(new i; i<sizeof(Skins);i++)
    {
        if(owned[id][i] > 0)
        {
            num_to_str(i, num, charsmax(num))
            formatex(txt, charsmax(txt), "%s [%d DB]", Skins[i][Name], owned[id][i])
            menu_additem(menu, txt, num, 0)
        }
    }
    
    menu_setprop(menu, MPROP_EXIT, MEXIT_ALL)
    menu_setprop(menu, MPROP_BACKNAME, "Vissza")
    menu_setprop(menu, MPROP_NEXTNAME, "Előre")
    menu_setprop(menu, MPROP_EXITNAME, "Kilépés")
     
    menu_display(id, menu, 0)
    return PLUGIN_HANDLED
}
 
public Kuldes_h(id, menu, item)
{
    if(item == MENU_EXIT)
    {
        menu_destroy(menu)
        return PLUGIN_HANDLED
    }
    
    new data[9], access, callback, szName[64]
    menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback)
    
    copy(send[id], charsmax(send[]), data)
    JatekosValaszt(id)
    
    menu_destroy(menu)
    return PLUGIN_HANDLED
}
 
public JatekosValaszt(id)
{
    new txt[128], userID[32]
    formatex(txt, charsmax(txt), "\r%s\w%s^nVálassz játékost!", Plugin, Version)
    new menu = menu_create(txt, "JatekosValaszt_h")
    
    new players[32], pnum
    get_players(players, pnum, "c")
    
    for(new i; i<pnum; i++)
    {
        if(!is_user_connected(players[i])) 
                continue;
        
        formatex(userID, charsmax(userID), "%d", get_user_userid(players[i]))
        menu_additem(menu, name[players[i]], userID, 0)
    }
    
    menu_setprop(menu, MPROP_EXIT, MEXIT_ALL)
    menu_setprop(menu, MPROP_BACKNAME, "Vissza")
    menu_setprop(menu, MPROP_NEXTNAME, "Előre")
    menu_setprop(menu, MPROP_EXITNAME, "Kilépés")
     
    menu_display(id, menu, 0)
    return PLUGIN_HANDLED
}
 
public JatekosValaszt_h(id, menu, item)
{
    if(item == MENU_EXIT)
    {
        menu_destroy(menu)
        return PLUGIN_HANDLED
    }
    
    new data[9], access, callback, szName[64]
    menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback)
    new userID = str_to_num(data)
    target[id] = find_player("k", userID)
    
    if(!is_user_connected(target[id]))
    {
        ColorChat(id, NORMAL, "^4[%s]^1 Sajnálom, lecsatlakozott akit kiválasztottál!", Prefix)
        menu_display(id, menu, 0)
        return PLUGIN_HANDLED
    }
    
    client_cmd(id, "messagemode DARAB"); 
    menu_destroy(menu); 
    return PLUGIN_HANDLED;
}
 
public Kuldes(id)
{
    new txt[128], num
    read_args(txt, charsmax(txt))
    remove_quotes(txt)
    
    if(is_str_num(txt))
    {
        num = str_to_num(txt)
        
        if(equal(send[id], "Arany"))
        {
            if(arany[id] >= num)
            {
                arany[target[id]] += num
                arany[id] -= num
                
                ColorChat(target[id], NORMAL, "^4[%s]^1 Kaptál ^3%d^1 ^4arany^1at!", Prefix, num)
                ColorChat(id, NORMAL, "^4[%s]^1 Elküldtél ^3%d^1 ^4arany^1at!", Prefix, num)
                Update_SQL(id)
                Update_SQL(target[id])
            }
            else
                ColorChat(id, NORMAL, "^4[%s]^1 Nincs elég ^4arany^1ad!", Prefix)
        }
        else
        {
            new i = str_to_num(send[id])
            
            if(owned[id][i] >= num)
            {
                owned[target[id]][i] += num
                owned[id][i] -= num
                
                ColorChat(target[id], NORMAL, "^4[%s]^1 Kaptál ^3%d ^4%s^1-t!", Prefix, num, Skins[i][Name])
                ColorChat(id, NORMAL, "^4[%s]^1 Elküldtél ^3%d ^4%s^1-t!", Prefix, num, Skins[i][Name])
                Update_SQL(id)
                Update_SQL(target[id])
            }
            else
                ColorChat(id, NORMAL, "^4[%s]^1 Nincs ennyi^4%s^1-ed!", Prefix, Skins[i][Name])
        }
    }
    else
        ColorChat(id, NORMAL, "^4[%s]^1 A megadott szöveg (%s) nem csak számokat tartalmazott! Érvénytelen!", Prefix, txt)
 
    return PLUGIN_CONTINUE;
}
 
public Piac_M(id)
{
    new txt[128]
    formatex(txt, charsmax(txt), "\r%s\w%s^nPiac", Plugin, Version)
    new menu = menu_create(txt, "Piac_h")
    
    menu_additem(menu, "Eladás", "", 0)
    menu_additem(menu, "Vásárlás", "", 0)
    
    menu_setprop(menu, MPROP_EXIT, MEXIT_ALL)
    menu_setprop(menu, MPROP_EXITNAME, "Kilépés")
     
    menu_display(id, menu, 0)
    return PLUGIN_HANDLED
}
 
public Piac_h(id, menu, item)
{
    switch(item)
    {
        case 0: Eladas_M(id)
        case 1: Vasarlas_M(id)
        case MENU_EXIT:{
            menu_destroy(menu)
            return PLUGIN_HANDLED
        }
    }
    
    menu_destroy(menu); 
    return PLUGIN_HANDLED;
}
 
public Eladas_M(id)
{
    new txt[128]
    formatex(txt, charsmax(txt), "\r%s\w%s^nPiac eladás", Plugin, Version)
    new menu = menu_create(txt, "Eladas_h")
    
    if(!Market_Things[id][Stuff])
    {
        if(Market_Things[id][Put_out] != -1)
        {
            formatex(txt, charsmax(txt), "%s", Skins[Market_Things[id][Put_out]][Name])
            menu_additem(menu, txt, "0", 0)
        }
        else
            menu_additem(menu, "Válaszd ki a tárgyat!", "", 0)
            
        formatex(txt, charsmax(txt), "Ár: %d arany", Market_Things[id][Value])
        menu_additem(menu, txt, "1", 0)
        
        if(Market_Things[id][Value])
            menu_additem(menu, "Mehet a Piacra!", "2", 0)
    }
    else
    {
        if(Market_Things[id][Value])
            menu_additem(menu, "Ajánlat visszavonása", "-1", 0)
    }
    
    menu_setprop(menu, MPROP_EXIT, MEXIT_ALL)
    menu_setprop(menu, MPROP_EXITNAME, "Kilépés")
    menu_display(id, menu, 0)
    return PLUGIN_HANDLED
}
 
public Eladas_h(id, menu, item)         
{
    if( item == MENU_EXIT )
    {
        menu_destroy(menu);
        return PLUGIN_HANDLED;
    }
    new data[9], szName[64], access, callback, weapon[32]
    menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback)
    new key = str_to_num(data)
    
    switch(key)
    {
        case -1:
        {
            Market_Things[id][Value] = 0
            Market_Things[id][Stuff] = false
            owned[id][Market_Things[id][Put_out]]++
            Market_Things[id][Put_out] = -1
        }
        case 0:
        {
            TargyValaszt(id)
        }
        case 1:
        {
            client_cmd(id, "messagemode ARANY")
        }
        case 2:
        {
            if(Market_Things[id][Put_out] != -1)
            {
                Market_Things[id][Stuff] = true
                owned[id][Market_Things[id][Put_out]]--
                copy(weapon, charsmax(weapon), weapon_now(id))
                if(weapon[0]) weapon_set_default(id, weapon)
                ColorChat(0, NORMAL, "^4[%s] ^3%s ^1kirakott egy ^4%s^1-t a piacra ^3%d ^4arany^1ért!", Prefix, name[id], Skins[Market_Things[id][Put_out]][Name], Market_Things[id][Value])
            }
            else
            {
                ColorChat(0, NORMAL, "^4[%s] ^1Nem választottál ki semmit!", Prefix)
                menu_display(id, menu, 0)
                return PLUGIN_HANDLED
            }
        }
    }
    menu_destroy(menu)
    return PLUGIN_HANDLED
}
 
public Ellenorzes(id)
{
    new num, txt[32]
    read_args(txt, charsmax(txt))
    remove_quotes(txt)
        
    num = str_to_num(txt)
        
    if(strlen(txt) > 7)
    {
        client_cmd(id, "messagemode ARANY")
    }
    else if(num < 500)
    {
        ColorChat(0, NORMAL, "^4[%s] ^1Nem tudsz eladni ^3500 ^4arany^1 alattt!", Prefix)
        Eladas_M(id)
    }
    else
    {
        Market_Things[id][Value] = num
        Eladas_M(id)
    }
}
 
public TargyValaszt(id)
{
    new txt[128], num[8]
    formatex(txt, charsmax(txt), "\r%s\w%s^nVálaszd ki a tárgyat!", Plugin, Version)
    new menu = menu_create(txt, "TargyValaszt_h")
    
    for(new i;i<sizeof(Skins);i++)
    {
        if(owned[id][i] > 0)
        {
            num_to_str(i, num, charsmax(num))
            formatex(txt, charsmax(txt), "%s (%d DB)", Skins[i][Name], owned[id][i])
            menu_additem(menu, txt, num, 0)
        }
    }
    
    menu_setprop(menu, MPROP_EXIT, MEXIT_ALL)
    menu_setprop(menu, MPROP_BACKNAME, "Vissza")
    menu_setprop(menu, MPROP_NEXTNAME, "Előre")
    menu_setprop(menu, MPROP_EXITNAME, "Kilépés")
     
    menu_display(id, menu, 0)
    return PLUGIN_HANDLED
}
 
public TargyValaszt_h(id, menu, item)
{
    if( item == MENU_EXIT )
    {
        menu_destroy(menu);
        return PLUGIN_HANDLED;
    }
    new data[9], szName[64], access, callback
    menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback)
    new key = str_to_num(data)
    
    Market_Things[id][Put_out] = key
    Eladas_M(id)
    
    menu_destroy(menu)
    return PLUGIN_HANDLED
}
 
public Vasarlas_M(id)
{
    new txt[128], userID[32]
    formatex(txt, charsmax(txt), "\r%s\w%s^nPiac vásárlás", Plugin, Version)
    new menu = menu_create(txt, "Vasarlas_h")
    
    new players[32], pnum
    get_players(players, pnum, "c")
    
    for(new i; i<pnum;i++)
    {
        if(Market_Things[players[i]][Stuff])
        {
            formatex(userID, charsmax(userID), "%d", get_user_userid(players[i]))
            formatex(txt, charsmax(txt), "%s (Eladó: %s | Ára: %d)", Skins[Market_Things[players[i]][Put_out]][Name], Market_Things[players[i]][Value])
            menu_additem(menu, txt, userID, 0)
        }
    }
    
    menu_setprop(menu, MPROP_EXIT, MEXIT_ALL)
    menu_setprop(menu, MPROP_BACKNAME, "Vissza")
    menu_setprop(menu, MPROP_NEXTNAME, "Előre")
    menu_setprop(menu, MPROP_EXITNAME, "Kilépés")
     
    menu_display(id, menu, 0)
    return PLUGIN_HANDLED
}
 
public Vasarlas_h(id, menu, item)
{
    if(item == MENU_EXIT)
    {
        menu_destroy(menu);
        return PLUGIN_HANDLED
    }
    new data[6] ,szName[64],access,callback
    new name[32]
        
    menu_item_getinfo(menu, item, access, data, charsmax(data), szName, charsmax(szName), callback)
    new userID = str_to_num(data)
    new userId = find_player("k", userID)
    
    if(arany[id] >= Market_Things[userId][Value] && Market_Things[userId][Stuff])
    {
        Market_Things[userId][Stuff] = false
        
        ColorChat(id, NORMAL, "^4[%s] ^1Vettél egy ^3%s^1-t ^4%s^1-től ^3%d ^4arany^1ért!", Prefix, Skins[Market_Things[userId][Put_out]][Name], name[userId], Market_Things[userId][Value])
        ColorChat(userID, NORMAL, "^4[%s] ^4%s^1 vett tőled ^3%s^1-t ^3%d ^4arany^1ért!", Prefix, name[id], Skins[Market_Things[userId][Put_out]][Name], Market_Things[userId][Value])
        arany[userId] += Market_Things[userId][Value]
        arany[id] -= Market_Things[userId][Value]
        Market_Things[userId][Value] = 0
        owned[id][Market_Things[userId][Put_out]] ++
        owned[userId][Market_Things[userId][Put_out]] --
        Market_Things[id][Put_out] = -1
        Update_SQL(userID)
        Update_SQL(id)
    }
    
    menu_destroy(menu)
    return PLUGIN_HANDLED
}
 
/*==========DROPP==========*/
//Jól droppol, az esélyt a plugin elején állítod.
public eDeathMsg()
{
    new attacker = read_data(1)
    
    if(attacker != read_data(2) && is_user_alive(attacker))
    {
        set_hudmessage(random(255), random(255), random(255), -1.0, 0.20, 0, 6.0, 12.0)
        if(read_data(3))
        {
            new mennyiseg = random_num(100, 200)
            arany[attacker] += mennyiseg
            show_hudmessage(attacker, "[ +%d Arany ]", mennyiseg)
        }
        else
        {
            new mennyiseg = random_num(50, 100)
            arany[attacker] += mennyiseg
            show_hudmessage(attacker, "[ +%d Arany ]", mennyiseg)
        }
        
        new Float:num = random_float(0.0, 100.0)
        if(num <= KEY_DROP)
        {
            new drp = random_num(0, sizeof(Cases)-1)
            keys[attacker][drp]++
            ColorChat(attacker, NORMAL, "^4[%s] ^1Találtál egy ^3%s^1-t!", Prefix, Cases[drp][KeyName])
        }
        else if(num <= KEY_DROP+CASE_DROP)
        {
            new drp = random_num(0, sizeof(Cases)-1)
            cases[attacker][drp]++
            ColorChat(attacker, NORMAL, "^4[%s] ^1Találtál egy ^3%s^1-t!", Prefix, Cases[drp][CaseName])
        }   
        Update_SQL(attacker)
    }
    return PLUGIN_HANDLED       
}
 
/*==========SKIN CSERE==========*/
//Nem belenyúlni, mert könnyen összekavarodnak a dolgok!!!!
public ItemDeploy_Weapon(ent)
{
    if(ent <=0)
        return HAM_IGNORED;
    
    new id = get_weapon_owner(ent)
    new wpn[32]; pev(ent, pev_classname, wpn, charsmax(wpn))
    replace(wpn, charsmax(wpn), "weapon_", "")
    
    for(new i; i<sizeof(Weapons);i++)
    {
        if(chosen[id][i] == 0)
        {
            /*for(new j; j<sizeof(Default_Skins);j++)
            {
                if(containi(Default_Skins[j][Name], wpn) != -1)
                {
                    set_pev(id, pev_viewmodel2, Default_Skins[j][Model])
                    return HAM_IGNORED;
                }
            }*/
            return HAM_IGNORED;
        }
        else
        {
            for(new j; j<sizeof(Skins);j++)
            {
                if(containi(Skins[j][Name], wpn) != -1 && chosen[id][i] == j+1)
                {
                    set_pev(id, pev_viewmodel2, Skins[j][Model])
                    return HAM_IGNORED;
                }
            }
        }
    }
    return HAM_IGNORED;
}
 
 public ItemDeploy_Other(ent)
{
    if(ent <=0)
        return HAM_IGNORED;
    
    new id = get_weapon_owner(ent)
    new wpn[32]; pev(ent, pev_classname, wpn, charsmax(wpn))
    replace(wpn, charsmax(wpn), "weapon_", "")
    
    for(new i; i<sizeof(Others);i++)
    {
        for(new j; j<sizeof(Other_Skins);j++)
        {
            if(containi(Other_Skins[j][Name], wpn) != -1)
            {
                set_pev(id, pev_viewmodel2, Other_Skins[j][Model])
                return HAM_IGNORED;
            }
        }
    }
    return HAM_IGNORED;
}
 
/*==========STOCKOK==========*/
//Nem piszkálni!
stock weapon_set_default(id, weapon[])
{
    for(new i; i<sizeof(Weapons);i++)
    {
        if(containi(Weapons[i], weapon) != -1)
        {
            chosen[id][i] = 0
            return 1
        }
    }
    return 0
}
 
stock weapon_now(id)
{
    new wpn[32]; get_weaponname(get_user_weapon(id), wpn, charsmax(wpn))
    replace(wpn, charsmax(wpn), "weapon_", "")
    
    for(new i; i<sizeof(Weapons);i++)
    {
        if(chosen[id][i] == Market_Things[id][Put_out]+1 && owned[id][Market_Things[id][Put_out]] < 2)
            return wpn;
    }
    
    copy(wpn, charsmax(wpn), "")
    return wpn;
}
 
stock weapon_drop(id, num)
{
    new Float:rarity = random_float(0.0, 100.0)
    new how_rare, count, skins[16]
    
    if(rarity < 35.0)   how_rare = 0
    else if(rarity >= 35.0 && rarity < 50.0) how_rare = 1
    else if(rarity >= 50.0 && rarity < 65.0) how_rare = 2
    else if(rarity >= 65.0 && rarity < 80.0) how_rare = 3
    else if(rarity >= 80.0 && rarity < 92.5) how_rare = 4
    else if(rarity >= 92.5 && rarity < 97.5) how_rare = 5
    else if(rarity >= 97.5 && rarity <= 100.0) how_rare = 6
    
    for(new i; i<sizeof(Skins);i++)
    {
        if(Skins[i][Rarity] == how_rare && Skins[i][Drop_from] == num)
        {
            skins[count] = i
            count++
        }
    }
    
    new dropped = random_num(0, count)
    
    owned[id][skins[dropped]]++
    ColorChat(id, NORMAL, "^4[%s]^1 Egy ^3%s ^1skint nyitottál!", Prefix, Skins[skins[dropped]][Name])
}