#include <amxmodx>
#include <fvault>
#include <engine>
#include <hamsandwich>
#include <cstrike>

#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 < sizeof(Kesek); i++)
		precache_model(Kesek[i][Model]);
}
public FegyverValtas(ent)
{
	new id = entity_get_edict(ent, EV_ENT_owner);
	new Fgy = cs_get_weapon_id(ent);
	
	switch(Fgy)
	{
		case CSW_KNIFE:
		{
			switch(Skin[id])
			{
				case 1:entity_set_string(id, EV_SZ_viewmodel, Kesek[0][Model]);
				case 2:entity_set_string(id, EV_SZ_viewmodel, Kesek[1][Model]);
				case 3:entity_set_string(id, EV_SZ_viewmodel, Kesek[2][Model]);
				case 4:entity_set_string(id, EV_SZ_viewmodel, Kesek[3][Model]);
				case 5:entity_set_string(id, EV_SZ_viewmodel, Kesek[4][Model]);
				case 6:entity_set_string(id, EV_SZ_viewmodel, Kesek[5][Model]);
				case 7:entity_set_string(id, EV_SZ_viewmodel, Kesek[6][Model]);
				case 8:entity_set_string(id, EV_SZ_viewmodel, Kesek[7][Model]);
				case 9:entity_set_string(id, EV_SZ_viewmodel, Kesek[8][Model]);
				case 10:entity_set_string(id, EV_SZ_viewmodel, Kesek[9][Model]);
				case 11:entity_set_string(id, EV_SZ_viewmodel, Kesek[10][Model]);
				case 12:entity_set_string(id, EV_SZ_viewmodel, Kesek[11][Model]);
				case 13:entity_set_string(id, EV_SZ_viewmodel, Kesek[12][Model]);
				case 14:entity_set_string(id, EV_SZ_viewmodel, Kesek[13][Model]);
				case 15:entity_set_string(id, EV_SZ_viewmodel, 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 < sizeof(Kesek); 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 < sizeof(Kesek); 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 < sizeof(Kesek); 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 < sizeof(Kesek); 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 < sizeof(Kesek); 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 < sizeof(Kesek); 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 < sizeof(Kesek); 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;
		Lada[id] = 0;
		Kulcs[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 %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], Lada[id], Kulcs[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], Lad[32], Key[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, Lad, 31, Key, 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);
		Lada[id] = str_to_num(Lad);
		Kulcs[id] = str_to_num(Key);
	}
}
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 %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], Lada[id], Kulcs[id]);
	
	fvault_set_data(File, Nev, Mentes);
}
