Код:
/*
**| Rocket AT Crowbar |** VERSION: 2.5
Description:
This plugin make rocket at crowbar when player has ammo of rpg
Credits:
Thanks to lev for quick help in some wrong codes
Thanks to LetiLetiLepestok & KORD_12.7 for some code
tpc:
http://aghl.ru/forum/viewtopic.php?f=19&t=2525
*/
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <engine>
#include <hamsandwich>
#include <hl>
#include <xs>
#include <fakemeta_util>
#define PLUGIN "Rocket_AT_Crowbar"
#define VERSION "2.5"
#define AUTHOR "abdobiskra"
#define TE_DECAL 104
#define TE_SPRITE 17
#define SOUND_ROCKET_FLY "weapons/rocket1.wav"
#define SOUND_FIRE "weapons/rocketfire1.wav"
#define RC_W_NAME "weapon_rocketcrowbar"
#define RC_SPRITE_HUD_TXT "sprites/weapon_rocketcrowbar.txt"
#define RC_W_MODEL_ROCKET "models/v_rocketcrowbar.mdl"
#define RC_W_MODEL_DEFAULT "models/v_crowbar.mdl"
#define RC_SPRITE_TRAIL "sprites/smoke.spr"
new player_rockets[33];
new const
extraoffset_weapon = 4,
m_flNextSecondaryAttack = 36
new const
SPRITE_BLOOD[] = "sprites/blood.spr",
SPRITE_BLOOD2[] = "sprites/bloodspray.spr",
SPRITE_BEAM[] = "sprites/shockwave.spr",
SPRITE_EXPLOSION[] = "sprites/dexplo.spr"
new
g_Exlplosion[2],
m_iBlood[2],
decal,
//boom,
g_EntTrial,
g_CvarEnabled,
g_CvarRadius,
g_CvarDamage,
g_CvarVelocity,
g_CvarUnlimitAmmo,
g_CvarNextAttack,
g_CvarAimEnemy,
g_CvarScreenShake
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_crowbar", "Crowbar_SecondaryAttack_Post", 1 )
RegisterHam(Ham_Item_Deploy, "weapon_crowbar", "fw_Item_Deploy_Post", 1)
RegisterHam(Ham_Item_Holster, "weapon_crowbar", "fw_Item_Holster_Post", 1);
register_forward(FM_PlayerPreThink,"Fw_FmPlayerPostThinkPost", 1)
g_CvarEnabled = register_cvar( "rc_enabled", "1" );
g_CvarRadius = register_cvar( "rocket_radius", "300.0" );
g_CvarDamage = register_cvar( "rocket_damage", "50.0" );
g_CvarVelocity = register_cvar( "rocket_velocity_attack", "1500" );
g_CvarUnlimitAmmo = register_cvar( "endless_ammo_enabled", "0" );
g_CvarNextAttack = register_cvar( "next_fire_attack", "1.0" );
g_CvarAimEnemy = register_cvar( "rocket_Flow_Enemy", "1" );
g_CvarScreenShake = register_cvar( "rocket_ScreenShake_enable", "1" );
register_clcmd(RC_W_NAME, "RC_cmd");
register_think("rocket_crowbar", "rocket_think")
register_touch("*","rocket_crowbar","rocket_touch")
register_message(get_user_msgid("DeathMsg"), "Message_DeathMsg")
}
public Message_DeathMsg() {
static const nameWeapon[] = "rocket_crowbar"
static text[64]
new victim = get_msg_arg_int(2);
player_rockets[victim] = 1;
get_msg_arg_string(3, text, 63)
if (equal(text, nameWeapon))
{
set_msg_arg_string( 3, "crowbar" )
}
return PLUGIN_CONTINUE
}
public rocket_think(ent)
{
if(!pev_valid(ent) || get_pcvar_num( g_CvarAimEnemy ) != 1)
return
static victim, iOwner, Float:EnemyOrigin[3]
victim = enemy_distance(ent, 1)
iOwner = pev(ent, pev_owner)
pev(victim, pev_origin, EnemyOrigin)
if(is_user_alive(victim) && iOwner != victim)
{
if(entity_range(victim, ent) <= 290)
{
Aim_To(ent, EnemyOrigin, 2.0, 0)
set_pev(ent, pev_nextthink, get_gametime() + 0.4)
} else {
control_ai2(ent, EnemyOrigin, 600.0)
set_pev(ent, pev_nextthink, get_gametime() + 0.0)
return
}
}
set_pev(ent, pev_nextthink, get_gametime() + 0.4)
}
public rocket_touch(pTouched,Entity){
if(!is_valid_ent(Entity))
return
new killer = pev(Entity, pev_owner)
new Float:vOrigin[3]
pev(Entity,pev_origin,vOrigin)
new origin[3]
origin[0] = floatround(vOrigin[0])
origin[1] = floatround(vOrigin[1])
origin[2] = floatround(vOrigin[2])
new Float:explosion[3]
entity_get_vector(Entity, EV_VEC_origin, explosion)
new players[32], num, victim, origin_victim[3], distance
get_players(players,num,"ah")
for(new i = 0 ; i < num ; i++)
{
victim = players[i]
get_user_origin(victim,origin_victim)
distance = get_distance(origin,origin_victim)
static Float:damage, Float:radius;
radius = get_pcvar_float( g_CvarRadius )
damage = get_pcvar_float(g_CvarDamage)
HL_RadiusDamage(explosion,killer,damage, radius, Entity)
if(distance < 300)
{
pev(victim, pev_origin, vOrigin);
UTIL_MakeBlood(vOrigin, damage, victim);
if(get_pcvar_num(g_CvarScreenShake))
screenshake(victim)
}
}
create_explosion(explosion)
emit_sound(Entity, CHAN_VOICE, SOUND_ROCKET_FLY, 0.0, 0.0, SND_STOP, PITCH_NORM);
remove_entity(Entity);
}
public plugin_precache()
{
precache_model(RC_W_MODEL_DEFAULT)
precache_model(RC_W_MODEL_ROCKET)
precache_sound(SOUND_ROCKET_FLY);
precache_sound(SOUND_FIRE);
precache_generic(RC_SPRITE_HUD_TXT)
g_Exlplosion[0] = precache_model(SPRITE_EXPLOSION)
g_Exlplosion[1] = precache_model(SPRITE_BEAM)
g_EntTrial = precache_model(RC_SPRITE_TRAIL)
m_iBlood[0] = precache_model(SPRITE_BLOOD);
m_iBlood[1] = precache_model(SPRITE_BLOOD2);
decal = engfunc(EngFunc_DecalIndex,"{scorch3")
//boom = precache_model("sprites/zerogxplode.spr")
}
public client_connect(id)
{
player_rockets[id] = 1
}
public Fw_FmPlayerPostThinkPost(id) {
if(!is_user_alive(id) || get_pcvar_num( g_CvarEnabled ) != 1 )
{
return FMRES_IGNORED
}
new Ammo = player_rockets[id]
new Weapon = get_user_weapon(id);
new viewmodel[24], weaponmodel[24]
pev(id, pev_viewmodel2, viewmodel, 23)
pev(id, pev_weaponmodel2, weaponmodel, 23)
if(Ammo
&& Weapon == HLW_CROWBAR
&& containi(viewmodel, "crowbar") != -1
|| Ammo && Weapon == HLW_CROWBAR
&& containi(weaponmodel, "crowwbar") != -1)
{
set_pev(id, pev_weaponmodel2, RC_W_MODEL_ROCKET);
set_pev(id, pev_viewmodel2, RC_W_MODEL_ROCKET);
return FMRES_IGNORED
}else if(pev(id,pev_button) & IN_ATTACK2 && Weapon == HLW_CROWBAR && !Ammo){
set_pev(id, pev_weaponmodel2, RC_W_MODEL_DEFAULT);
set_pev(id, pev_viewmodel2, RC_W_MODEL_DEFAULT);
return FMRES_IGNORED
}
return FMRES_IGNORED
}
public Crowbar_SecondaryAttack_Post(const crowbar)
{
if(get_pcvar_num( g_CvarEnabled ) != 1 )
{
return HAM_IGNORED
}
new Id = pev(crowbar, pev_owner)
new Ent = create_entity("info_target")
new Ammo = player_rockets[Id]
if(!Ammo)
{
return HAM_SUPERCEDE
}
new Float:origin[3], Float:view_ofs[3], Float:angles[3], angles_fix[3], Float:velocity[3]
Ammo--
if(get_pcvar_num( g_CvarUnlimitAmmo ) == 1)
{
player_rockets[Id] = Ammo+1
}else{
player_rockets[Id] = Ammo
}
entity_set_string(Ent,EV_SZ_classname,"rocket_crowbar")
angles[0] -= 30
pev(Id, pev_origin, origin)
pev(Id, pev_view_ofs, view_ofs)
pev(Id, pev_v_angle, angles)
origin[0] += view_ofs[0]
origin[1] += view_ofs[1]
origin[2] += view_ofs[2]
angles_fix[0] += 360.0 - angles[0]
angles_fix[1] += angles[1]
angles_fix[2] += angles[2]
set_pev(Ent, pev_origin, origin)
set_pev(Ent, pev_angles, angles)
set_pev(Ent, pev_owner, Id)
set_pev(Ent, pev_view_ofs, view_ofs)
set_pev( Ent, pev_owner, Id );
set_pev(Ent, pev_gravity, 0.5 )
set_pev(Ent, pev_angles, angles_fix)
velocity_by_aim (Id, get_pcvar_num(g_CvarVelocity), velocity)
DispatchSpawn(Ent)
engfunc(EngFunc_SetModel, Ent, "models/rpgrocket.mdl")
emit_sound(Id, CHAN_WEAPON, SOUND_FIRE, 1.0, ATTN_NORM, 0, PITCH_NORM);
if(pev_valid(crowbar))
{
ExecuteHamB(Ham_Weapon_PrimaryAttack, crowbar)
UTIL_PlayWeaponAnimation (Id, 5)
}
set_pev(Ent, pev_mins,{ -0.1, -0.1, -0.1 })
set_pev(Ent, pev_maxs,{ 0.1, 0.1, 0.1 })
set_pev(Ent, pev_effects, pev(Ent, pev_effects) | EF_LIGHT)
set_pev( Ent, pev_velocity, velocity);
set_pev(Ent, pev_nextthink, get_gametime() + 0.4)
entity_set_int(Ent,EV_INT_movetype, MOVETYPE_FLY)
entity_set_int(Ent,EV_INT_solid, SOLID_BBOX)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
write_byte(TE_BEAMFOLLOW);
write_short(Ent); // entity
write_short(g_EntTrial); // model
write_byte(20); // life 40 hlsdk
write_byte(12); // width 5 hlsdk
write_byte(random_num(0, 224)); // r, g, b 224 hlsdk
write_byte(random_num(0, 224)); // r, g, b 224 hlsdk
write_byte(random_num(0, 255)); // r, g, b 255 hlsdk
write_byte(255); // brightness 255 hlsdk
message_end();
emit_sound(Ent, CHAN_VOICE, SOUND_ROCKET_FLY, 1.0, 0.5, 0, PITCH_NORM);
set_pdata_float (crowbar, m_flNextSecondaryAttack, get_pcvar_float(g_CvarNextAttack), extraoffset_weapon)
return HAM_HANDLED
}
public fw_Item_Deploy_Post(ent)
{
new id = pev(ent, pev_owner);
if(!is_user_alive(id) || get_pcvar_num( g_CvarEnabled ) != 1)
{
return HAM_IGNORED
}
if(get_pcvar_num( g_CvarEnabled ) == 1)
{
message_begin( MSG_ONE, get_user_msgid( "WeaponList" ), .player = id );
{
write_string( RC_W_NAME ); // WeaponName
write_byte( -1 ); // PrimaryAmmoID
write_byte( -1 ); // PrimaryAmmoMaxAmount
write_byte( 6 ); // SecondaryAmmoID (rpg)
write_byte( 100 ); // SecondaryAmmoMaxAmount
write_byte( 0 ); // SlotID (0...N)
write_byte( 1 ); // NumberInSlot (1...N)
write_byte( HLW_CROWBAR ); // WeaponID
write_byte( 0 ); // Flags
message_end();
}
}
set_hudmessage(random_num(0, 255), random_num(0, 255), random_num(0, 255), 0.38, 0.89, 0, 0.2, 5.0)
show_hudmessage(id, " | ROCKET~AT~CROWBAR | ^nPick Up RPG Ammo & Launched it useing Secondary Attack")
return HAM_IGNORED
}
public fw_Item_Holster_Post(ent) {
new id = pev(ent, pev_owner);
if(!is_user_alive(id))
{
return HAM_IGNORED
}
set_hudmessage(0, 255, 0, 0.38, 0.89, 0, 0.2, 1.0)
show_hudmessage(id, "")
return HAM_IGNORED;
}
public RC_cmd(id)
{
engclient_cmd(id, "weapon_crowbar" );
return PLUGIN_HANDLED
}
stock UTIL_PlayWeaponAnimation (const Player, const Sequence)
{
set_pev (Player, pev_weaponanim, Sequence)
message_begin (MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, .player = Player)
write_byte (Sequence)
write_byte (pev(get_pdata_cbase(Player, 306, 5), pev_body ))
message_end ()
}
stock UTIL_MakeBlood(const Float:vTraceEnd[3], const Float:Damage, const hitEnt)
{
new bloodColor = ExecuteHam(Ham_BloodColor, hitEnt);
if (bloodColor == -1) return;
new amount = floatround(Damage); amount *= 2;
message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
write_byte(TE_BLOODSPRITE);
engfunc(EngFunc_WriteCoord, vTraceEnd[0]);
engfunc(EngFunc_WriteCoord, vTraceEnd[1]);
engfunc(EngFunc_WriteCoord, vTraceEnd[2]);
write_short(m_iBlood[1]);
write_short(m_iBlood[0]);
write_byte(bloodColor);
write_byte(min(max(3, amount/10), 16));
message_end();
}
stock create_explosion(const Float: origin[3])
{
// defult explosion
/*message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_EXPLOSION)
write_coord(floatround(origin[0]))
write_coord(floatround(origin[1]))
write_coord(floatround(origin[2]))
write_short(boom)
write_byte(50)
write_byte(15)
write_byte(0)
message_end()*/
//TARE XPLOSION
message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_TAREXPLOSION)
write_coord(floatround(origin[0]))
write_coord(floatround(origin[1]))
write_coord(floatround(origin[2]))
message_end()
//BEAM CYLINDER
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, origin, 0)
write_byte(TE_BEAMCYLINDER)
engfunc(EngFunc_WriteCoord, origin[0])
engfunc(EngFunc_WriteCoord, origin[1])
engfunc(EngFunc_WriteCoord, origin[2])
engfunc(EngFunc_WriteCoord, origin[0])
engfunc(EngFunc_WriteCoord, origin[1])
engfunc(EngFunc_WriteCoord, origin[2] + 800.0)
write_short(g_Exlplosion[1])
write_byte(0)
write_byte(10)
write_byte(3)
write_byte(40)
write_byte(0)
write_byte(224)//r
write_byte(80)//g
write_byte(80)//b
write_byte(255)
write_byte(0)
message_end()
//EXPLOSION
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, origin, 0)
write_byte(TE_EXPLOSION)
engfunc(EngFunc_WriteCoord, origin[0])
engfunc(EngFunc_WriteCoord, origin[1])
engfunc(EngFunc_WriteCoord, origin[2])
write_short(g_Exlplosion[0])
write_byte(40)
write_byte(10)
write_byte(0)
message_end()
//DECAL
engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, origin, 0)
write_byte(TE_WORLDDECAL)
engfunc(EngFunc_WriteCoord, origin[0])
engfunc(EngFunc_WriteCoord, origin[1])
engfunc(EngFunc_WriteCoord, origin[2])
write_byte(decal)
message_end()
}
stock screenshake(index)
{
message_begin(MSG_ONE, get_user_msgid("ScreenShake"), {0, 0, 0}, index);
write_short(1<<13);
write_short(1<<14);
write_short(1<<15);
message_end();
}
stock control_ai2(ent, Float:VicOrigin[3], Float:speed)
{
if(!pev_valid(ent))
return
static Float:fl_Velocity[3], Float:EntOrigin[3], Float:distance_f, Float:fl_Time
pev(ent, pev_origin, EntOrigin)
distance_f = get_distance_f(EntOrigin, VicOrigin)
fl_Time = distance_f / speed
fl_Velocity[0] = (VicOrigin[0] - EntOrigin[0]) / fl_Time
fl_Velocity[1] = (VicOrigin[1] - EntOrigin[1]) / fl_Time
fl_Velocity[2] = (VicOrigin[2] - EntOrigin[2]) / fl_Time
set_pev(ent, pev_velocity, fl_Velocity)
}
public Aim_To(iEnt, Float:vTargetOrigin[3], Float:flSpeed, Style)
{
if(!pev_valid(iEnt))
return
if(!Style)
{
static Float:Vec[3], Float:Angles[3]
pev(iEnt, pev_origin, Vec)
Vec[0] = vTargetOrigin[0] - Vec[0]
Vec[1] = vTargetOrigin[1] - Vec[1]
Vec[2] = vTargetOrigin[2] - Vec[2]
engfunc(EngFunc_VecToAngles, Vec, Angles)
Angles[0] = Angles[2] = 0.0
set_pev(iEnt, pev_v_angle, Angles)
set_pev(iEnt, pev_angles, Angles)
} else {
new Float:f1, Float:f2, Float:fAngles, Float:vOrigin[3], Float:vAim[3], Float:vAngles[3];
pev(iEnt, pev_origin, vOrigin);
xs_vec_sub(vTargetOrigin, vOrigin, vOrigin);
xs_vec_normalize(vOrigin, vAim);
vector_to_angle(vAim, vAim);
if (vAim[1] > 180.0) vAim[1] -= 360.0;
if (vAim[1] < -180.0) vAim[1] += 360.0;
fAngles = vAim[1];
pev(iEnt, pev_angles, vAngles);
if (vAngles[1] > fAngles)
{
f1 = vAngles[1] - fAngles;
f2 = 360.0 - vAngles[1] + fAngles;
if (f1 < f2)
{
vAngles[1] -= flSpeed;
vAngles[1] = floatmax(vAngles[1], fAngles);
}
else
{
vAngles[1] += flSpeed;
if (vAngles[1] > 180.0) vAngles[1] -= 360.0;
}
}
else
{
f1 = fAngles - vAngles[1];
f2 = 360.0 - fAngles + vAngles[1];
if (f1 < f2)
{
vAngles[1] += flSpeed;
vAngles[1] = floatmin(vAngles[1], fAngles);
}
else
{
vAngles[1] -= flSpeed;
if (vAngles[1] < -180.0) vAngles[1] += 360.0;
}
}
set_pev(iEnt, pev_v_angle, vAngles)
set_pev(iEnt, pev_angles, vAngles)
}
}
public enemy_distance(ent, can_see)
{
new Float:maxdistance = 4980.0
new indexid = 0
new Float:current_dis = maxdistance
for(new i = 1 ;i <= get_maxplayers(); i++)
{
if(can_see)
{
if(is_user_alive(i) && attacking1(ent, i) && entity_range(ent, i) < current_dis)
{
current_dis = entity_range(ent, i)
indexid = i
}
} else {
if(is_user_alive(i) && entity_range(ent, i) < current_dis)
{
current_dis = entity_range(ent, i)
indexid = i
}
}
}
return indexid
}
public bool:attacking1(entindex1, entindex2)
{
if (!entindex1 || !entindex2)
return false
if (pev_valid(entindex1) && pev_valid(entindex1))
{
new flags = pev(entindex1, pev_flags)
if (flags & EF_NODRAW || flags & FL_NOTARGET)
{
return false
}
new Float:lookerOrig[3]
new Float:targetBaseOrig[3]
new Float:targetOrig[3]
new Float:temp[3]
pev(entindex1, pev_origin, lookerOrig)
pev(entindex1, pev_view_ofs, temp)
lookerOrig[0] += temp[0]
lookerOrig[1] += temp[1]
lookerOrig[2] += temp[2]
pev(entindex2, pev_origin, targetBaseOrig)
pev(entindex2, pev_view_ofs, temp)
targetOrig[0] = targetBaseOrig [0] + temp[0]
targetOrig[1] = targetBaseOrig [1] + temp[1]
targetOrig[2] = targetBaseOrig [2] + temp[2]
engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0)
if (get_tr2(0, TraceResult:TR_InOpen) && get_tr2(0, TraceResult:TR_InWater))
{
return false
}
else
{
new Float:flFraction
get_tr2(0, TraceResult:TR_flFraction, flFraction)
if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == entindex2))
{
return true
}
else
{
targetOrig[0] = targetBaseOrig [0]
targetOrig[1] = targetBaseOrig [1]
targetOrig[2] = targetBaseOrig [2]
engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0)
get_tr2(0, TraceResult:TR_flFraction, flFraction)
if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == entindex2))
{
return true
}
else
{
targetOrig[0] = targetBaseOrig [0]
targetOrig[1] = targetBaseOrig [1]
targetOrig[2] = targetBaseOrig [2] - 17.0
engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0)
get_tr2(0, TraceResult:TR_flFraction, flFraction)
if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == entindex2))
{
return true
}
}
}
}
}
return false
}
public HL_RadiusDamage( Float:vecSrc[3], pevInflictor, Float:flDamage, Float:flRadius, Ent )
{
new pEntity;
new tr;
new Float:flAdjustedDamage, Float:falloff;
new Float:vecSpot[3];
// NEW
new Float:vecAbsMin[3], Float:vecAbsMax[3], Float:vecAdjust[3],
Float:vecEndPos[3], Float:flFraction, iWaterLevel, i;
if( flRadius )
falloff = flDamage / flRadius;
else
falloff = 1.0;
new bInWater = (engfunc( EngFunc_PointContents, vecSrc ) == CONTENTS_WATER);
vecSrc[2] += 1;// in case grenade is lying on the ground
// iterate on all entities in the vicinity.
while ((pEntity = engfunc( EngFunc_FindEntityInSphere, pEntity, vecSrc, flRadius )) != 0)
{
if ( pev( pEntity, pev_takedamage ) != DAMAGE_NO )
{
iWaterLevel = pev( pEntity, pev_waterlevel ); // NEW
// blasts don't travel into or out of water
if (bInWater && iWaterLevel == 0)
continue;
if (!bInWater && iWaterLevel == 3)
continue;
// OLD: vecSpot = pEntity->BodyTarget( vecSrc ); -- NEW:
pev( pEntity, pev_absmin, vecAbsMin );
pev( pEntity, pev_absmax, vecAbsMax );
for( i = 0; i < 3; i++ ) vecSpot[i] = ( vecAbsMin[i] + vecAbsMax[i] ) * 0.5;
engfunc( EngFunc_TraceLine, vecSrc, vecSpot, DONT_IGNORE_MONSTERS, pevInflictor, tr );
get_tr2( tr, TR_flFraction, flFraction ); // NEW
get_tr2( tr, TR_vecEndPos, vecEndPos ); // NEW
if ( flFraction == 1.0 || get_tr2( tr, TR_pHit ) == pEntity )
{// the explosion can 'see' this entity, so hurt them!
if ( get_tr2( tr, TraceResult:TR_StartSolid ) )
{
// if we're stuck inside them, fixup the position and distance
vecEndPos = vecSrc;
flFraction = 0.0;
}
// decrease damage for an ent that's farther from the bomb.
// OLD: flAdjustedDamage = ( vecSrc - tr.vecEndPos ).Length() * falloff; -- NEW:
for( i = 0; i < 3; i++ ) vecAdjust[i] = vecSrc[i] - vecEndPos[i];
flAdjustedDamage = floatsqroot(vecAdjust[0]*vecAdjust[0] + vecAdjust[1]*vecAdjust[1] + vecAdjust[2]*vecAdjust[2]) * falloff;
flAdjustedDamage = flDamage - flAdjustedDamage;
if ( flAdjustedDamage < 0.0 )
{
flAdjustedDamage = 0.0;
}
ExecuteHamB( Ham_TakeDamage, pEntity, Ent , pevInflictor, flAdjustedDamage, DMG_BLAST | 8);
}
}
}
}