Code:
#include <amxmodx>
#include <cstrike>
#include <fakemeta>
#include <hamsandwich>
#define DAMAGE_COLOR_ENABLED // Comment out '//' if you need a standard damage dealer color.
#define NDAMAGE_SPRITE "sprites/new_damage.spr" // Path to sprite
#define NDAMAGE_REMOVE 1.0 // The sprite will be deleted after a certain period of time.
#define NDAMAGE_SIZE 0.30 // Sprite size (standard 0.30), less than 0.25 is not recommended!
#if defined DAMAGE_COLOR_ENABLED
new THUD_COLOR[] = {255, 0, 0};
new CTHUD_COLOR[] = {0, 0, 255};
new Float:SPRITE_TCOLOR[3] = {255.0, 0.0, 0.0};
new Float:SPRITE_CTCOLOR[3] = {0.0, 0.0, 255.0};
#endif
public plugin_init()
{
register_plugin("new_damage", "v0.01", "souledar");
RegisterHam(Ham_Think, "info_target", "fw_ThinkInfoTarget");
RegisterHam(Ham_TakeDamage, "player", "Ham_TakeDamage_Post", true);
}
public plugin_precache() engfunc(EngFunc_PrecacheModel, NDAMAGE_SPRITE);
public Ham_TakeDamage_Post(iVictim, iWeapon, iAttacker, Float:fDamage)
{
if (get_user_team(iVictim) == get_user_team(iAttacker)) return;
new iEnt = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
if (pev_valid(iEnt))
{
new Float:fOrigin[3];
pev(iVictim, pev_origin, fOrigin);
set_pev(iEnt, pev_classname, "func_damager");
set_pev(iEnt, pev_impulse, 11082018);
set_pev(iEnt, pev_movetype, MOVETYPE_FOLLOW);
set_pev(iEnt, pev_aiment, iVictim);
engfunc(EngFunc_SetModel, iEnt, NDAMAGE_SPRITE);
set_pev(iEnt, pev_scale, NDAMAGE_SIZE);
set_pev(iEnt, pev_rendermode, kRenderTransAdd);
#if defined DAMAGE_COLOR_ENABLED
if(cs_get_user_team(iAttacker) == CS_TEAM_T) set_pev(iEnt, pev_rendercolor, SPRITE_TCOLOR);
else if(cs_get_user_team(iAttacker) == CS_TEAM_CT) set_pev(iEnt, pev_rendercolor, SPRITE_CTCOLOR);
#else
new Float:standart_color[3] = {255.0, 255.0, 255.0};
set_pev(iEnt, pev_rendercolor, standart_color);
#endif
set_pev(iEnt, pev_renderamt, 255.0);
if (fDamage > 99.0) set_pev(iEnt, pev_frame, 0);
else set_pev(iEnt, pev_frame, fDamage);
set_pev(iEnt, pev_nextthink, get_gametime() + NDAMAGE_REMOVE);
}
if(iVictim == iAttacker || !is_user_alive(iAttacker) || !is_user_connected(iVictim)) return;
if(cs_get_user_team(iAttacker) == CS_TEAM_T)
{
#if defined DAMAGE_COLOR_ENABLED
set_hudmessage(THUD_COLOR[0], THUD_COLOR[1], THUD_COLOR[2], -1.0, -1.0, 0, 0.01, 0.05, 0.1);
#else
set_hudmessage(255, 255, 255, -1.0, -1.0, 0, 0.01, 0.05, 0.1);
#endif
}
else if (cs_get_user_team(iAttacker) == CS_TEAM_CT)
{
#if defined DAMAGE_COLOR_ENABLED
set_hudmessage(CTHUD_COLOR[0], CTHUD_COLOR[1], CTHUD_COLOR[2], -1.0, -1.0, 0, 0.01, 0.05, 0.1);
#else
set_hudmessage(255, 255, 255, -1.0, -1.0, 0, 0.01, 0.05, 0.1);
#endif
}
show_hudmessage(iAttacker, "\\ //^n^n// \\"); // Displaying a hit on a player.
}
public fw_ThinkInfoTarget(iEnt)
{
if (pev_valid(iEnt))
{
if (pev(iEnt, pev_impulse) == 11082018)
set_pev(iEnt, pev_flags, FL_KILLME);
}
}