#include <amxmodx>
#include <engine>
#include <nvault>
#include <cstrike>
#include <fun>
#include <fakemeta>
#include <hamsandwich>
#include <colorchat>


#define PLUGIN "USP Menu"
#define VERSION "1.0"
#define AUTHOR "DeRoiD"

new pont[33], usp[33], vault

public ecw(id)

{

new fegyver = get_user_weapon(id)

if(usp[id] == 0 && fegyver == CSW_USP)
{	
set_pev(id, pev_viewmodel2, "models/v_usp.mdl")
}
if(usp[id] == 1 && fegyver == CSW_USP)
{
set_pev(id, pev_viewmodel2, "models/riotusp/v_1.mdl")	
}
if(usp[id] == 2 && fegyver == CSW_USP)
{
set_pev(id, pev_viewmodel2, "models/riotusp/v_2.mdl")
}
if(usp[id] == 3 && fegyver == CSW_USP)
{
set_pev(id, pev_viewmodel2, "models/riotusp/v_3.mdl")	
}
if(usp[id] == 4 && fegyver == CSW_USP)
{
set_pev(id, pev_viewmodel2, "models/riotusp/v_4.mdl")
}
if(usp[id] == 5 && fegyver == CSW_USP)
{
set_pev(id, pev_viewmodel2, "models/riotusp/v_5.mdl")
}
if(usp[id] == 6 && fegyver == CSW_USP)
{
set_pev(id, pev_viewmodel2, "models/riotusp/v_6.mdl")
}

}

public death(){

new killer = read_data(1)

new victim = read_data(2)



if(killer == victim)

{

return PLUGIN_HANDLED

}

pont[killer]++

return PLUGIN_HANDLED

}

public usp_menu(id) {

new cim[121]
format(cim, charsmax(cim), "\r[\w~RioT~\r] \wUSP Menü^n|\rPontszám\d[%d]",pont[id])
new menu = menu_create(cim, "uspmenu_h" )

menu_additem(menu,"\w[\y~RioT~\w]\r USP \w[1] \r| \y[Megszerezve]","1",0)

if(pont[id] >= 10)

menu_additem(menu,"\y[\w~RioT~\y]\r USP \w[2] \r| \y[Megszerezve] ","2",0)

else

menu_additem(menu,"\w[\y~RioT~\w]\r USP \w[2] \w| \r[10 pont]-[Lezárva]","2",0)

if(pont[id] >= 30)

menu_additem(menu,"\w[\y~RioT~\w]\r USP \w[3] \r| \y[Megszerezve] \y","3",0)

else

menu_additem(menu,"\y[\w~RioT~\y]\r USP \w[3] \w| \r[30 pont]-[Lezárva]","3",0)

if(pont[id] >= 75)

menu_additem(menu,"\w[\y~RioT~\w]\r USP \w[4] \r| \y[Megszerezve] \y","4",0)

else

menu_additem(menu,"\y[\w~RioT~\y]\r USP \w[4] \w| \r[50 pont]-[Lezárva]","4",0)

if(pont[id] >= 100)

menu_additem(menu,"\w[\y~RioT~\w]\r USP \w[5] \r| \y[Megszerezve] ","5",0)

else

menu_additem(menu,"\y[\w~RioT~\y]\r USP \w[5] \w| \r[100 pont]-[Lezárva]","5",0)

if(pont[id] >= 300)

menu_additem(menu,"\w[\y~RioT~\w]\r USP \w[6] \r| \y[Megszerezve] ","5",0)

else

menu_additem(menu,"\y[\w~RioT~\y]\r USP \w[6] \w| \r[200 pont]-[Lezárva]","5",0)

if(pont[id] >= 500)

menu_additem(menu,"\w[\y~RioT~\w]\r USP \w[7] \r| \y[Megszerezve] ","5",0)

else

menu_additem(menu,"\y[\w~RioT~\y]\r USP \w[7] \w| \r[500 pont]-[Lezárva]","5",0)



menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);

menu_display(id, menu, 0);

}

public uspmenu_h(id, menu, item)

