#include <amxmodx>
#include <fvault>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
 
#pragma semicolon 1
 
new const PLUGIN[] = "Painball";
new const VERSION[] = "1.0";
new const AUTHOR[] = "Pardon.";
 
new Kes[15][33], Arany[33], Lada[33], Kulcs[33], Szint[33], Xp[33], Skin[33];
new Erteke[33], kicucc[33], kirakva[33], pido;
 
new const File[] = "SkinMentes";
new const Prefix[] = "[Paintball 1.0]";
 
new g_SyncHud1;
 
enum _:ADAT { Name[32], Model[64] };
 
new const Kesek[][ADAT] =
{
    { "Vonalzo Kés", "models/paintball/v_vonalzo.mdl" },
    { "Hagyma Kés", "models/paintball/v_hagyma.mdl" },
    { "Dildo Kés", "models/paintball/v_dildo.mdl" },
    { "Lumine Kés", "models/paintball/v_lumine.mdl" },
    { "M9 Bayonet Kés", "models/paintball/v_m9.mdl" },
    { "Wolverine Kés", "models/paintball/v_wolverine.mdl" },
    { "Kukri Beast Kés", "models/paintball/v_kukri_beast.mdl" },
    { "Defibrillator Kés", "models/paintball/v_defibrillator.mdl" },
    { "Chinese Kés", "models/paintball/v_chinese.mdl" },
    { "Daedric Kés", "models/paintball/v_daedric.mdl" },
    { "Cheese Slicer Kés", "models/paintball/v_cheese_slicer.mdl" },
    { "Beba Kés", "models/paintball/v_beba.mdl" },
    { "Aqua Kés", "models/paintball/v_aqua.mdl" },
    { "Carbon Kés", "models/paintball/v_carbon.mdl" },
    { "Balrog Dragonslayer Kés", "models/paintball/v_balrog_dragonslayer.mdl" }
};
 
public plugin_init() {
    register_plugin(PLUGIN, VERSION, AUTHOR);
    
    register_impulse(201, "FoMenu");
    register_clcmd("say /menu", "FoMenu");
    
    g_SyncHud1 = CreateHudSyncObj();
    
    set_task(0.5,"TaskHalfSecond",.flags="b");
    
    register_event("DeathMsg", "Halal", "a");
    RegisterHam(Ham_Item_Deploy, "weapon_knife", "FegyverValtas", 1);
}
public plugin_precache()
{
    for(new i;i < 15; i++)
        precache_model(Kesek[i][Model]);
}
public FegyverValtas(ent)
{
    new id = get_pdata_cbase(ent, 41, 4);
    
    switch(get_user_weapon(id))
    {
        case CSW_KNIFE:
        {
            switch(Skin[id])
            {
                
                case 1: set_pev(id, pev_viewmodel2, Kesek[0][Model]);
                case 2: set_pev(id, pev_viewmodel2, Kesek[1][Model]);
                case 3: set_pev(id, pev_viewmodel2, Kesek[2][Model]);
                case 4: set_pev(id, pev_viewmodel2, Kesek[3][Model]);
                case 5: set_pev(id, pev_viewmodel2, Kesek[4][Model]);
                case 6: set_pev(id, pev_viewmodel2, Kesek[5][Model]);
                case 7: set_pev(id, pev_viewmodel2, Kesek[6][Model]);
                case 8: set_pev(id, pev_viewmodel2, Kesek[7][Model]);
                case 9: set_pev(id, pev_viewmodel2, Kesek[8][Model]);
                case 10: set_pev(id, pev_viewmodel2, Kesek[9][Model]);
                case 11: set_pev(id, pev_viewmodel2, Kesek[10][Model]);
                case 12: set_pev(id, pev_viewmodel2, Kesek[11][Model]);
                case 13: set_pev(id, pev_viewmodel2, Kesek[12][Model]);
                case 14: set_pev(id, pev_viewmodel2, Kesek[13][Model]);
                case 15: set_pev(id, pev_viewmodel2, Kesek[14][Model]);
            }
        }
    }
}
 
