#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <colorchat>
#include <hamsandwich>
#include <sqlx>

new const PLUGIN[] = "Skin Menü"
new const VERSION[] = "1.0"
new const AUTHOR[] = "exodus"

//------------------------------------------------------------------------------------------------
//Beállítások
//------------------------------------------------------------------------------------------------

new const SQLINFO[][] = { "", "", "", "" };

new const Prefix[] = "Skin Menü 1.0" //Menükben megjelenő prefix
new const Chat_Prefix[] = "[.:DarK DemonS:.]" //Chatben megjelenő prefix
new const Website[] = "fb.com/groups/darkdemonsszerver/" //Főmenüben a menük alatt megjelenő kiírás (pl.: fb oldal)

new const Drop[][] = { 10 }; //Mennyi ölés után adjon valamilyen skint.

#define MAX 50 //Felszerelhető skinek száma
#define ADMIN ADMIN_BAN //Addoláshoz szükséges jog

//------------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------------
new t_OSkin[MAX][33], t_Skin[5][33], Oles[2][33], name[32][33];
new Beallitasok[33];
new Handle:g_SqlTuple;
//------------------------------------------------------------------------------------------------

public plugin_init()
{
register_plugin(PLUGIN,VERSION,AUTHOR)

sql_create_table();

register_impulse(201, "m_Fomenu");
register_clcmd("say /menu", "m_Fomenu");
register_clcmd("say /add", "m_Addolas");

register_event("CurWeapon", "m_CurWeapon", "be", "1=1");
register_event("DeathMsg", "m_Halal", "a");
}

new const c_Fegyverek[MAX][] =
{
	{ "Adidas AK47" },
	{ "Barcelone AK47" },
	{ "Black AK47" },
	{ "Blooded AK47" },
	{ "Blue AK47" },
	{ "Carboned AK47" },
	{ "Collect AK47" },
	{ "Color AK47" },
	{ "Curzon AK47" },
	{ "Galaxy AK47" },
	{ "Acho M4A1" },
	{ "Black M4A1" },
	{ "Cool M4A1" },
	{ "Crome M4A1" },
	{ "Desert M4A1" },
	{ "Dragon M4A1" },
	{ "Fain M4A1" },
	{ "Fotote M4A1" },
	{ "Future M4A1" },
	{ "Galaxy M4A1" },
	{ "Átlátszó Deagle" },
	{ "Battle Deagle" },
	{ "Black Deagle" },
	{ "Colt Deagle" },
	{ "Dragon Deagle" },
	{ "Egyed Deagle" },
	{ "Famosas Deagle" },
	{ "Fantazi Deagle" },
	{ "Galaxy Deagle" },
	{ "Gold Deagle" },
	{ "Amerika AWP" },
	{ "Arany AWP" },
	{ "Camon AWP" },
	{ "Galaxy AWP" },
	{ "Gyik AWP" },
	{ "Ice AWP" },
	{ "Joker AWP" },
	{ "Katona AWP" },
	{ "Laser AWP" },
	{ "Monster AWP" },
	{ "Adidas Kés" },
	{ "Atom Kés" },
	{ "Black Kés" },
	{ "Botkés" },
	{ "Color Kés" },
	{ "Dragon Kés" },
	{ "Gold Kés" },
	{ "Jungel Kés" },
	{ "Megatron Kés" },
	{ "Natural Kés" }
};

