#include <amxmodx>
#include <ColorChat>
#include <CodMod>

#define PLUGIN "Wymien Perk"
#define VERSION "1.0"
#define AUTHOR "Play"

/*native cod_set_user_perk(id, przedmiot)
native cod_get_user_class(id)
	native cod_get_user_perk(id)*/

new bool:dostal_przedmiot[33];
new oddaj_id[33];
new bool:blokada[33];
new bool:block=true;

public plugin_init() 
{
	register_plugin(PLUGIN, VERSION, AUTHOR);
	
	register_clcmd("say /wymien", "MenuZamien");
	register_clcmd("say /zamien", "MenuZamien");
	
	register_event("ResetHUD", "cod_perk_changed", "abe");
}
public MenuZamien(id)
{
	new menu = menu_create("Menu Wymiany", "MenuZamien_handle");
	menu_additem(menu, "Wymien Perk^n", "1", 0);
	
	if(block) 
		menu_additem(menu,"\yMozliwosc Wymiany \d[\rON/--\d]","2",0)
	else 
		menu_additem(menu,"\yMozliwosc Wymiany \d[\r--/OFF\d]","3",0)
		
	menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
	
	menu_display(id, menu, 0);
}

public MenuZamien_handle(id, menu, item)
{
	
	new data[6], iName[64];
	new zaccess, callback;
	menu_item_getinfo(menu, item, zaccess, data,5, iName, 64, callback);
	new key = str_to_num(data)
	
	switch(key)
	{
		case 1:
		{
			ZamienPerk(id)
			menu_destroy(menu);
			return PLUGIN_HANDLED;
		}
		case 2:
		{
			zablokuj(id)
			block=!block;
			return PLUGIN_HANDLED;
		}		
		case 3:
		{
			odblokuj(id)
			block=!block;
			return PLUGIN_HANDLED;
		}
		
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}
public ZamienPerk(id)
{
	new szText[128], szPerk[33];
	new menu = menu_create("Zamien sie perkiem", "ZamienPerk_Handle");
	new cb = menu_makecallback("OddajPerk_Callback");
	for(new i=0, n=0; i<=32; i++)
	{
		if(!is_user_connected(i))
			continue;
		oddaj_id[n++] = i;
		new nazwa_gracza[64];
		get_user_name(i, nazwa_gracza, 63);
		cod_get_perk_name(cod_get_user_perk(i), szPerk, 32);
		format(szText, 127, "%s \d[\r%s\d]", nazwa_gracza, szPerk);  
		menu_additem(menu, szText, "0", 0, cb);
	}
	menu_display(id, menu);
}

public cod_perk_changed(id)
	dostal_przedmiot[id] = false;

public zablokuj(id)
{
	blokada[id] = true;
	MenuZamien(id)
	ColorChat(id, TEAM_COLOR, "[COD Elite]^x04 Zablokowales mozliwosc wymiany z toba perkami!");
}

public odblokuj(id)
{
	blokada[id] = false;
	MenuZamien(id)
	ColorChat(id, TEAM_COLOR, "[COD Elite]^x04 Odblokowales mozliwosc wymiany z toba perkami");	
}

public ZamienPerk_Handle(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_CONTINUE;
	}
	
	if(!is_user_connected(oddaj_id[item])){
		ColorChat(id, TEAM_COLOR, "[COD Elite]^x01 Nie odnaleziono zadanego gracza.");
		return PLUGIN_CONTINUE;
	}
	
	if(dostal_przedmiot[oddaj_id[item]]){
		ColorChat(id, TEAM_COLOR, "[COD Elite]^x01 Wybrany gracz musi poczekac 1 runde.");
		return PLUGIN_CONTINUE;
	}
	
	if(dostal_przedmiot[id]){
		ColorChat(id, TEAM_COLOR, "[COD Elite]^x01 Musisz poczekac 1 runde.");
		return PLUGIN_CONTINUE;
	}
	
	if(!cod_get_user_perk(oddaj_id[item])){
		ColorChat(id, TEAM_COLOR, "[COD Elite]^x01 Wybrany gracz nie mam zadnego perka.");
		return PLUGIN_CONTINUE;
	}
	
	if(!cod_get_user_perk(id)){
		ColorChat(id, TEAM_COLOR, "[COD Elite]^x01 Nie masz zadnego perka.");
		return PLUGIN_CONTINUE;
	}
	
	new nazwa_menu[128], nick[64], szPerk[33];
	
	get_user_name(id, nick, charsmax(nick))
	cod_get_perk_name(cod_get_user_perk(id), szPerk, 32);
	formatex(nazwa_menu, charsmax(nazwa_menu), "Wymien sie perkiem z %s^n\d[\r%s\d]", nick, szPerk);
	
	new menu2 = menu_create(nazwa_menu, "menu_wymien");
	
	menu_additem(menu2, "Tak", nick);
	menu_addblank(menu2, 0)
	menu_additem(menu2, "Nie", nick);
	
	menu_setprop(menu2, MPROP_EXITNAME, "Wyjdz");
	menu_display(oddaj_id[item], menu2);
	return PLUGIN_CONTINUE;
}

public menu_wymien(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_CONTINUE;
	}
	new access, callback, data[64];
	menu_item_getinfo(menu, item, access, data, charsmax(data), _, _, callback);
	new id2 = get_user_index(data) 
	
	switch(item)
	{
		case 0: 
		{ 
			new perk_oddajacego = cod_get_user_perk(id2)
			new perk_dajacego = cod_get_user_perk(id)
			
			cod_set_user_perk(id2, perk_dajacego);
			cod_set_user_perk(id, perk_oddajacego);
			
			dostal_przedmiot[id2] = true;
			dostal_przedmiot[id] = true;
			
			new nazwa_dajacego[64];
			
			get_user_name(id, nazwa_dajacego, charsmax(nazwa_dajacego))
			
			ColorChat(id, TEAM_COLOR, "[COD Elite]^x01 Wymieniles sie perkiem z^x04 %s.", data);
			ColorChat(id2, TEAM_COLOR, "[COD Elite]^x01 Wymieniles sie perkiem z^x04 %s.", nazwa_dajacego)
		}
		case 1: ColorChat(id2, TEAM_COLOR, "[COD Elite]^x01 Wybrany gracz nie zgodzil sie na wymiane.")
		}
	return PLUGIN_CONTINUE;
}

public OddajPerk_Callback(id, menu, item)
{
	if(oddaj_id[item] == id || !cod_get_user_class(oddaj_id[item]) || !cod_get_user_perk(oddaj_id[item]) || blokada[oddaj_id[item]])
		return ITEM_DISABLED;
	return ITEM_ENABLED;
}