{

if( item == MENU_EXIT )

{

menu_destroy(menu);

return PLUGIN_HANDLED;

}

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(pont[id] >= 0)

usp[id] = 0

else

ColorChat(id, GREEN, "^4[^1~RioT~^4]^1-^3USP^4 Menü » Ez alap USP, nem kell feloldanod!")

}

case 2:{

if(pont[id] >= 10)

usp[id] = 1

else

ColorChat(id, RED, "^4[^1~RioT~^4]^1-^3USP^4 Menü^4 *^3 Túl kevés pontod van!^4*")

}

case 3:{

if(pont[id] >= 30)

usp[id] = 2

else

ColorChat(id, RED, "^4[^1~RioT~^4]^1-^3USP^4 Menü^4 *^3 Túl kevés pontod van!^4*")
}
case 4:{

if(pont[id] >= 75)

usp[id] = 3

else

ColorChat(id, RED, "^4[^1~RioT~^4]^1-^3USP^4 Menü^4 *^3 Túl kevés pontod van!^4*")

}
case 5:{

if(pont[id] >= 100)

usp[id] = 4

else

ColorChat(id, RED, "^4[^1~RioT~^4]^1-^3USP^4 Menü^4 *^3 Túl kevés pontod van!^4*")

}
case 6:{

if(pont[id] >= 300)

usp[id] = 5

else

ColorChat(id, RED, "^4[^1~RioT~^4]^1-^3USP^4 Menü^4 *^3 Túl kevés pontod van!^4*")

}
case 7:{

if(pont[id] >= 500)

usp[id] = 6

else

ColorChat(id, RED, "^4[^1~RioT~^4]^1-^3USP^4 Menü^4 *^3 Túl kevés pontod van!^4*")

}

}

menu_destroy(menu)

return PLUGIN_HANDLED

}

public mentes(id)

{

new vaultkey[64],vaultdata[256], name[32]

get_user_name(id, name, 31)

format(vaultkey,63,"%s-KES", name)

format(vaultdata,255,"%d", pont[id])

nvault_set(vault,vaultkey,vaultdata)

return PLUGIN_CONTINUE

}

public betoltes(id)

{

new vaultkey[64],vaultdata[256], name[32]

get_user_name(id, name, 31)

format(vaultkey,63,"%s-KES", name)

nvault_get(vault,vaultkey,vaultdata,255)

pont[id] = str_to_num(vaultdata)

return PLUGIN_CONTINUE

}

public fomenu(id) {
new menu = menu_create("Deathrun menu", "fomenu_h")

menu_additem(menu, "Usp", "1",0)
menu_additem(menu, "Kesek", "2",0)

menu_display(id, menu)
}
public lada_h(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu)
}
new data[9], szName[64], access, callback
menu_item_getinfo(menu, item, access, data, charsmax(data), szName, charsmax(szName), callback)// nem kell irjad mindent mindig lehet masolni es :)
new key = str_to_num(data)
switch(key){
case 1: {
usp_menu(id)
}
case 2: {
display_knife(id)
}
}
}
#define TASK_INTERVAL 4.0  
#define MAX_HEALTH 255  

new knife_model[33] 
new g_Menu

new CVAR_HIGHSPEED
new CVAR_LOWSPEED
new CVAR_LOWGRAV
new CVAR_NORMGRAV
new CVAR_HEALTH_ADD
new CVAR_HEALTH_MAX
new CVAR_DAMAGE 

public plugin_init() { 

register_plugin(PLUGIN, VERSION, AUTHOR) 

register_event( "Damage", "event_damage", "be" )
register_event("CurWeapon","CurWeapon","be","1=1") 

g_Menu = register_menuid("Kes Mod")
register_menucmd(g_Menu, 1023, "knifemenu")

register_clcmd("say /knife", "display_knife")
register_clcmd("say /kes", "display_knife")
register_clcmd("say /usp", "usp_menu")
register_clcmd("say /menu", "fomenu")

register_clcmd("chooseteam","menu")
register_clcmd("say /skin","menu")

vault = nvault_open("ment_nvault")

register_event("CurWeapon", "ecw", "be", "1=1")

CVAR_HIGHSPEED = register_cvar("km_highspeed","340")
CVAR_LOWSPEED = register_cvar("km_lowspeed","170")
CVAR_HEALTH_ADD = register_cvar("km_addhealth", "3")
CVAR_HEALTH_MAX = register_cvar("km_maxhealth", "75")
CVAR_DAMAGE = register_cvar("km_damage", "2")
CVAR_LOWGRAV = register_cvar("km_lowgravity" , "400")
CVAR_NORMGRAV = get_cvar_pointer("sv_gravity")

set_task(480.0, "kmodmsg", 0, _, _, "b")
}