new const m_AK47[][] =
{
	"models/exodus_skinmenu/Ak47/Adidas.mdl",
	"models/exodus_skinmenu/Ak47/Barcelone.mdl",
	"models/exodus_skinmenu/Ak47/Black.mdl",
	"models/exodus_skinmenu/Ak47/Blooded.mdl",
	"models/exodus_skinmenu/Ak47/Blue.mdl",
	"models/exodus_skinmenu/Ak47/Carboned.mdl",
	"models/exodus_skinmenu/Ak47/Collect.mdl",
	"models/exodus_skinmenu/Ak47/Collor.mdl",
	"models/exodus_skinmenu/Ak47/Curzon.mdl",
	"models/exodus_skinmenu/Ak47/Galaxy.mdl"
};
new const m_M4A1[][] =
{
	"models/exodus_skinmenu/M4a1/Acho.mdl",
	"models/exodus_skinmenu/M4a1/Black.mdl",
	"models/exodus_skinmenu/M4a1/Cool.mdl",
	"models/exodus_skinmenu/M4a1/Crome.mdl",
	"models/exodus_skinmenu/M4a1/Desert.mdl",
	"models/exodus_skinmenu/M4a1/Dragon.mdl",
	"models/exodus_skinmenu/M4a1/Fain.mdl",
	"models/exodus_skinmenu/M4a1/Fotote.mdl",
	"models/exodus_skinmenu/M4a1/Future.mdl",
	"models/exodus_skinmenu/M4a1/Galaxy.mdl"
};
new const m_DEAGLE[][] =
{
	"models/exodus_skinmenu/Deagle/Atlatszo.mdl",
	"models/exodus_skinmenu/Deagle/Batle.mdl",
	"models/exodus_skinmenu/Deagle/Black.mdl",
	"models/exodus_skinmenu/Deagle/Colt.mdl",
	"models/exodus_skinmenu/Deagle/Dragon.mdl",
	"models/exodus_skinmenu/Deagle/Egyed.mdl",
	"models/exodus_skinmenu/Deagle/Famosas.mdl",
	"models/exodus_skinmenu/Deagle/Fantazi.mdl",
	"models/exodus_skinmenu/Deagle/Galaxy.mdl",
	"models/exodus_skinmenu/Deagle/Gold.mdl"
};
new const m_AWP[][] =
{
	"models/exodus_skinmenu/awp/Amerika.mdl",
	"models/exodus_skinmenu/awp/Arany.mdl",
	"models/exodus_skinmenu/awp/Camon.mdl",
	"models/exodus_skinmenu/awp/Galaxy.mdl",
	"models/exodus_skinmenu/awp/Gyik.mdl",
	"models/exodus_skinmenu/awp/Ice.mdl",
	"models/exodus_skinmenu/awp/Joker.mdl",
	"models/exodus_skinmenu/awp/Katona.mdl",
	"models/exodus_skinmenu/awp/Laser.mdl",
	"models/exodus_skinmenu/awp/Monster.mdl"
};
new const m_KNIFE[][] =
{
	"models/exodus_skinmenu/knife/Adidas.mdl",
	"models/exodus_skinmenu/knife/Atom.mdl",
	"models/exodus_skinmenu/knife/Black.mdl",
	"models/exodus_skinmenu/knife/Bot.mdl",
	"models/exodus_skinmenu/knife/Color.mdl",
	"models/exodus_skinmenu/knife/Dragon.mdl",
	"models/exodus_skinmenu/knife/Gold.mdl",
	"models/exodus_skinmenu/knife/Jungel.mdl",
	"models/exodus_skinmenu/knife/Megatron.mdl",
	"models/exodus_skinmenu/knife/Natural.mdl"
};
public m_Addolas(id)
{
	if(get_user_flags(id) & ADMIN)
	{
		for(new i;i < MAX; i++)
		t_OSkin[i][id] += 1;
		ColorChat(id, GREEN, "%s^1Megkaptál minden skint!", Chat_Prefix);
	}
	else
	{
		ColorChat(id, GREEN, "%s^1Nincs jogod ehhez a parancshoz", Chat_Prefix);
	}
}
public m_Fomenu(id)
{
new cim[121];
format(cim, charsmax(cim), "[%s] \r~ \dFőmenü^n\dKövetkező Drop: [\r%d\d/%dÖlés]", Prefix, Oles[0][id], Drop[0][0]);
new menu = menu_create(cim, "h_Fomenu");

menu_additem(menu, "Felszerelések", "1", 0);
menu_additem(menu, "Beállitások", "2", 0);
format(cim, charsmax(cim), "Random Skin \d[\r%d\d/25Ölés]^n^n\d%s", Oles[1][id], Website);
menu_additem(menu, cim, "3", 0);

menu_display(id, menu, 0);
}

public h_Fomenu(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: m_Felszereles(id);
		case 2: m_Skinbeallitas(id);
		case 3:
		{
			if(Oles[1][id] >= 15)
			{
				m_RandomDrop(id);
			}
			else
			{
				ColorChat(id, GREEN, "%s^1Nincs meg a szükséges 15 ölésed", Chat_Prefix);
			}
		}
	}
}
public m_Felszereles(id)
{
new String[121];
formatex(String, charsmax(String), "[%s] \r~ \dFelszerelés", Prefix);
new menu = menu_create(String, "h_Felszereles");

	for(new i;i < sizeof(c_Fegyverek); i++)
	{
		if(t_OSkin[i][id] > 0)
		{
			new Sor[6]; num_to_str(i, Sor, 5);
			formatex(String, charsmax(String), "%s \d[\r%d \dDB]", c_Fegyverek[i][0], t_OSkin[i][id]);
			menu_additem(menu, String, Sor);
		}
	}
	
menu_display(id, menu, 0);
}

