/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <hamsandwich>
#include <engine>
#include <codmod>

#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "DarkGL"

new bool:ma_perk[33]

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	cod_register_perk("Kreatyna", "Mozesz odbijac sie od scian za pomoca noza");
	
	RegisterHam(Ham_TraceAttack, "worldspawn", "fw_TraceAttack")
}

public cod_perk_enabled(id)
	ma_perk[id] = true;

public cod_perk_disabled(id)
	ma_perk[id] = false;

stock get_velocity_from_origin( ent, Float:fOrigin[3], Float:fSpeed, Float:fVelocity[3] )
{
    new Float:fEntOrigin[3];
    entity_get_vector( ent, EV_VEC_origin, fEntOrigin );

    // Velocity = Distance / Time

    new Float:fDistance[3];
    fDistance[0] = fEntOrigin[0] - fOrigin[0];
    fDistance[1] = fEntOrigin[1] - fOrigin[1];
    fDistance[2] = fEntOrigin[2] - fOrigin[2];

    new Float:fTime = ( vector_distance( fEntOrigin,fOrigin ) / fSpeed );

    fVelocity[0] = fDistance[0] / fTime;
    fVelocity[1] = fDistance[1] / fTime;
    fVelocity[2] = fDistance[2] / fTime;

    return ( fVelocity[0] && fVelocity[1] && fVelocity[2] );
}


// Sets velocity of an entity (ent) away from origin with speed (speed)

stock set_velocity_from_origin( ent, Float:fOrigin[3], Float:fSpeed )
{
    new Float:fVelocity[3];
    get_velocity_from_origin( ent, fOrigin, fSpeed, fVelocity )

    entity_set_vector( ent, EV_VEC_velocity, fVelocity );

    return ( 1 );
} 

public fw_TraceAttack(id, enemy, Float:damage, Float:direction[3], tracehandle, damagetype){
	if (!is_user_alive(enemy) || !ma_perk[enemy] || get_user_weapon(enemy) != CSW_KNIFE){
		return HAM_IGNORED
	}
	
	get_tr2(tracehandle,TR_vecEndPos,direction);
	
	set_velocity_from_origin(enemy,direction,500.0);
	return HAM_IGNORED
}
