PHP Code:
#include <amxmodx>
#include <engine>
#include <hamsandwich>
#define is_valid_player(%1) (1 <= %1 <= 32)
#define DMG_HEGRENADE (1<<24)
new hegrenade_velocity_cvar
public plugin_init()
{
register_plugin("Hegrenade Velocity", "1.0", "Krtola")
RegisterHam(Ham_TakeDamage, "player", "Ham_hegrenade_velocity")
hegrenade_velocity_cvar = register_cvar("hegrenade_velocity", "600.0")
}
public Ham_hegrenade_velocity(victim, inflictor, attacker, Float:damage, damagetype)
{
if(!(damagetype & DMG_HEGRENADE) || !is_user_connected(victim) || !is_user_connected(attacker) || victim == attacker)
return HAM_IGNORED
if(is_valid_player(attacker))
{
SetHamParamFloat(4, damage * 0.0)
new Float:vec[3]
new Float:oldvelo[3]
get_user_velocity(victim, oldvelo)
create_velocity_vector(victim , attacker , vec)
vec[0] += oldvelo[0]
vec[1] += oldvelo[1]
set_user_velocity(victim , vec)
}
return HAM_HANDLED
}
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(hegrenade_velocity_cvar) * 3000)) / get_entity_distance(victim , attacker)
velocity[1] = ( origin2[1]*(get_pcvar_float(hegrenade_velocity_cvar) * 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
}