I was trying to make an attack that deal damage to all enemy in line with fixed ranged
PHP Code:
public Check_Tentacle(id)
{
new Float:vecStart[3], Float:vecViewOfs[3]
new Float:vecEnd[3], Float:vAngle[3], Float:vecForward[3]
new tr = create_tr2()
//Start Pos
pev(id, pev_origin, vecStart)
pev(id, pev_view_ofs, vecViewOfs)
xs_vec_add(vecStart, vecViewOfs, vecStart)
//End Pos
pev(id, pev_v_angle, vAngle)
angle_vector(vAngle, ANGLEVECTOR_FORWARD, vecForward)
vecEnd[0] = vecEnd[0] + float(TENTACLE_DISTANCE) * vecForward[0]
vecEnd[1] = vecEnd[1] + float(TENTACLE_DISTANCE) * vecForward[1]
vecEnd[2] = vecEnd[2] + float(TENTACLE_DISTANCE) * vecForward[2]
/*static Float:flViewAngle[3], Float:flPunchAngle[3], Float:flVelocity[3]
pev(id, pev_v_angle, flViewAngle)
pev(id, pev_punchangle, flPunchAngle)
xs_vec_add(flViewAngle, flPunchAngle, flVelocity)
engfunc(EngFunc_MakeVectors, flVelocity)
GetGunPosition(id, flSrc)
global_get(glb_v_forward, flAiming)*/
new Float:newStart[3];
newStart = vecStart;
new entIgnore = id
new bool:done = false;
while (!done) {
//new hitEnt = trace_line(id, vecStart, vecEnd, vStart)
engfunc(EngFunc_TraceLine, vecStart, vecEnd, DONT_IGNORE_MONSTERS, entIgnore, tr)
get_tr2(tr, TR_vecEndPos, vecStart);
new hitEnt = get_tr2(tr, TR_pHit)
if (hitEnt <= 0) {
done = true;
} else {
entIgnore = hitEnt
if(!is_user_alive(hitEnt))
if(!zp_get_user_zombie(hitEnt))
{
rg_multidmg_clear()
ExecuteHamB(Ham_TraceAttack, hitEnt, id, 100.0, vecStart, tr, DMG_BULLET) //Infect
rg_multidmg_apply(id, id)
//ExecuteHamB(Ham_TakeDamage, hitEnt, 0, id, 100.0, DMG_BULLET) //Infect
}
}
}
//Fix VecStart
pev(id, pev_origin, vecStart)
xs_vec_add(vecStart, vecViewOfs, vecStart)
//Draw Laser
message_begin(MSG_ONE,SVC_TEMPENTITY,{0,0,0},id)
write_byte( TE_BEAMPOINTS )
engfunc(EngFunc_WriteCoord, vecStart[0])
engfunc(EngFunc_WriteCoord, vecStart[1])
engfunc(EngFunc_WriteCoord, vecStart[2])
engfunc(EngFunc_WriteCoord, vecEnd[0])
engfunc(EngFunc_WriteCoord, vecEnd[1])
engfunc(EngFunc_WriteCoord, vecEnd[2])
write_short( g_Beam ) //index
write_byte( 1 ) //frame
write_byte( 1 ) //frame rate
write_byte( 50 ) //life
write_byte( 40 ) //wide
write_byte( 2 ) //noise
write_byte( 255 )
write_byte( 255 )
write_byte( 255 )
write_byte( 200 )
write_byte( 0 )
message_end()
free_tr2(tr)
}