public plugin_precache() { 
precache_model("models/riotkes/v_gravity.mdl") 
precache_model("models/riotkes/p_butcher.mdl") 
precache_model("models/riotkes/v_machete.mdl")
precache_model("models/riotkes/p_machete.mdl")
precache_model("models/riotkes/v_bak.mdl")
precache_model("models/riotkes/p_bak.mdl")
precache_model("models/riotkes/v_gyors.mdl")
precache_model("models/riotkes/p_pocket.mdl")
precache_model("models/riotkes/v_defi.mdl") 
precache_model("models/p_knife.mdl")
precache_model("models/v_usp.mdl")
precache_model("models/riotusp/v_1.mdl")
precache_model("models/riotusp/v_2.mdl")
precache_model("models/riotusp/v_3.mdl")
precache_model("models/riotusp/v_4.mdl")
precache_model("models/riotusp/v_5.mdl")
precache_model("models/riotusp/v_6.mdl")
} 

public display_knife(id) {
new menuBody[512]
add(menuBody, 511, "\wKés\y Menü\w^n^n")
add(menuBody, 511, "1. Machete \y|Több sebzés/\wKisebb sebesség|^n")
add(menuBody, 511, "2. Lopakodó \y|Nincs trappolás|\w^n")
add(menuBody, 511, "3. Gyors kés \y|Gyorsaság|\w^n")
add(menuBody, 511, "4. Gravity \y|Kisebb Gravitáció|\w^n")
add(menuBody, 511, "5. Alap Kés \y|Regenerálódás|\w^n^n")
add(menuBody, 511, "0. Kilépés^n")

new keys = ( 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<9 )
show_menu(id, keys, menuBody, -1, "Kés Menü")
}

public knifemenu(id, key) {
switch(key) 
{
case 0: SetKnife(id , 4)
case 1: SetKnife(id , 2)
case 2: SetKnife(id , 3)
case 3: SetKnife(id , 1)
case 4: SetKnife(id , 0)
default: return PLUGIN_HANDLED
}
SaveData(id)
return PLUGIN_HANDLED
} 

public SetKnife(id , Knife) {
knife_model[id] = Knife

new Clip, Ammo, Weapon = get_user_weapon(id, Clip, Ammo) 
if ( Weapon != CSW_KNIFE )
return PLUGIN_HANDLED

new vModel[56],pModel[56]

switch(Knife)
{
case 0: {
format(vModel,55,"models/riotkes/v_defi.mdl")
format(pModel,55,"models/p_knife.mdl")
}
case 1: {
format(vModel,55,"models/riotkes/v_gravity.mdl")
format(pModel,55,"models/riotkes/p_butcher.mdl")
}
case 2: {
format(vModel,55,"models/riotkes/v_bak.mdl")
format(pModel,55,"models/riotkes/p_bak.mdl")
}
case 3: {
format(vModel,55,"models/riotkes/v_gyors.mdl")
format(pModel,55,"models/riotkes/p_pocket.mdl")
}
case 4: {
format(vModel,55,"models/riotkes/v_machete.mdl")
format(pModel,55,"models/riotkes/p_machete.mdl")
}
} 

entity_set_string(id, EV_SZ_viewmodel, vModel)
entity_set_string(id, EV_SZ_weaponmodel, pModel)

return PLUGIN_HANDLED;  
}

