#include <amxmodx>
#include <reapi>
#include <fakemeta>
#define PLUGIN "Visual Damage Information"
#define VERSION "1.0"
#define AUTHOR "Fatih ~ EjderYa"
new const Numbers_Model[] = "sprites/FarCry_numbers.spr"
new Numbers_Modelindex , Float:Max_Health[33]
public plugin_precache(){
Numbers_Modelindex = precache_model(Numbers_Model)
}
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
RegisterHookChain(RG_CBasePlayer_Killed, "CBasePlayer_Killed", 1);
RegisterHookChain(RG_CBasePlayer_TakeDamage, "CBasePlayer_TakeDamage", 0)
register_forward( FM_AddToFullPack, "fwdAddToFullPack_Post", 1 );
}
public CBasePlayer_Killed(id)
Max_Health[id] = 0.0
public client_putinserver(id)
Max_Health[id] = 0.0
public fwdAddToFullPack_Post( es, e, ent, host, host_flags, player, p_set )
if ( !is_nullent(ent) && get_entvar(ent,var_owner) == host )
set_es( es , ES_Scale , 0.1)
public CBasePlayer_TakeDamage(const victim, inflictor, const attacker, Float:damage)
{
if( victim == attacker || !rg_is_player_can_takedamage(victim, attacker) || !is_user_connected(attacker))
return HC_CONTINUE;
new MODEL_ent = rg_create_entity("env_sprite")
if(!is_nullent(MODEL_ent)){
new Float:Health
get_entvar(victim,var_health,Health)
if ( Health > Max_Health[victim] )
Max_Health[victim] = Health
damage = ( 100.0 * damage ) / Max_Health[victim]
new Float:Color[3] , Float:Velocity[3] , Float:Origin[3] , Float:height = 25 + ( random_num(0,3) * 7.0 )
Velocity[2] = 5.0
Velocity[1] = random_float(-4.0,4.0)
Velocity[0] = random_float(-4.0,4.0)
Color[0] = 255.0
Color[1] = floatround(damage) > 100 ? 0.0 : ((255.0 - ( floatround(damage) * 2.55 )) * ( 1.0 - (floatround(damage)/100.0) ) )
Color[2] = Color[1]
if ( damage > 100 )
damage = 101.0
get_entvar( victim , var_origin , Origin )
Origin[2] += height
set_entvar( MODEL_ent , var_owner , attacker)
set_entvar( MODEL_ent , var_model , Numbers_Model)
set_entvar( MODEL_ent , var_modelindex , Numbers_Modelindex)
set_entvar( MODEL_ent , var_rendermode , kRenderTransAdd)
set_entvar( MODEL_ent , var_movetype,MOVETYPE_NOCLIP)
set_entvar( MODEL_ent , var_renderamt , 300.0)
set_entvar( MODEL_ent , var_scale , 0.01)
set_entvar( MODEL_ent , var_rendercolor,Color)
set_entvar( MODEL_ent , var_velocity , Velocity )
set_entvar( MODEL_ent , var_origin , Origin )
set_entvar( MODEL_ent , var_frame , damage )
DecreaseSpeed(MODEL_ent)
SetThink(MODEL_ent, "ReducingTransparency")
ReducingTransparency( MODEL_ent )
}
return HC_CONTINUE;
}
public DecreaseSpeed(ent){
if ( !is_nullent(ent)){
new Float:Velocity[3]
get_entvar( ent , var_velocity ,Velocity )
Velocity[2] -= 1.0
set_entvar( ent , var_velocity ,Velocity )
set_task(1.0,"DecreaseSpeed",ent)
}
}
public ReducingTransparency(ent){
static Float:Renderamt
get_entvar( ent , var_renderamt ,Renderamt )
Renderamt -= 10.0
if ( Renderamt < 10 )
set_entvar( ent , var_flags , FL_KILLME ) , remove_task(ent)
else
{
set_entvar( ent , var_renderamt , Renderamt )
set_entvar(ent, var_nextthink, get_gametime( ) + 0.2)
}
}