public TaskHalfSecond() {
    new players[32], pnum, tempid;
    get_players(players, pnum, "ac");
    
    for(new i;i<pnum; i++)
    {
        tempid = players[i];
        set_hudmessage(255, 255, 255, 0.01, 0.17, 0, 1.0, 1.0);
        ShowSyncHudMsg(tempid, g_SyncHud1, "Szint: %d^nXp: %d/100(%.1f%%)^nArany: %d^n^nLáda: %d | Kulcs: %d", Szint[tempid], Xp[tempid], float(Xp[tempid])*100, Arany[tempid], Lada[tempid], Kulcs[tempid]);
    }
}
public Halal()
{
    new Gyilkos = read_data(1);
    new Aldozat = read_data(2);
    new Num = random_num(1, 10);
    new elezaparaszt = is_user_alive(Gyilkos);
    new pPont;
    pPont += random_num(11, 19);
    
    if(Gyilkos == Aldozat)
        return;
    
    Arany[Gyilkos] += pPont;
    client_printcolor(Gyilkos, "!g%s !nKaptál !g+%d !nAranyat.", Prefix, pPont);
    
    if(Szint[Gyilkos] >= 0 && Szint[Gyilkos] <= 1000) Xp[Gyilkos] += random_num(12, 15);
    
    if(Xp[Gyilkos] > 100)
    {
        Xp[Gyilkos] -= 100;
        Szint[Gyilkos] ++;
    }
    
    new Nev[32]; get_user_name(Gyilkos, Nev, 31);
    
    if(Num == 7 && elezaparaszt)
    {
        Lada[Gyilkos] ++;
        client_printcolor(0, "!g%s !t%s !nTalált egy ládát.", Prefix, Nev);
    }
    else if(Num == 5 && elezaparaszt)
    {
        Kulcs[Gyilkos] ++;
        client_printcolor(0, "!g%s !t%s !nTalált egy kulcsot.", Prefix, Nev);
    }
}
public FoMenu(id)
{
    new menu = menu_create("\wPaintball \y- \dFõmenü", "Fomenu_h");
    
    menu_additem(menu, "Raktár", "1", 0);
    menu_additem(menu, "Láda Nyitás", "2", 0);
    menu_additem(menu, "Piac", "3", 0);
    menu_additem(menu, "Eldobás", "4", 0);
    
    menu_display(id, menu, 0);
}
public Fomenu_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: Raktar(id);
        case 2: LadaNyitas(id);
        case 3: Piac(id);
        case 4: Eldobas(id);
    }
}
public Raktar(id)
{
    new cim[121];
    new menu = menu_create("\wPaintball \y- \dRaktár", "Raktar_h");
    
    for(new i=0;i < 15; i++)
    {
        if(Kes[i][id] > 0)
        {
            new Sor[6]; num_to_str(i, Sor, 5);
            formatex(cim, charsmax(cim), "\r%s \y| \d%d DB", Kesek[i][Name], Kes[i][id]);
            menu_additem(menu, cim, Sor);
        }
    }
    menu_display(id, menu, 0);
}
public Raktar_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);
    
    
    Skin[id] = key+1;
    client_printcolor(id, "!g%s !nSikeresen Kiválasztodtad a : !g%s !nSkin.", Prefix, Kesek[key][Name]);
}
public LadaNyitas(id)
{
    new menu = menu_create("\wPaintball \y- \dLadáNyitás", "LadaNyit_h");
    
    menu_additem(menu, "\yLádaNyitás\r!^n\d1 Láda és 1 Kulcs!", "1", 0);
    
    menu_display(id, menu, 0);
}
public LadaNyit_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(Lada[id] >= 1 && Kulcs[id] >= 1)
            {
                Lada[id] --;
                Kulcs[id] --;
                Talal(id);
            }
            LadaNyitas(id);
        }
    }
}
public Eldobas(id)
{
    new cim[121];
    new menu = menu_create("\wPaintball \y- \dEldobás", "Eldobas_h");
    
    for(new i=0;i < 15; i++)
    {
        if(Kes[i][id] > 0)
        {
            new Sor[6]; num_to_str(i, Sor, 5);
            formatex(cim, charsmax(cim), "\r%s \y| \d%d DB", Kesek[i][Name], Kes[i][id]);
            menu_additem(menu, cim, Sor);
        }
    }
    menu_display(id, menu, 0);
}
public Eldobas_h(id, menu, item)
{
    if(item == MENU_EXIT)
    {
        menu_destroy(menu);
        return;
    }
    
    Kes[item][id] --;
    Eldobas(id);
}
public Piac(id)
{
    new cim[121];
    format(cim, charsmax(cim), "\wPaintball \y- \dPiac");
    new menu = menu_create(cim, "Piac_h");
    
    menu_additem(menu, "Eladás", "1", 0);
    menu_additem(menu, "Vásárlás", "2", 0);
    
    menu_display(id, menu, 0);
}
public Piac_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: Eladas(id);
        case 2: Vasarlas(id);
    }
}
public Eladas(id) {
    new cim[121], ks1[121], ks2[121];
    format(cim, charsmax(cim), "\wPaintball \y- \dEladás");
    new menu = menu_create(cim, "eladas_h" );
    
    if(kirakva[id] == 0){
        for(new i=0; i < 110; i++) {
            if(kicucc[id] == 0) format(ks1, charsmax(ks1), "Tárgy: \dVálasz Valamit!^n");
            else if(kicucc[id] == i) format(ks1, charsmax(ks1), "Tárgy: \d%s^n", Kesek[i-1][Name]);
        }
        menu_additem(menu, ks1 ,"0",0);
    }
    if(kirakva[id] == 0){
        format(ks2, charsmax(ks2), "\wÁr: \d%d", Erteke[id]);
        menu_additem(menu,ks2,"1",0);
    }
    
    if(kirakva[id] == 0)
        menu_additem(menu,"\yKirakás!","2",0);
    
    if(Erteke[id] != 0 && kirakva[id] == 1)
        menu_additem(menu,"Tárgy \dVisszavonás","-2",0);
    
    menu_setprop(menu, MPROP_EXITNAME, "Kilépés");
    menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
    menu_display(id, menu, 0);
}
public eladas_h(id, menu, item){
    if( item == MENU_EXIT )
    {
        menu_destroy(menu);
        return PLUGIN_HANDLED;
    }
    new data[9], szName[64], name[32];
    get_user_name(id, name, charsmax(name));
    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 -2:{
            kirakva[id] = 0;
            kicucc[id] = 0;
            Erteke[id] = 0;
        }
        case 0:{
            fvalaszt(id);
        }
        case 1:{
            client_cmd(id, "messagemode DOLLAR");
        }
        case 2:{
            for(new i=0; i < 110; i++) {
                if(kicucc[id] == i && Kes[i-1][id] >= 1) {
                    client_printcolor(0, "!g%s !t%s !nKirakott egy !g%s-!nt %d aranyrt",Prefix, name, Kesek[i-1][Name], Erteke[id]);
                    kirakva[id] = 1;
                }
            }
        }
    }
    menu_destroy(menu);
    return PLUGIN_HANDLED;
}
public fvalaszt(id) {
    new szMenuTitle[ 121 ],cim[121];
    format( szMenuTitle, charsmax( szMenuTitle ), "\wPaintball \y- \dFegyver Válasz");
    new menu = menu_create( szMenuTitle, "fvalaszt_h" );
    
    for(new i=0; i < 110; i++) {
        if(Kes[i-1][id] > 0) {
            new Num[6];
            num_to_str(i, Num, 5);
            formatex(cim, charsmax(cim), "\y%s \r| \d%d DB", Kesek[i][Name], Kes[i][id]);
            menu_additem(menu, cim, Num);
        }
    }
    
    menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
    menu_display(id, menu, 0);
    
}
public fvalaszt_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);
    
    kicucc[id] = key+1;
    Eladas(id);
}
public lekeres(id) {
    new ertek, adatok[32];
    read_args(adatok, charsmax(adatok));
    remove_quotes(adatok);
    
    ertek = str_to_num(adatok);
    
    new hossz = strlen(adatok);
    
    if(hossz > 7)
    {
        client_cmd(id, "messagemode DOLLAR");
    }
    else if(ertek < 20)
    {
        client_printcolor(id, "!g%s !nNem tudsz eladni fegyver!t 20 arany alatt.", Prefix);
        Eladas(id);
    }
    else
    {
        Erteke[id] = ertek;
        Eladas(id);
    }
}
public Vasarlas(id)
{      
    new mpont[512], menu, cim[121];
    
    static players[32],temp[10],pnum;  
    get_players(players,pnum,"c");
    
    format(cim, charsmax(cim), "\wPaintball \y- \dVásárlás");
    menu = menu_create(cim, "vasarlas_h" );
    
    for (new i; i < pnum; i++)
    {
        if(kirakva[players[i]] == 1 && Erteke[players[i]] > 0)
        {
            for(new a=0; a < 110; a++) {
                if(kicucc[players[i]] == a)
                    formatex(mpont,256,"\r%s \y| \w%s \y| \w%d \yArany", Kesek[i-1][Name], get_player_name(players[i]), Erteke[players[i]]);
            }
            
            num_to_str(players[i],temp,charsmax(temp));
            menu_additem(menu, mpont, temp);
        }
    }
    menu_setprop(menu, MPROP_PERPAGE, 6);
    menu_setprop(menu, MPROP_EXIT, MEXIT_ALL );
    menu_display(id, menu);
    return PLUGIN_HANDLED;
}  
public vasarlas_h(id,menu, item){
    if(item == MENU_EXIT)
    {
        menu_destroy(menu);
        return;
    }
    if(pido != 0){
        Vasarlas(id);
        return;
    }
    new data[6] ,szName[64],access,callback;
    new name[32], name2[32];
    get_user_name(id, name, charsmax(name));
    
    menu_item_getinfo(menu, item, access, data, charsmax(data), szName, charsmax(szName), callback);
    
    new player = str_to_num(data);
    get_user_name(player, name2, charsmax(name2));
    pido = 2;
    set_task(2.0, "vido");
    
    for(new i=0; i < 110; i++) {
        if(Arany[id] >= Erteke[player] && kicucc[player] == i && kirakva[player] == 1)
        {
            kirakva[player] = 0;
            client_printcolor(0,  "!g%s !t%s !nvett egy !g%s !n%s-tól %d Aranyért!",Prefix, name, Kesek[i-1][Name], name2, Erteke[player]);
            Arany[player] += Erteke[player];
            Arany[id] -= Erteke[player];
            Kes[i-1][id] ++;
            Kes[i-1][player] --;
            kicucc[player] = 0;
            Erteke[player] = 0;
        }
    }
}
public Talal(id)
{
    new Szam = random_num(1, 700);
    new Nev[32]; get_user_name(id, Nev, 31);
    
    if(Szam < 300)
    {
        switch(random_num(1, 7))
        {
            case 1:
            {
                Kes[0][id] ++;
                client_printcolor(0, "!g%s !t%s !nTalálta ezt: !g%s!", Prefix, Nev, Kesek[0][Name]);
            }
            case 2:
            {
                Kes[1][id] ++;
                client_printcolor(0, "!g%s !t%s !nTalálta ezt: !g%s!", Prefix, Nev, Kesek[1][Name]);
            }
            case 3:
            {
                Kes[2][id] ++;
                client_printcolor(0, "!g%s !t%s !nTalálta ezt: !g%s!", Prefix, Nev, Kesek[2][Name]);
            }
            case 4:
            {
                Kes[3][id] ++;
                client_printcolor(0, "!g%s !t%s !nTalálta ezt: !g%s!", Prefix, Nev, Kesek[3][Name]);
            }
            case 5:
            {
                Kes[4][id] ++;
                client_printcolor(0, "!g%s !t%s !nTalálta ezt: !g%s!", Prefix, Nev, Kesek[4][Name]);
            }
            case 6:
            {
                Kes[5][id] ++;
                client_printcolor(0, "!g%s !t%s !nTalálta ezt: !g%s!", Prefix, Nev, Kesek[5][Name]);
            }
            case 7:
            {
                Kes[6][id] ++;
                client_printcolor(0, "!g%s !t%s !nTalálta ezt: !g%s!", Prefix, Nev, Kesek[6][Name]);
            }
        }
    }
    else if(Szam < 400 && Szam > 700)
    {
        switch(random_num(1, 8))
        {
            case 1:
            {
                Kes[7][id] ++;
                client_printcolor(0, "!g%s !t%s !nTalálta ezt: !g%s!", Prefix, Nev, Kesek[7][Name]);
            }
            case 2:
            {
                Kes[8][id] ++;
                client_printcolor(0, "!g%s !t%s !nTalálta ezt: !g%s!", Prefix, Nev, Kesek[8][Name]);
            }
            case 3:
            {
                Kes[9][id] ++;
                client_printcolor(0, "!g%s !t%s !nTalálta ezt: !g%s!", Prefix, Nev, Kesek[9][Name]);
            }
            case 4:
            {
                Kes[10][id] ++;
                client_printcolor(0, "!g%s !t%s !nTalálta ezt: !g%s!", Prefix, Nev, Kesek[10][Name]);
            }
            case 5:
            {
                Kes[11][id] ++;
                client_printcolor(0, "!g%s !t%s !nTalálta ezt: !g%s!", Prefix, Nev, Kesek[11][Name]);
            }
            case 6:
            {
                Kes[12][id] ++;
                client_printcolor(0, "!g%s !t%s !nTalálta ezt: !g%s!", Prefix, Nev, Kesek[12][Name]);
            }
            case 7:
            {
                Kes[13][id] ++;
                client_printcolor(0, "!g%s !t%s !nTalálta ezt: !g%s!", Prefix, Nev, Kesek[13][Name]);
            }
            case 8:
            {
                Kes[14][id] ++;
                client_printcolor(0, "!g%s !t%s !nTalálta ezt: !g%s!", Prefix, Nev, Kesek[14][Name]);
            }
        }
    }
}
public vido()
{
    pido = 0;
}
stock get_player_name(id){
    static Nev[32];
    get_user_name(id, Nev,31);
    return Nev;
}
stock client_printcolor(const id, const input[], any:...)
{
    new count = 1, players[32];
    static msg[191];
    vformat(msg, 190, input, 3);
 
    replace_all(msg, 190, "!g", "^4");
    replace_all(msg, 190, "!n", "^1");
    replace_all(msg, 190, "!t", "^3");  
 
    if (id) players[0] = id; else get_players(players, count, "ch");
    {
        for (new i = 0; i < count; i++)
        {
            if (is_user_connected(players[i]))
            {
                message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);
                write_byte(players[i]);
                write_string(msg);
                message_end();
            }
        }
    }
    return PLUGIN_HANDLED;
}
public client_putinserver(id)
{
    if(!is_user_bot(id))
        Load(id);
}
public client_disconnect(id)
{
    if(!is_user_bot(id))
    {
        Save(id);
        Arany[id] = 0;
        Szint[id] = 0;
        Xp[id] = 0;
        
        for(new i;i < 15; i++)
            Kes[i][id] = 0;
    }
}
Load(id)
{
    new Nev[32]; get_user_name(id, Nev, sizeof(Nev)-1);
    
    new Mentes[512];
    format(Mentes, charsmax(Mentes), "%i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i", Arany[id], Szint[id], Xp[id], Kes[0][id], Kes[1][id], Kes[2][id], Kes[3][id], Kes[4][id], Kes[5][id], Kes[6][id]
    , Kes[7][id], Kes[8][id], Kes[9][id], Kes[10][id], Kes[11][id], Kes[12][id], Kes[13][id], Kes[14][id]);
    
    if(fvault_get_data(File, Mentes, Nev, charsmax(Nev)))
    {
        new Gold[32], Lvl[32], Tap[32], Ks1[32], Ks2[32], Ks3[32], Ks4[32], Ks5[32], Ks6[32], Ks7[32], Ks8[32], Ks9[32], Ks10[32], Ks11[32], Ks12[32], Ks13[32], Ks14[32], Ks15[32];
        parse(Mentes, Gold, 31, Lvl, 31, Tap, 31, Ks1, 31, Ks2, 31, Ks3, 31, Ks4, 31, Ks5, 31, Ks6, 31, Ks7, 31, Ks8, 31, Ks9, 31, Ks10, 31, Ks11, 31, Ks12, 31, Ks13, 31, Ks14, 31, Ks15, 31);
        
        Arany[id] = str_to_num(Gold);
        Szint[id] = str_to_num(Lvl);
        Xp[id] = str_to_num(Tap);
        Kes[0][id] = str_to_num(Ks1);
        Kes[1][id] = str_to_num(Ks2);
        Kes[2][id] = str_to_num(Ks3);
        Kes[3][id] = str_to_num(Ks4);
        Kes[4][id] = str_to_num(Ks5);
        Kes[5][id] = str_to_num(Ks6);
        Kes[6][id] = str_to_num(Ks7);
        Kes[7][id] = str_to_num(Ks8);
        Kes[8][id] = str_to_num(Ks9);
        Kes[9][id] = str_to_num(Ks10);
        Kes[10][id] = str_to_num(Ks11);
        Kes[11][id] = str_to_num(Ks12);
        Kes[12][id] = str_to_num(Ks13);
        Kes[13][id] = str_to_num(Ks14);
        Kes[14][id] = str_to_num(Ks15);
    }
}
Save(id)
{
    new Nev[32]; get_user_name(id, Nev, sizeof(Nev)-1);
    
    new Mentes[512];
    format(Mentes, charsmax(Mentes), "%i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i", Arany[id], Szint[id], Xp[id], Kes[0][id], Kes[1][id], Kes[2][id], Kes[3][id], Kes[4][id], Kes[5][id], Kes[6][id]
    , Kes[7][id], Kes[8][id], Kes[9][id], Kes[10][id], Kes[11][id], Kes[12][id], Kes[13][id], Kes[14][id]);
    
    fvault_set_data(File, Nev, Mentes);
}