public event_damage( id ) {

new victim_id = id;
if( !is_user_connected( victim_id ) ) return PLUGIN_CONTINUE
new dmg_take = read_data( 2 );
new dmgtype = read_data( 3 );
new Float:multiplier = get_pcvar_float(CVAR_DAMAGE);
new Float:damage = dmg_take * multiplier;
new health = get_user_health( victim_id );

new iWeapID, attacker_id = get_user_attacker( victim_id, iWeapID );

if( !is_user_connected( attacker_id ) || !is_user_alive( victim_id ) ) {
return PLUGIN_HANDLED
}

if( iWeapID == CSW_KNIFE && knife_model[attacker_id] == 4 ) {

if( floatround(damage) >= health ) {
if( victim_id == attacker_id ) {
return PLUGIN_CONTINUE
}else{
log_kill( attacker_id, victim_id, "knife", 0 );
}

return PLUGIN_CONTINUE
}else {
if( victim_id == attacker_id ) return PLUGIN_CONTINUE

fakedamage( victim_id, "weapon_knife", damage, dmgtype );
}
}
return PLUGIN_CONTINUE
}

public CurWeapon(id)
{
new Weapon = read_data(2)

// Set Knife Model
SetKnife(id, knife_model[id])   

// Task Options

if(knife_model[id] == 0 && !task_exists(id) && Weapon == CSW_KNIFE)
set_task(TASK_INTERVAL , "task_healing",id,_,_,"b")
else if(task_exists(id))
remove_task(id)

// Abilities
set_user_footsteps(id , ( (knife_model[id] == 2 && Weapon == CSW_KNIFE) ? 1 : 0) )

new Float:Gravity = ((knife_model[id] == 1 && Weapon == CSW_KNIFE)? get_pcvar_float(CVAR_LOWGRAV) : get_pcvar_float(CVAR_NORMGRAV)) / 800.0
set_user_gravity(id , Gravity)

// Speed
new Float:Speed
if(Weapon != CSW_KNIFE || knife_model[id] < 3)
return PLUGIN_CONTINUE
else if(knife_model[id] == 3)
Speed = get_pcvar_float(CVAR_HIGHSPEED)
else if(knife_model[id] == 4)
Speed = get_pcvar_float(CVAR_LOWSPEED)

set_user_maxspeed(id, Speed)

return PLUGIN_HANDLED   

}

stock log_kill(killer, victim, weapon[],headshot) {
user_silentkill( victim );

message_begin( MSG_ALL, get_user_msgid( "DeathMsg" ), {0,0,0}, 0 );
write_byte( killer );
write_byte( victim );
write_byte( headshot );
write_string( weapon );
message_end();

new kfrags = get_user_frags( killer );
set_user_frags( killer, kfrags++ );
new vfrags = get_user_frags( victim );
set_user_frags( victim, vfrags++ );

return  PLUGIN_CONTINUE
} 


public task_healing(id) {  
new addhealth = get_pcvar_num(CVAR_HEALTH_ADD)  
if (!addhealth)
return  

new maxhealth = get_pcvar_num(CVAR_HEALTH_MAX)  
if (maxhealth > MAX_HEALTH) { 
set_pcvar_num(CVAR_HEALTH_MAX, MAX_HEALTH)  
maxhealth = MAX_HEALTH 
}  

new health = get_user_health(id)   

if (is_user_alive(id) && (health < maxhealth)) { 
set_user_health(id, health + addhealth)
set_hudmessage(0, 255, 0, -1.0, 0.25, 0, 1.0, 2.0, 0.1, 0.1, 4)
show_hudmessage(id,"<< !!ELET TOLTODES!! >>")
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(0)
write_byte(200)
write_byte(0)
write_byte(75)
message_end()
}

else {
if (is_user_alive(id) && (health > maxhealth))
remove_task(id)
}
}  

public client_disconnect(id) {  
if(task_exists(id)) remove_task(id)  
mentes(id)
}  

public client_authorized(id)
{
LoadData(id)
betoltes(id)
}

SaveData(id)
{ 

new authid[32]
get_user_authid(id, authid, 31)

new vaultkey[64]
new vaultdata[64]

format(vaultkey, 63, "KMOD_%s", authid)
format(vaultdata, 63, "%d", knife_model[id])
set_vaultdata(vaultkey, vaultdata)
}

LoadData(id) 
{ 
new authid[32] 
get_user_authid(id,authid,31)

new vaultkey[64], vaultdata[64]

format(vaultkey, 63, "KMOD_%s", authid)
get_vaultdata(vaultkey, vaultdata, 63)
knife_model[id] = str_to_num(vaultdata)

} 
