Quote:
Originally Posted by Krtola
Tell me if this work.
PHP Code:
#include <amxmodx> #include <amxmisc> #include <fakemeta> #include <hamsandwich> #include <xs> #include <cstrike> #include <engine> #include <fun>
#define VERSION "1.0"
new cvar_knock_force
public plugin_init() { register_plugin("Knife Stab KB", VERSION, "Krtola") RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack_Post", 1) cvar_knock_force = register_cvar("knife_force", "10"); }
public fw_TraceAttack_Post(victim_id, attacker_id, Float: damage, Float: direction[3], trace, damagebits) { if(get_user_weapon(attacker_id) == CSW_KNIFE) { static buttons buttons = pev(attacker_id, pev_button) if(buttons & IN_ATTACK2) { new Float:vec[3]; new Float:oldvelo[3]; get_user_velocity(victim_id, oldvelo); create_velocity_vector(victim_id , attacker_id , vec); vec[0] += oldvelo[0]; vec[1] += oldvelo[1]; set_user_velocity(victim_id , vec); } } }
// Stock by the one and only, Chronic :P stock create_velocity_vector(victim,attacker,Float:velocity[3]) { if(!is_user_alive(victim) || !is_user_alive(attacker)) return 0;
new Float:vicorigin[3]; new Float:attorigin[3]; entity_get_vector(victim , EV_VEC_origin , vicorigin); entity_get_vector(attacker , EV_VEC_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;
velocity[0] = ( origin2[0] * (get_pcvar_float(cvar_knock_force) * 3000) ) / get_entity_distance(victim , attacker); velocity[1] = ( origin2[1] * (get_pcvar_float(cvar_knock_force) * 3000) ) / get_entity_distance(victim , attacker); if(velocity[0] <= 20.0 || velocity[1] <= 20.0) velocity[2] = random_float(200.0 , 275.0);
return 1; }
|
it will work. i just saw that i put
buttons = pev(id, pev_button)
instead of
buttons = pev(attacker, pev_button)
was not working cuz was getting button of the victim not attacker.
EDIT: this plugin is not urs you know-)
EDIT2: no need of those extra includes nd params.
Code:
#include <amxmodx>
#include <hamsandwich>
#include <cstrike>
#include <fakemeta>
#include <engine>
#define VERSION "1.0"
new cvar_knock_force
public plugin_init()
{
register_plugin("Knife Stab KB", VERSION, "v3x & chronic/ edit tote")
RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack_Post", 1)
cvar_knock_force = register_cvar("knife_force", "10");
}
public fw_TraceAttack_Post(victim_id, attacker_id)
{
if(get_user_weapon(attacker_id) == CSW_KNIFE)
{
static buttons
buttons = pev(attacker_id, pev_button)
if(buttons & IN_ATTACK2)
{
new Float:vec[3];
new Float:oldvelo[3];
get_user_velocity(victim_id, oldvelo);
create_velocity_vector(victim_id , attacker_id , vec);
vec[0] += oldvelo[0];
vec[1] += oldvelo[1];
set_user_velocity(victim_id , vec);
}
}
}
// Stock by the one and only, Chronic :P
stock create_velocity_vector(victim,attacker,Float:velocity[3])
{
if(!is_user_alive(victim) || !is_user_alive(attacker))
return 0;
new Float:vicorigin[3];
new Float:attorigin[3];
entity_get_vector(victim , EV_VEC_origin , vicorigin);
entity_get_vector(attacker , EV_VEC_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;
velocity[0] = ( origin2[0] * (get_pcvar_float(cvar_knock_force) * 3000) ) / get_entity_distance(victim , attacker);
velocity[1] = ( origin2[1] * (get_pcvar_float(cvar_knock_force) * 3000) ) / get_entity_distance(victim , attacker);
if(velocity[0] <= 20.0 || velocity[1] <= 20.0)
velocity[2] = random_float(200.0 , 275.0);
return 1;
}