public h_Felszereles(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 0..9: t_Skin[0][id] = key;
		case 10..19: t_Skin[1][id] = key-9;
		case 20..29: t_Skin[2][id] = key-19;
		case 30..39: t_Skin[3][id] = key-29;
		case 40..49: t_Skin[4][id] = key-39;
	}
}

public m_Halal()
{
new Gyilkos = read_data(1);
new Aldozat = read_data(2);

if(Gyilkos == Aldozat)
return PLUGIN_HANDLED;

for(new i;i < 2; i++)
Oles[i][Gyilkos] ++;

m_Halal_Ellenorzes(Gyilkos);
return PLUGIN_HANDLED;
}
public m_Halal_Ellenorzes(id)
{
new FegyverID = random_num(0, MAX)

	if(Oles[0][id] >= Drop[0][0])
	{
		t_OSkin[FegyverID][id]++;
		Oles[0][id] = 0;
		ColorChat(id, GREEN, "%s^1Találtál egy ^4%s^1-t.", Chat_Prefix, c_Fegyverek[FegyverID]);
	}
}
public m_Skinbeallitas(id)
{
new cim[121];
format(cim, charsmax(cim), "[%s] \r~ \dBeállítások", Prefix);
new menu = menu_create(cim, "Skinbeallitas_h");
	
menu_additem(menu, Beallitasok[id] == 1 ? "Skin: \rBekapcsolva \y| \wKikapcsolva":"Skin: \wBekapcsolva \y| \rKikapcsolva", "1",0);
	
menu_display(id, menu, 0);
}
public Skinbeallitas_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(Beallitasok[id] == 1)
			{
				Beallitasok[id] = 0;
			}
			else 
			{
				Beallitasok[id] = 1;
			}
			m_Skinbeallitas(id);
		}
	}
}
public plugin_precache()
{
	for(new i;i < sizeof(m_AK47); i++)
	{
		precache_model(m_AK47[i]);
	}
	for(new i;i < sizeof(m_M4A1); i++)
	{
		precache_model(m_M4A1[i]);
	}
	for(new i;i < sizeof(m_DEAGLE); i++)
	{
		precache_model(m_DEAGLE[i]);
	}
	for(new i;i < sizeof(m_AWP); i++)
	{
		precache_model(m_AWP[i]);
	}
	for(new i;i < sizeof(m_KNIFE); i++)
	{
		precache_model(m_KNIFE[i]);
	}
}
public m_CurWeapon(id)
{
    if(Beallitasok[id] == 0)
        return;
 
    new beallitasok = get_user_weapon(id);

	for(new i;i < sizeof(m_AK47); i++)
	{
		if(t_Skin[0][id] == 1 + i && beallitasok == CSW_AK47)
		{
			set_pev(id, pev_viewmodel2, m_AK47[i]);
		}
	}
	for(new i;i < sizeof(m_M4A1); i++)
	{
		if(t_Skin[1][id] == 1 + i && beallitasok == CSW_M4A1)
		{
			set_pev(id, pev_viewmodel2, m_M4A1[i]);
		}
	}
	for(new i;i < sizeof(m_DEAGLE); i++)
	{
		if(t_Skin[2][id] == 1 + i && beallitasok == CSW_DEAGLE)
		{
			set_pev(id, pev_viewmodel2, m_DEAGLE[i]);
		}
	}
	for(new i;i < sizeof(m_AWP); i++)
	{
		if(t_Skin[3][id] == 1 + i && beallitasok == CSW_AWP)
		{
			set_pev(id, pev_viewmodel2, m_AWP[i]);
		}
	}
	for(new i;i < sizeof(m_KNIFE); i++)
	{
		if(t_Skin[4][id] == 1 + i && beallitasok == CSW_KNIFE)
		{
			set_pev(id, pev_viewmodel2, m_KNIFE[i]);
		}
	}
}
public m_RandomDrop(id)
{
new FegyverID = random_num(0, MAX)

t_OSkin[FegyverID][id]++;
Oles[1][id] -= 25;
ColorChat(id, GREEN, "%s^1Random Drop: ^4%s^1.", Chat_Prefix, c_Fegyverek[FegyverID]);
}
public client_disconnect(id)
{
if(!is_user_bot(id))
{
	sql_update_user(id);
}
for(new i;i < 2; i++)
Oles[i][id] = 0;

for(new i;i < MAX; i++)
t_OSkin[i][id] = 0;

for(new i;i < 5; i++)
t_Skin[i][id] = 0;

copy(name[id], charsmax(name[]), "");
}
public client_putinserver(id)
{
	if(!is_user_bot(id)) 
	{
		get_user_name(id, name[id], charsmax(name));
		sql_load_user(id);
	}
}
public sql_create_table()
{
g_SqlTuple = SQL_MakeDbTuple(SQLINFO[0], SQLINFO[1], SQLINFO[2], SQLINFO[3]);

static Query[10048];
new Len;

Len += formatex(Query[Len], charsmax(Query), "CREATE TABLE IF NOT EXISTS `skin_menu_1.0`");
Len += formatex(Query[Len], charsmax(Query)-Len, "(`Nev` varchar(32) NOT NULL, ");

for(new i;i < MAX; i++)
Len += formatex(Query[Len], charsmax(Query)-Len, "`IT_%d` int(11) NOT NULL,", i);

for(new i;i < 2; i++)
Len += formatex(Query[Len], charsmax(Query)-Len, "`Kill_%d` int(11) NOT NULL,", i);

for(new i;i < 5; i++)
Len += formatex(Query[Len], charsmax(Query)-Len, "`SK_%d` int(11) NOT NULL,", i);

Len += formatex(Query[Len], charsmax(Query)-Len, "`id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY)");

SQL_ThreadQuery(g_SqlTuple, "createTableThread", Query);
}

