#include <amxmodx>
#include <hamsandwich>
#include <fun>
#include <fakemeta>
#include <colorchat>
 
#define PLUGIN "Knife Menu"
#define VERSION "2.0"
#define AUTHOR "DeRoiD"
 
new FajlUt[] = "addons/amxmodx/configs/kesmenu/kesek.ini"
 
new KesNeve[128], Kes[33], Float:KesDmg[33], KesRegeneracio[33], Float:RegeneracioIdo[33]
new KesNeveValaszt[20][64]
new cvar_KesReg, cvar_KesRegIdo, cvar_KesGomb
 
public plugin_precache() {
	new Fajl[256]
	format(Fajl, charsmax(Fajl), FajlUt)
	if(file_exists(Fajl))
	{
		new KesBuff[256], Sor, SorBuff[32]
		new vKesMdlOlvas[64], vKesMdl[64]
		new pKesMdlOlvas[64], pKesMdl[64]
		for(new i; i < file_size(Fajl, 1) ; i++)
		{
			read_file(Fajl, i, KesBuff, 63, Sor)
			format(SorBuff, 1, "%s", KesBuff)
			if(equal(SorBuff, ";"))
				continue 
			parse(KesBuff, vKesMdlOlvas, 63, pKesMdlOlvas, 63)
			remove_quotes(vKesMdlOlvas)
			remove_quotes(pKesMdlOlvas)
			format(vKesMdl, charsmax(vKesMdl), "models/%s.mdl", vKesMdlOlvas)
			format(pKesMdl, charsmax(pKesMdl), "models/%s.mdl", pKesMdlOlvas)
			if(!equal(vKesMdl, "models/.mdl") && !equal(pKesMdl, "models/.mdl"))
			{
				precache_model(vKesMdl)
				precache_model(pKesMdl)
			}
			else if(!equal(vKesMdl, "models/.mdl"))
			{
				precache_model(vKesMdl)
			}
			else if(!equal(pKesMdl, "models/.mdl"))
			{
				precache_model(pKesMdl)
			}
		}
	}
}
public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	register_dictionary("kesmenu.txt")
	register_clcmd("say /knife", "KesMenu")
	register_clcmd("say /kes", "KesMenu")
    register_clcmd("say /knifemenu", "KesMenu")
	register_clcmd("say /skin", "KesMenu")
	register_clcmd("drop", "KesMenuGomb")
 
	set_task(120.0, "KesMenuUzenet", 0, _, _, "b")
	register_event("CurWeapon","KesModel","be","1=1")
 
	RegisterHam(Ham_Player_PreThink, "player", "RegThink")
	RegisterHam(Ham_TakeDamage, "player", "KesSebzes", 0)
 
	cvar_KesReg = register_cvar("KesReg", "5")
	cvar_KesGomb = register_cvar("KesGomb", "0")
	cvar_KesRegIdo = register_cvar("KesRegIdo", "5.0")
}
public KesMenuUzenet() {
	client_print(0, print_chat, "%L", LANG_PLAYER, "UZENET", KesNeve)
}
public KesSebzes(victim, inflictor, attacker, Float:damage)
{	
	if(is_user_alive(attacker) && is_user_alive(victim))
	{
		new Fegyver = get_user_weapon(attacker)
		if(Fegyver == CSW_KNIFE)
		SetHamParamFloat(4, damage * KesDmg[attacker])
	}
}
public KesMenuGomb(id) {
	if(get_pcvar_num(cvar_KesGomb) == 1){
		KesMenu(id)
		return PLUGIN_HANDLED
	}
	else
	{
		return PLUGIN_CONTINUE
	}
	return PLUGIN_HANDLED
}
public RegThink(id)
{
	new Fegyver = get_user_weapon(id)
	if(get_gametime() > RegeneracioIdo[id] && Fegyver == CSW_KNIFE
	&& KesRegeneracio[id] == 1 && get_user_health(id) < 100)
	{
		RegeneracioIdo[id] = get_gametime() + get_pcvar_float(cvar_KesRegIdo)
		if(get_user_health(id) > 100-get_pcvar_num(cvar_KesReg))
		set_user_health(id, 100)
		else
		set_user_health(id, get_user_health(id)+get_pcvar_num(cvar_KesReg))
		message_begin(MSG_ONE, get_user_msgid("ScreenFade"), {0,0,0}, id)
		write_short(1<<10)
		write_short(1<<10)
		write_short(0x0000)
		write_byte(10)
		write_byte(200)
		write_byte(10)
		write_byte(75)
		message_end()
	}
}
public KesKepessegNullazas(id) {
	KesRegeneracio[id] = 0
	set_user_maxspeed(id, 250.0)
	set_user_gravity(id, 1.0)
	KesDmg[id] = 1.0
	set_user_footsteps(id, 0)
}
public KesModel(id) {
	new Fegyver = get_user_weapon(id)
 
	if(!is_user_alive(id) || !is_user_connected(id) || Fegyver != CSW_KNIFE)
	{
		KesKepessegNullazas(id)
		return
	}
 
	new Fajl[256]
	format(Fajl, charsmax(Fajl), FajlUt)
	if(file_exists(Fajl))
	{
		new KesBuff[256], Sor, Szam
		new vKesMdlOlvas[256], vKesMdl[256]
		new pKesMdlOlvas[256], pKesMdl[256]
		new StringKesMod[256], KesMod, StringKesFloat[64], Float:KesFloat
		for(new i; i < file_size(Fajl, 1) ; i++)
		{
			Szam++
			read_file(Fajl, i, KesBuff, 256, Sor)
			parse(KesBuff, vKesMdlOlvas, 256, pKesMdlOlvas, 256, KesNeve, 256, StringKesMod,
			256, StringKesFloat, 256)
			KesMod = str_to_num(StringKesMod)
			if(!equal(StringKesFloat, ""))
			KesFloat = str_to_float(StringKesFloat)
			log_amx("dmg: %3.2f", KesFloat)
			remove_quotes(vKesMdlOlvas)
			remove_quotes(pKesMdlOlvas)
			format(vKesMdl, charsmax(vKesMdl), "models/%s.mdl", vKesMdlOlvas)
			if(!equal(pKesMdlOlvas, ""))
			format(pKesMdl, charsmax(pKesMdl), "models/%s.mdl", pKesMdlOlvas)
			if(Kes[id] == Szam){				
				if(KesMod == 1){
					set_user_gravity(id, KesFloat)
					KesRegeneracio[id] = 0
					set_user_maxspeed(id, 250.0)
					KesDmg[id] = 1.0
					set_user_footsteps(id, 0)
				}
				else if(KesMod == 2){
					set_user_maxspeed(id, KesFloat)
					KesRegeneracio[id] = 0
					set_user_gravity(id, 1.0)
					KesDmg[id] = 1.0
					set_user_footsteps(id, 0)
				}
				else if(KesMod == 3){
					KesDmg[id] = KesFloat
					KesRegeneracio[id] = 0
					set_user_maxspeed(id, 250.0)
					set_user_gravity(id, 1.0)
					set_user_footsteps(id, 0)
				}
				else if(KesMod == 4){
					set_user_footsteps(id, 1)
					KesRegeneracio[id] = 0
					set_user_maxspeed(id, 250.0)
					set_user_gravity(id, 1.0)
					KesDmg[id] = 1.0
				}
				else if(KesMod == 5){
					KesRegeneracio[id] = 1
					set_user_maxspeed(id, 250.0)
					set_user_gravity(id, 1.0)
					KesDmg[id] = 1.0
					set_user_footsteps(id, 0)
				}
				else
				{
					KesKepessegNullazas(id)
				}
				set_pev(id, pev_viewmodel2, vKesMdl)
				if(!equal(pKesMdlOlvas, ""))
				set_pev(id, pev_weaponmodel2, pKesMdl)
			}
		}
	}
}
public KesMenu(id) {
	new Fajl[256]
	format(Fajl, charsmax(Fajl), FajlUt)
	if(file_exists(Fajl))
	{
		new KesString[256]
		format(KesString, 255, "[*W-T-F* #2] Kés skin menü")
		new menu = menu_create(KesString, "KesMenuValasztas")
		new KesBuff[256], Sor, Szam, SorBuff[32]
		new KesMenuPont, StringKesMenuPont[32]
		for(new i; i < file_size(Fajl, 1) ; i++)
		{
			KesMenuPont++
			Szam++
			new vKesMdl[64], pKesMdl[64]
			read_file(Fajl, i, KesBuff, 255, Sor)
			format(SorBuff, 1, "%s", KesBuff)
			if(equal(SorBuff, ";"))
				continue 
			parse(KesBuff, vKesMdl, 63, pKesMdl, 63, KesNeve, 63)
			format(KesString, sizeof(KesString) - 1, KesNeve)
			replace_all(KesNeve, 127, "[f]", "\w")
			replace_all(KesNeve, 127, "[s]", "\y")
			replace_all(KesNeve, 127, "[sz]", "\d")
			replace_all(KesNeve, 127, "[p]", "\r")  
			format(StringKesMenuPont, charsmax(StringKesMenuPont), "%d", KesMenuPont)
			menu_additem(menu, KesNeve, StringKesMenuPont)
			format(KesNeveValaszt[Szam], 63, "%s", KesNeve)
		}
		menu_display(id, menu)
	}
}
public KesMenuValasztas(id, menu, item){
	if(item == MENU_EXIT)
	{
		menu_destroy(menu)
		return
	}
	new data[9], name[64], eKes = Kes[id]
	new access, callback
	menu_item_getinfo(menu, item, access, data,charsmax(data),
	name, charsmax(name), callback)
 
	Kes[id] = str_to_num(data)
 
	if(eKes != Kes[id])
		KesModel(id)
 
	replace_all(KesNeveValaszt[Kes[id]], 63, "\w", " ")
	replace_all(KesNeveValaszt[Kes[id]], 63, "\y", " ")
	replace_all(KesNeveValaszt[Kes[id]], 63, "\d", " ")
	replace_all(KesNeveValaszt[Kes[id]], 63, "\r", " ") 
 
	client_print(id, print_chat, "%L", LANG_PLAYER, "VALASZTAS", KesNeveValaszt[Kes[id]])
}
 stock print_color(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, "!y", "^1")
        replace_all(msg, 190, "!t", "^3")
        replace_all(msg, 190, "á", "á")
        replace_all(msg, 190, "é", "Ă©")
        replace_all(msg, 190, "í", "Ă")
        replace_all(msg, 190, "ó", "Ăł")
        replace_all(msg, 190, "ö", "ö")
        replace_all(msg, 190, "ő", "Ĺ‘")
        replace_all(msg, 190, "ú", "Ăş")
        replace_all(msg, 190, "ü", "ĂĽ")
        replace_all(msg, 190, "ű", "ű")
        replace_all(msg, 190, "Á", "Ă")
        replace_all(msg, 190, "É", "É")
        replace_all(msg, 190, "Í", "ĂŤ")
        replace_all(msg, 190, "Ó", "Ă“")
        replace_all(msg, 190, "Ö", "Ă–")
        replace_all(msg, 190, "Ő", "Ĺ")
        replace_all(msg, 190, "Ú", "Ăš")
        replace_all(msg, 190, "Ü", "Ăś")
        replace_all(msg, 190, "Ű", "Ű")        
 
        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
}