PHP Code:
#include <amxmodx>
#include <hamsandwich>
#include <zombieplague>
#include <cstrike>
#include <fakemeta_util>
new cvar_knife_kb, cvar_knife_kb_enable
public plugin_init()
{
register_plugin("[ZP] knife knock-back", "1.0", "Dyaus")
cvar_knife_kb_enable = register_cvar("zp_kb_enable", "1")
cvar_knife_kb = register_cvar("zp_kb_val", "6.0")
RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
}
public fw_TakeDamage(victim, inflictor, attacker, Float:damage, _type)
{
if(!is_user_connected(attacker))
return HAM_IGNORED
if(zp_get_user_zombie(attacker))
return HAM_IGNORED
if(get_pcvar_num(cvar_knife_kb_enable) == 1)
{
if(get_user_weapon(attacker) == CSW_KNIFE)
{
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(cvar_knife_kb)
vec[1] += oldvelo[1] + 0
set_pev(victim, pev_velocity, vec)
}
}
return HAM_IGNORED
}
stock create_velocity_vector(victim,attacker,Float:velocity[3])
{
if(!zp_get_user_zombie(victim) || !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 (get_user_weapon(attacker) == CSW_KNIFE)
{
velocity[0] = ( origin2[0] * get_pcvar_float(cvar_knife_kb) * 10000 ) / floatround(get_distance_f(vicorigin, attorigin));
velocity[1] = ( origin2[1] * get_pcvar_float(cvar_knife_kb) * 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;
}
this is not tested !! try it and tell me