#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <colorchat>
#include <csstats>
#include <fakemeta> 
#include <cstrike>
#include <fun>
#include <sqlx>
#include <dhudmessage>

#define PLUGIN "Kés rendszer"
#define VERSION "2.3.7"
#define AUTHOR "~BoNe" //Ne írd átt köszi.

//Kellék Részleg*

#pragma tabsize 0

new message[192]
new nev[32]
new Temp[192]
static color[10]
new szint[33]
new oles[33]
new knife_model[33]
new name[33][32]

#define ASD 15
#define TULAJ ADMIN_IMMUNITY
#define FOADMIN ADMIN_LEVEL_F
#define ADMIN ADMIN_LEVEL_G
#define VIP ADMIN_LEVEL_H

//============Chat Prefix Részleg*================//
new const chatPrefix[] = "[-*[Információ]*-]";
new const menuPrefix[] = "[Kés Rendszer]";
//Elérhetőség: https://www.facebook.com/kevin.katona.92

//SQL Részleg*

new const SQL_INFO[][] = {
    "db.synhosting.eu",    // Kiszolgáló
    "Smoke49944",     // Felhasználó
    "asd123",     // Jelszó
    "Smoke49944"      // AdatBázis
} 

new Handle:g_SqlTuple;

//FegyverNév Részleg*
new const FegyverNev[][] =
{
	"Aqua Kés",
         "Bob Kés ",
         "Heineken Kés",
         "Emir Kés", 
         "Smart Kés"
};

//Fegyverek Skin Részleg*
new const m_Knife[][] =
{
	"models/paintball/v_knife1.mdl",
	"models/paintball/v_knife2.mdl",
	"models/paintball/v_knife3.mdl",
	"models/paintball/v_knife4.mdl",
	"models/paintball/v_knife5.mdl"
	
};
public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	register_impulse(201,"fomenu"); //Főmenü Előhivás
	register_clcmd("say /rang", "hud") //Rang Lekérdezés
	set_task(90.0, "hirdess", 2000, _, _, "b"); //Hirdetés
	register_event("CurWeapon", "fegyverid", "be", "1=1"); //Fegyver Váltás	
	register_event("DeathMsg", "Halal", "a"); //Halál
	set_task(0.0, "InfoHud",_,_,_,"b");
	register_clcmd("say", "sayhook");
	
}
new const szamok[ASD] = {
     10,
     20,
     40,
     60,
     80,
     100,
     150,
     200,
     220,
     250,
     300,
     320,
     340,
     380,
     400
 
}
 
