#include <amxmodx>
#include <codmod>

#define PLUGIN "Wymien Perk"
#define VERSION "1.0"
#define AUTHOR "QTM.Peyote & cypis"

	
new bool:dostal_przedmiot[33];
new oddaj_id[33];

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR);
	
	register_clcmd("say /wymien", "ZamienPerk");
	register_clcmd("say /zamien", "ZamienPerk");
	register_event("ResetHUD", "cod_perk_changed", "abe");
}
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 \y[%s]", nazwa_gracza, szPerk);  
		menu_additem(menu, szText, "0", 0, cb);
	}
	menu_display(id, menu);
}

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

public ZamienPerk_Handle(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_CONTINUE;
	}
	
	if(!is_user_connected(oddaj_id[item])){
		client_print(id, print_chat, "Nie odnaleziono zadanego gracza.");
		return PLUGIN_CONTINUE;
	}
	
	if(dostal_przedmiot[oddaj_id[item]]){
		client_print(id, print_chat, "Wybrany gracz musi poczekac 1 runde.");
		return PLUGIN_CONTINUE;
	}
	
	if(dostal_przedmiot[id]){
		client_print(id, print_chat, "Musisz poczekac 1 runde.");
		return PLUGIN_CONTINUE;
	}
	
	if(!cod_get_user_perk(oddaj_id[item])){
		client_print(id, print_chat, "Wybrany gracz nie mam zadnego perka.");
		return PLUGIN_CONTINUE;
	}
	
	if(!cod_get_user_perk(id)){
		client_print(id, print_chat, "Nie masz zadnego perka.");
		return PLUGIN_CONTINUE;
	}
	
	new nazwa_menu[128], nick[64];
	
	get_user_name(id, nick, charsmax(nick))
	formatex(nazwa_menu, charsmax(nazwa_menu), "Wymien sie perkiem z %s:", nick)
	
	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))
			
			client_print(id, print_chat, "Wymieniles sie perkiem z %s.", data);
			client_print(id2, print_chat, "Wymieniles sie perkiem z %s.", nazwa_dajacego)
		}
		case 1: client_print(id2, print_chat, "Wybrany gracz nie zgodzil sie na wymiane perka.")
		}
	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]))
		return ITEM_DISABLED;
	return ITEM_ENABLED;
}