public sql_load_user(id) 
{
static Query[10048];
new Data[1];
Data[0] = id;

formatex(Query, charsmax(Query), "SELECT * FROM `skin_menu_1.0` WHERE Nev = ^"%s^";", name[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 < 2; i++)
		{
			new String[64];
			formatex(String, charsmax(String), "Kill_%d", i);
			Oles[i][id] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, String));
		}
		
		for(new i;i < MAX; i++)
		{
			new String[64];
			formatex(String, charsmax(String), "IT_%d", i);
			t_OSkin[i][id] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, String));
		}
	
		for(new i;i < 5; i++)
		{
			new String[64];
			formatex(String, charsmax(String), "SK%d", i);
			t_Skin[i][id] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, String));
		}
	}
	else
	{
		sql_save_user(id);
	}
	}
}
public sql_save_user(id)
{
static Query[256];
 
formatex(Query, charsmax(Query), "INSERT INTO `skin_menu_1.0` (`Nev`) VALUES (^"%s^");", name[id]);
SQL_ThreadQuery(g_SqlTuple, "QuerySetData", Query);
}
public sql_update_user(id)
{
static Query[10048];
new Len;

Len += formatex(Query[Len], charsmax(Query), "UPDATE `skin_menu_1.0` SET Kill_1 = ^"%i^", ",Oles[0][id]);

for(new i;i < MAX; i++)
Len += formatex(Query[Len], charsmax(Query)-Len, "IT_%d = ^"%i^", ", i, t_OSkin[i][id]);

for(new i;i < 5; i++)
Len += formatex(Query[Len], charsmax(Query)-Len, "SK_%d = ^"%i^", ", i, t_Skin[i][id]);

Len += formatex(Query[Len], charsmax(Query)-Len, "Kill_0 = ^"%i^" WHERE Nev = ^"%s^";", Oles[1][id], name[id]);

SQL_ThreadQuery(g_SqlTuple, "QuerySetData", Query);
}
public createTableThread(FailState, Handle:Query, Error[], Errcode, Data[], DataSize, Float:Queuetime)
{
	if(FailState == TQUERY_CONNECT_FAILED)
	set_fail_state("[HIBA*] NEM TUDTAM CSATLAKOZNI AZ ADATBAZISHOZ!");
	else if(FailState == TQUERY_QUERY_FAILED)
	set_fail_state("Query Error");
	if(Errcode)
	log_amx("[HIBA*] HIBAT DOBTAM: %s",Error);
}
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 plugin_end()
{
	SQL_FreeHandle(g_SqlTuple);
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1038\\ f0\\ fs16 \n\\ par }
*/