new const rangok[ASD+1][] = {
   "|Jatekos||Szint:1|",
   "|Pawa||Szint:2|",
   "|Bena||Szint:3|",
   "|Pawa||Szint:4|",
   "|Tud valamit||Szint:5|",
   "|Bartosista||Szint:6|",
   "|Bolond||Szint:7|",
   "|Jomunkasember||Szint:8|",
   "|Nagyur||Szint:9|",
   "|Felisten||Szint:10|",
   "|Bolond||Szint:11|",
   "|Veteran||Szint:12|",
   "|Szimpatikus||Szint:13|",
   "|Szep||Szint:14]",
   "|ISTEN||Szint:15|",
   "|Legyozhetetlen||Szint:16 MAX|"
}	
public plugin_precache()
{
	// Skinek Lekérése Részleg *
	for(new i;i < sizeof(m_Knife); i++)
	{
	precache_model(m_Knife[i]);
	}
}
public fegyverid(id)
{
	new weapon = get_user_weapon(id)
	for(new i;i < sizeof(m_Knife); i++)

	if(knife_model[id] == 1 && weapon == CSW_KNIFE) 
	{
		set_pev(id, pev_viewmodel2, "models/paintball/v_knife1.mdl")
         } 
	if(knife_model[id] == 2 && weapon == CSW_KNIFE) 
	{
		set_pev(id, pev_viewmodel2, "models/paintball/v_knife2.mdl")
         }
	if(knife_model[id] == 3 && weapon == CSW_KNIFE) 
	{
		set_pev(id, pev_viewmodel2, "models/paintball/v_knife3.mdl")
         }
	if(knife_model[id] == 4 && weapon == CSW_KNIFE) 
	{
		set_pev(id, pev_viewmodel2, "models/paintball/v_knife4.mdl")
         }
	if(knife_model[id] == 5 && weapon == CSW_KNIFE) 
	{
		set_pev(id, pev_viewmodel2, "models/paintball/v_knife5.mdl")
         } 
}
public hirdess(id)
{
         ColorChat(0, GREEN, "^3%s^1Szerveren ^3~BoNe ^2Által Készitet ^3Mód Futt!", chatPrefix);
}
public InfoHud(id)
{
	set_hudmessage(random(255), random(255), random(255), 0.01, 0.15, 0, 6.0, 1.1, 0.0, -1)
    	show_hudmessage(id, "^nÖléseid: [%i]", oles[id])
}
public fomenu(id)
{
	new String[121];
	format(String, charsmax(String), " %s^n\dÖléseid: [%d]", menuPrefix[id], oles[id]);
	new menu = menu_create(String, "fomenu_h");
	
	menu_additem(menu, "\y[\rKés Skin\y]", "1", 0);
	menu_additem(menu, "\y[\rVip Vásárlás\y]", "2", 0);
	menu_additem(menu, "\y[\rSzerver Információ\y]", "3", 0);
	menu_additem(menu, "\y[\rTop 15\y]", "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], Nev[32];
        get_user_name(id, Nev, 31);
        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: knifeskin(id);
		case 3: show_motd(id, "addons/amxmodx/configs/serverinfo.txt", "TGF");
		case 4: client_cmd(id,"say /top15");
	}
}
public knifeskin(id)
{
	 new String[96]
          format(String, charsmax(String), "\w%s \dÖlések: [%d]", menuPrefix, oles[id])
          new menu = menu_create(String, "knifeskin_h" )
	
	 formatex(String, charsmax(String), oles[id] >= 10 ? ("\y Aqua Kés \r[Megszerezve]"):("\d Aqua Kés \r[10 Ölés]"), oles[id], 10);
          menu_additem(menu, String, "1");
	 formatex(String, charsmax(String), oles[id] >= 35 ? ("\y Bob Kés \r[Megszerezve]"):("\d Bob Kés \r[35 Ölés]"), oles[id], 35);
          menu_additem(menu, String, "2");
	 formatex(String, charsmax(String), oles[id] >= 65 ? ("\y Heineken Kés \r[Megszerezve]"):("\d Heineken Kés \r[65 Ölés]"), oles[id], 65);
          menu_additem(menu, String, "3");
	 formatex(String, charsmax(String), oles[id] >= 100 ? ("\y Emir Kés \r[Megszerezve]"):("\d Emir Kés \r[100 Ölés]"), oles[id], 100);
          menu_additem(menu, String, "4");
	 formatex(String, charsmax(String), oles[id] >= 150 ? ("\y Smart Kés \r[Megszerezve]"):("\d Smart Kés \r[150 Ölés]"), oles[id], 150);
          menu_additem(menu, String, "5");
	

	 menu_display(id, menu, 0);
}
public knifeskin_h(id, menu, item)
{
	if(item == MENU_EXIT)
{
         menu_destroy(menu);
         return;
         }
 
        new data[9], szName[64], Nev[32];
        get_user_name(id, Nev, 31);
        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(oles[id] >= 10)
		{
			knife_model[id] = 1
			ColorChat(0, GREEN, "^3%s ^2Sikeresen ki választotad az Aqua ^4Kés-t", chatPrefix);
                   }
	         else 			
		 {
		 	ColorChat(0, GREEN, "^3%s Nem tudod ki választani az Aqua ^4Kés-t mert nincs meg %d Ölésed", chatPrefix, 10-oles[id]);
	                }
		}
	        case 2:{
	        if(oles[id] >= 35)
	         {
		knife_model[id] = 2	
		ColorChat(0, GREEN, "^3%s ^2Sikeresen ki választotad a Bob ^4Kés-t", chatPrefix);
	         }
		else
		{
	          ColorChat(0, GREEN, "^3%s Nem tudod ki választani a Bob ^4Kés-t mert nincs meg %d Ölésed", chatPrefix, 35-oles[id]);
		       }
		    }
		 case 3:{
		 	if(oles[id] >= 65)
			{
				knife_model[id] = 3
				ColorChat(0, GREEN, "^3%s ^2Sikeresen ki választotad az Heineken ^4Kés-t", chatPrefix);
			}
			else
			{
				ColorChat(0, GREEN, "^3%s Nem tudod ki választani az Heineken ^4Kés-t mert nincs meg %d Ölésed", chatPrefix, 65-oles[id]);
		            }
			}
			case 4:{
				if(oles[id] >= 100)
			{
				knife_model[id] = 4
				ColorChat(0, GREEN, "^3%s ^2Sikeresen ki választotad az Emir ^4Kés-t", chatPrefix);
			}
			else
			{
				ColorChat(0, GREEN, "^3%s Nem tudod ki választani az Emir ^4Kés-t mert nincs meg %d Ölésed", chatPrefix, 100-oles[id]);
		            }
			}
			case 5:{
				if(oles[id] >= 150)
			{
				knife_model[id] = 5
				ColorChat(0, GREEN, "^3%s ^2Sikeresen ki választotad a Smart ^4Kés-t", chatPrefix);
			}
			else
			{
				ColorChat(0, GREEN, "^3%s Nem tudod ki választani a Smart ^4Kés-t mert nincs meg %d Ölésed", chatPrefix, 150-oles[id]);							 			    		 
                                     }                
                             }
	       }
}
public hud(id)
{
if(szint[id] != ASD+1)
{
 
 
ColorChat(id, RED, "Szint:^4%s ^1| ^3Olesek:^4%d ^1| ^3Kell meg:^4%d",rangok[szint[id]], oles[id],szamok[szint[id]]-oles[id] )
}
else {
 
ColorChat(id, GREEN, "Elerted a ^3Maximalis ^4Szintet.Gratulalunk.")
}
 
}
public sayhook(id)
{
 
read_args (message, 191)
remove_quotes (message)
if (message[0] == '@' || message[0] == '/' || message[0] == '!' || equal (message, ""))
{
return PLUGIN_CONTINUE
}
get_user_name(id, nev, 31)
if(is_user_alive(id)) {
get_user_team(id, color, 9)
 
}
sendmessage(color)
return PLUGIN_HANDLED
}
public tshook(id)
{
read_args (message, 191)
remove_quotes (message)
if (message[0] == '@' || message[0] == '/' || message[0] == '!' || equal (message, ""))
{
return PLUGIN_CONTINUE
}
get_user_name(id, nev, 31)
new playerTeam = get_user_team(id)
new playerTeamName[19]
switch (playerTeam)
{
case 1: {
copy (playerTeamName, 11, "*T*")
 
}
case 2: {
copy (playerTeamName, 18, "*CT*")
 
}
default:
copy (playerTeamName, 9, "*Nező*")
}
if(is_user_alive(id))
{
get_user_team(id, color, 9)
if(get_user_flags(id) & TULAJ)
formatex(Temp, 191, "^x04[TULAJDONOS]%s ^x03%s^x04: %s", rangok[szint[id]], nev, message)
else if(get_user_flags(id) & FOADMIN)
formatex(Temp, 191, "^x04[Konfigos]%s ^x03%s^x04: %s", rangok[szint[id]], nev, message)
else if(get_user_flags(id) & ADMIN)
formatex(Temp, 191, "^x04[Admin]%s ^x03%s^x04: %s", rangok[szint[id]], nev, message)
else if(get_user_flags(id) & VIP)
formatex(Temp, 191, "^x04[V.I.P]%s ^x03%s^x04: %s", rangok[szint[id]], nev, message)
 
else formatex(Temp, 191, "^x04*Halott*%s ^x03%s^x01: %s", rangok[szint[id]], nev, message)
 
}
else {
get_user_team(id, color, 9)
if(get_user_flags(id) & TULAJ)
formatex(Temp, 191, "^x04[TULAJDONOS]%s ^x03%s^x04: %s", rangok[szint[id]], nev, message)
else if(get_user_flags(id) & FOADMIN)
formatex(Temp, 191, "^x04[Konfigos]%s ^x03%s^x04: %s", rangok[szint[id]], nev, message)
else if(get_user_flags(id) & ADMIN)
formatex(Temp, 191, "^x04[Admin]%s ^x03%s^x04: %s", rangok[szint[id]], nev, message)
else if(get_user_flags(id) & VIP)
formatex(Temp, 191, "^x04[V.I.P]%s ^x03%s^x04: %s", rangok[szint[id]], nev, message)
 
else formatex(Temp, 191, "^x04*Halott %s ^x03%s^x01: %s", rangok[szint[id]], nev, message)
}
sendtmessage(color, playerTeam)
return PLUGIN_HANDLED
}
public sendmessage(color[])
{
new teamName[10]
for(new player = 1; player < get_maxplayers(); player++)
{
get_user_team (player, teamName, 9)
teamf (player, color)
elkuldes(player, Temp)
teamf(player, teamName)
}
}
public sendtmessage(color[], playerTeam)
{
new teamName[10]
for (new player = 1; player < get_maxplayers(); player++)
{
if(get_user_team(player) == playerTeam)
{
get_user_team (player, teamName, 9)
elkuldes(player, Temp)
teamf (player, teamName)
teamf (player, color)
}
}
}
public teamf(player, team[])
{
message_begin(MSG_ONE, get_user_msgid("TeamInfo"), _, player)
write_byte(player)
write_string(team)
message_end()
}
public elkuldes(player, Temp[])
{
 
message_begin( MSG_ONE, get_user_msgid( "SayText" ), _, player)
write_byte( player )
write_string( Temp )
message_end()
 
}
public halal()
{
new killer = read_data(1)
new victim = read_data(2)
 
if(killer != victim)
oles[killer]++
 
while(oles[killer] >= szamok[szint[killer]])
{
szint[killer]++
}
}

