#include <amxmodx>
#include <cstrike>
#include <fun>
#include <hamsandwich>
#include <fakemeta>
#pragma tabsize 0
#define VIP_LEVEL ADMIN_CVAR //flagu pt vip
#define is_user(%1) (1 <= %1 <= maxPlayers)
new maxPlayers;
//pentru zero-knife
#define FFADE_IN 0x0000
#define FFADE_STAYOUT 0x0004
#define BREAK_GLASS 0x01
#define UNIT_SECOND (1<<12)
#define MAX_CLIENTS 32
#define KNIFE_SOUND_FROST "freeze/impalehit.wav"
#define KNIFE_SOUND_BREAK "freeze/impalelaunch1.wav"
#define KNIFE_FROST_DURATION 3.0
new Ham:Ham_Player_ResetMaxSpeed = Ham_Item_PreFrame
new g_iFrozen [ MAX_CLIENTS + 1 ]
new g_glassSpr
//end
new dmg_knife,knockback_knife1,knockback_knife2
new are_cutit[33]
public plugin_init()
{
register_plugin("Meniu Knife VIP", "1.0", "D3luxe")
register_clcmd("say /vipknifes", "cutitevip")
//cvaruri
dmg_knife = register_cvar( "vip_dmgknife", "2" )
knockback_knife1 = register_cvar("vip_impingeknife1", "2.0")
knockback_knife2 = register_cvar("vip_impingeknife2", "3.2")
//eventuri
register_event("CurWeapon", "SchimbamSkinurile", "be", "1=1")
//ham
RegisterHam(Ham_TakeDamage, "player", "PentruDmg")
maxPlayers = get_maxplayers();
}
public plugin_precache()
{
precache_sound(KNIFE_SOUND_FROST)
precache_sound(KNIFE_SOUND_BREAK)
//first knife
precache_model("models/cutite_vip/v_thor.mdl")
precache_model("models/cutite_vip/p_thor.mdl")
//al 2-lea
precache_model("models/cutite_vip/v_zero.mdl")
precache_model("models/cutite_vip/p_zero.mdl")
//al 3-lea
precache_model("models/cutite_vip/v_zeus.mdl")
precache_model("models/cutite_vip/p_zeus.mdl")
//al 4-lea
precache_model("models/cutite_vip/v_assasin.mdl")
precache_model("models/cutite_vip/p_assasin.mdl")
g_glassSpr = engfunc(EngFunc_PrecacheModel, "models/glassgibs.mdl")
}
public SchimbamSkinurile(player)
{
if(!is_user_alive(player))
return PLUGIN_CONTINUE
if(read_data(2) == CSW_KNIFE && are_cutit[player] == 1)
{
set_pev(player, pev_viewmodel2, "models/cutite_vip/v_thor.mdl")
set_pev(player, pev_weaponmodel2, "models/cutite_vip/p_thor.mdl")
}
if(read_data(2) == CSW_KNIFE && are_cutit[player] == 2)
{
set_pev(player, pev_viewmodel2, "models/cutite_vip/v_zeus.mdl")
set_pev(player, pev_weaponmodel2, "models/cutite_vip/p_zeus.mdl")
}
if(read_data(2) == CSW_KNIFE && are_cutit[player] == 3)
{
set_pev(player, pev_viewmodel2, "models/cutite_vip/v_zero.mdl")
set_pev(player, pev_weaponmodel2, "models/cutite_vip/p_zero.mdl")
}
if(read_data(2) == CSW_KNIFE && are_cutit[player] == 4)
{
set_pev(player, pev_viewmodel2, "models/cutite_vip/v_assasin.mdl")
set_pev(player, pev_weaponmodel2, "models/cutite_vip/p_assasin.mdl")
set_user_rendering(player, kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 10 )
}
return PLUGIN_CONTINUE
}
public PentruDmg(victim, inflicator, attacker, Float:damage, damage_type)
{
if (!is_user(attacker) || !is_user(victim))
return;
if (get_user_team(attacker) == get_user_team(victim))
return;
if (!(get_user_flags(attacker) & VIP_LEVEL))
return;
if(get_user_weapon(attacker) == CSW_KNIFE)
{
if(pev(attacker, pev_button) & IN_ATTACK && are_cutit[attacker] == 1)
{
user_slap(victim,0,0)
user_slap(victim,0,0)
user_slap(victim,0,0)
user_slap(victim,0,0)
SetHamParamFloat(4, damage = 15.0)
}
else if(pev(attacker, pev_button) & IN_ATTACK2 && are_cutit[attacker] == 1)
{
user_slap(victim,0,0)
user_slap(victim,0,0)
user_slap(victim,0,0)
user_slap(victim,0,0)
user_slap(victim,0,0)
user_slap(victim,0,0)
SetHamParamFloat(4, damage = 25.0)
}
if(pev(attacker, pev_button) & IN_ATTACK && are_cutit[attacker] == 2)
{
SetHamParamFloat(4, damage = 25.0)
new Float:vec[3];
new Float:oldvelo[3];
pev(victim, pev_velocity, oldvelo);
create_velocity_vector(victim , attacker , vec);
vec[0] += oldvelo[0] + get_pcvar_float(knockback_knife1);
vec[1] += oldvelo[1] + 0;
set_pev(victim, pev_velocity, vec);
}
else if(pev(attacker, pev_button) & IN_ATTACK2 && are_cutit[attacker] == 2)
{
SetHamParamFloat(4, damage = 30.0)
new Float:vec[3];
new Float:oldvelo[3];
pev(victim, pev_velocity, oldvelo);
create_velocity_vector(victim , attacker , vec);
vec[0] += oldvelo[0] + get_pcvar_float(knockback_knife2);
vec[1] += oldvelo[1] + 0;
set_pev(victim, pev_velocity, vec);
}
if(pev(attacker, pev_button) & IN_ATTACK && are_cutit[attacker] == 3)
{
frost_process( victim )
SetHamParamFloat(4, damage = 15.0)
}
else if(pev(attacker, pev_button) & IN_ATTACK2 && are_cutit[attacker] == 3)
{
frost_process( victim )
SetHamParamFloat(4, damage = 25.0)
}
if(pev(attacker, pev_button) & IN_ATTACK && are_cutit[attacker] == 4)
{
SetHamParamFloat(4, damage *get_pcvar_float( dmg_knife))
}
else if(pev(attacker, pev_button) & IN_ATTACK2 && are_cutit[attacker] == 4)
{
SetHamParamFloat(4, damage *get_pcvar_float( dmg_knife))
}
}
}
//pentru frost knife
public frost_process(pevVictim)
{
fm_set_rendering(pevVictim, kRenderFxGlowShell, 0, 100, 200, kRenderNormal, 50)
emit_sound(pevVictim, CHAN_BODY, KNIFE_SOUND_FROST, 1.0, ATTN_NORM, 0, PITCH_NORM)
message_begin(MSG_ONE, get_user_msgid("ScreenFade"), _, pevVictim)
write_short(0)
write_short(0)
write_short(FFADE_STAYOUT)
write_byte(0)
write_byte(50)
write_byte(200)
write_byte(100)
message_end()
g_iFrozen[pevVictim] = true
set_task(KNIFE_FROST_DURATION, "remove_freeze", pevVictim)
}
public remove_freeze(pevVictim)
{
if(!is_user_alive(pevVictim) || !g_iFrozen[pevVictim])
return;
g_iFrozen[pevVictim] = false
fm_set_rendering(pevVictim)
ExecuteHamB ( Ham_Player_ResetMaxSpeed, pevVictim)
message_begin(MSG_ONE, get_user_msgid("ScreenFade"), _, pevVictim)
write_short(UNIT_SECOND)
write_short(0)
write_short(FFADE_IN)
write_byte(0)
write_byte(50)
write_byte(200)
write_byte(100)
message_end()
emit_sound(pevVictim, CHAN_BODY, KNIFE_SOUND_BREAK, 1.0, ATTN_NORM, 0, PITCH_NORM)
static origin2[3]
get_user_origin(pevVictim, origin2)
message_begin(MSG_PVS, SVC_TEMPENTITY, origin2)
write_byte(TE_BREAKMODEL)
write_coord(origin2[0])
write_coord(origin2[1])
write_coord(origin2[2] + 24)
write_coord(16)
write_coord(16)
write_coord(16)
write_coord(random_num(-50, 50))
write_coord(random_num(-50, 50))
write_coord(25)
write_byte(10)
write_short(g_glassSpr)
write_byte(10)
write_byte(25)
write_byte(BREAK_GLASS)
message_end()
}
//end cu zer0-knife
public cutitevip(id)
{
if(!(get_user_flags(id) & VIP_LEVEL))
{
ChatColor(id, "!g[VIP] !yNu poti accesa !teamMENIUL de Knife-uri VIP !y deoarece nu esti VIP!")
return PLUGIN_HANDLED
}
if(!is_user_alive(id))
{
ChatColor(id, "!g[VIP] !yNu poti accesa !teamMENIUL!y deoarece esti mort !")
return PLUGIN_HANDLED
}
new szText[ 555 char ];
formatex( szText, charsmax( szText ), "Meniu Knfe-uri VIP :");
new menu = menu_create( szText, "cutite_handler" );
menu_additem(menu, "\rThor \wKnife \y[arunca victima]", "1", 0);
menu_additem(menu, "\rZeus \wKnife \y[impinge victima]", "2", 0);
menu_additem(menu, "\rSub-Zero \wKnife \y[ingheata victima]", "3", 0);
menu_additem(menu, "\rAssasin \wKnife \y[2xDmg si invizibilitate]", "4", 0);
menu_setprop( menu, MPROP_EXITNAME, "Exit")
menu_display( id, menu, 0);
return PLUGIN_CONTINUE;
}
public cutite_handler(id, menu, item, client)
{
if(item == MENU_EXIT || !is_user_alive(id))
{
menu_destroy(menu)
return PLUGIN_HANDLED
}
static data[6], name[64], acs, cllbck, key
menu_item_getinfo(menu, item, acs, data, 5, name, 63, cllbck)
key = str_to_num(data)
switch(key)
{
case 1:
{
if(is_user_alive(id))
{
if(get_user_flags(id) & VIP_LEVEL)
{
engclient_cmd(id, "weapon_knife")
set_pev(id, pev_viewmodel2, "models/cutite_vip/v_thor.mdl")
set_pev(id, pev_weaponmodel2, "models/cutite_vip/p_thor.mdl")
are_cutit[id] = 1
ChatColor(id, "!g[VIP] !yAi ales !teamThor Knife !")
}else{
ChatColor(id, "!g[VIP] !yNu esti !teamVIP.")
}
}else{
ChatColor(id, "!g[VIP] !yNu poti accesa !teamMeniul Vip-Knife !ydeoarece esti MORT!")
}
}
case 2:
{
if(is_user_alive(id))
{
if(get_user_flags(id) & VIP_LEVEL)
{
engclient_cmd(id, "weapon_knife")
set_pev(id, pev_viewmodel2, "models/cutite_vip/v_zeus.mdl")
set_pev(id, pev_weaponmodel2, "models/cutite_vip/p_zeus.mdl")
are_cutit[id] = 2
ChatColor(id, "!g[VIP] !yAi ales !teamZeus Knife !")
}else{
ChatColor(id, "!g[VIP] !yNu esti !teamVIP.")
}
}else{
ChatColor(id, "!g[VIP] !yNu poti accesa !teamMeniul Vip-Knife !ydeoarece esti MORT!")
}
}
case 3:
{
if(is_user_alive(id))
{
if(get_user_flags(id) & VIP_LEVEL)
{
engclient_cmd(id, "weapon_knife")
set_pev(id, pev_viewmodel2, "models/cutite_vip/v_zero.mdl")
set_pev(id, pev_weaponmodel2, "models/cutite_vip/p_zero.mdl")
are_cutit[id] = 3
ChatColor(id, "!g[VIP] !yAi ales !teamSub-Zero Knife !")
}else{
ChatColor(id, "!g[VIP] !yNu esti !teamVIP.")
}
}else{
ChatColor(id, "!g[VIP] !yNu poti accesa !teamMeniul Vip-Knife !ydeoarece esti MORT!")
}
}
case 4:
{
if(is_user_alive(id))
{
if(get_user_flags(id) & VIP_LEVEL)
{
engclient_cmd(id, "weapon_knife")
set_pev(id, pev_viewmodel2, "models/cutite_vip/v_assasin.mdl")
set_pev(id, pev_weaponmodel2, "models/cutite_vip/p_assasin.mdl")
are_cutit[id] = 4
ChatColor(id, "!g[VIP] !yAi ales !teamAssasin Knife !")
}else{
ChatColor(id, "!g[VIP] !yNu esti !teamVIP.")
}
}else{
ChatColor(id, "!g[VIP] !yNu poti accesa !teamMeniul Vip-Knife !ydeoarece esti MORT!")
}
}
}
menu_destroy(menu)
return PLUGIN_HANDLED
}
//stock-uri
stock create_velocity_vector(victim,attacker,Float:velocity[3])
{
if(!(get_user_flags(attacker) & VIP_LEVEL) || !is_user_alive(attacker))
return 0;
new Float:vicorigin[3];
new Float:attorigin[3];
pev(victim, pev_origin , vicorigin);
pev(attacker, pev_origin , attorigin);
new Float:origin2[3]
origin2[0] = vicorigin[0] - attorigin[0];
origin2[1] = vicorigin[1] - attorigin[1];
new Float:largestnum = 0.0;
if(floatabs(origin2[0])>largestnum) largestnum = floatabs(origin2[0]);
if(floatabs(origin2[1])>largestnum) largestnum = floatabs(origin2[1]);
origin2[0] /= largestnum;
origin2[1] /= largestnum;
if ( pev(attacker, pev_button) & IN_ATTACK2 && are_cutit[attacker] == 2 )
{
velocity[0] = ( origin2[0] * get_pcvar_float(knockback_knife1) * 10000 ) / floatround(get_distance_f(vicorigin, attorigin));
velocity[1] = ( origin2[1] * get_pcvar_float(knockback_knife1) * 10000 ) / floatround(get_distance_f(vicorigin, attorigin));
}else if(pev(attacker, pev_button) & IN_ATTACK2 && are_cutit[attacker] == 2)
{
velocity[0] = ( origin2[0] * get_pcvar_float(knockback_knife2) * 10000 ) / floatround(get_distance_f(vicorigin, attorigin));
velocity[1] = ( origin2[1] * get_pcvar_float(knockback_knife2) * 10000 ) / floatround(get_distance_f(vicorigin, attorigin));
}
if(velocity[0] <= 20.0 || velocity[1] <= 20.0)
velocity[2] = random_float(200.0 , 275.0);
return 1;
}
stock ChatColor(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, "!team", "^3")
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();
}
}
}
}
stock fm_set_rendering(entity, fx = kRenderFxNone, r = 255, g = 255, b = 255, render = kRenderNormal, amount = 16)
{
static Float:color[3]
color[0] = float(r)
color[1] = float(g)
color[2] = float(b)
set_pev(entity, pev_renderfx, fx)
set_pev(entity, pev_rendercolor, color)
set_pev(entity, pev_rendermode, render)
set_pev(entity, pev_renderamt, float(amount))
}