public plugin_cfg() {
    new Query[512];
    g_SqlTuple = SQL_MakeDbTuple(SQL_INFO[0],SQL_INFO[1],SQL_INFO[2],SQL_INFO[3])
 
    formatex(Query, charsmax(Query), "CREATE TABLE IF NOT EXISTS `BoNeMod` (`username` varchar(32) NOT NULL,`oles` int(11) NOT NULL,`szint` int(11) NOT NULL,`id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY)")
    SQL_ThreadQuery(g_SqlTuple,"createTableThread", Query)
}
 
public createTableThread(FailState, Handle:Query, Error[], Errcode, Data[], DataSize, Float:Queuetime) {
    if(FailState == TQUERY_CONNECT_FAILED)
        set_fail_state("Nem tudtam csatlakozni az adatbazishoz.");
    else if(FailState == TQUERY_QUERY_FAILED)
        set_fail_state("Query Error");
    if(Errcode)
        log_amx("Hibat dobtam: %s",Error);
}
public client_putinserver(id) {
    if(!is_user_bot(id)) {
    get_user_name(id, name[id], charsmax(name))
    load(id)
   }
}

public load(id) {
    new Query[512], Data[1]
    Data[0] = id
    formatex(Query, charsmax(Query), "SELECT * FROM `BoNeMod` WHERE username = ^"%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) {
            oles[id] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "oles"))
	   szint[id] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "szint"))
        }
        else {
            save(id)
        }
    }
}
 
public save(id) {
    new text[512];
    formatex(text, charsmax(text), "INSERT INTO `BoNeMod` (`username`, `oles`) VALUES (^"%s^", ^"0^");", name[id])
    SQL_ThreadQuery(g_SqlTuple, "QuerySetData", text)
}
 
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 update(id) {
    new text[512];
    formatex(text, charsmax(text), "UPDATE `BoNeMod` SET oles = ^"%i^", SET szint = ^"%i^" WHERE username = ^"%s^";", oles[id], szint[id], name[id])
    SQL_ThreadQuery(g_SqlTuple, "QuerySetData", text)
}

public client_disconnect(id) {
    if(!is_user_bot(id)) {
        update(id)
    }
    oles[id] = 0
    szint[id] = 0
    copy(name[id], charsmax(name[]), "")
}
 
public plugin_end() {
    SQL_FreeHandle(g_SqlTuple)
}

