#include "tesla_weapon.qh"
-#ifdef IMPLEMENTATION
-
#ifdef SVQC
entity toast(entity actor, entity from, float range, float damage);
if (!isPlayer || weapon_prepareattack(thiswep, actor, weaponentity, false, WEP_CVAR_PRI(electro, refire))) {
if (isPlayer) {
turret_initparams(actor);
- W_SetupShot_Dir(actor, v_forward, false, 0, SND_TeslaCoilTurretAttack_FIRE, CH_WEAPON_B, 0);
+ W_SetupShot_Dir(actor, weaponentity, v_forward, false, 0, SND_TeslaCoilTurretAttack_FIRE, CH_WEAPON_B, 0, DEATH_TURRET_TESLA.m_id);
actor.tur_shotdir_updated = w_shotdir;
actor.tur_shotorg = w_shotorg;
actor.tur_head = actor;
float d = actor.shot_dmg;
float r = actor.target_range;
entity e = spawn();
- setorigin(e,actor.tur_shotorg);
+ setorigin(e, actor.tur_shotorg);
actor.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_MISSILES | TFL_TARGETSELECT_RANGELIMITS | TFL_TARGETSELECT_TEAMCHECK;
entity t = toast(actor, e,r,d);
- remove(e);
+ delete(e);
if (t == NULL) return;
d *= 0.75;
r *= 0.85;
t = toast(actor, t, r, d);
- if (t == world) break;
-
- }
+ if (t == NULL) break;
- e = findchainfloat(railgunhit, 1);
- while (e) {
- e.railgunhit = 0;
- e = e.chain;
}
+ IL_EACH(g_railgunhit, it.railgunhit,
+ {
+ it.railgunhit = false;
+ });
+ IL_CLEAR(g_railgunhit);
}
}
entity toast(entity actor, entity from, float range, float damage)
{
- entity e;
- entity etarget = world;
- float d,dd;
- float r;
-
- dd = range + 1;
-
- e = findradius(from.origin,range);
- while (e)
+ float dd = range + 1;
+ entity etarget = NULL;
+ FOREACH_ENTITY_RADIUS(from.origin, range, it != from && !it.railgunhit,
{
- if ((e.railgunhit != 1) && (e != from))
+ float r = turret_validate_target(actor, it, actor.target_validate_flags);
+ if(r > 0)
{
- r = turret_validate_target(actor,e,actor.target_validate_flags);
- if (r > 0)
+ traceline(from.origin, 0.5 * (it.absmin + it.absmax), MOVE_WORLDONLY, from);
+ if(trace_fraction == 1.0)
{
- traceline(from.origin,0.5 * (e.absmin + e.absmax),MOVE_WORLDONLY,from);
- if (trace_fraction == 1.0)
+ float d = vlen(it.origin - from.origin);
+ if(d < dd)
{
- d = vlen(e.origin - from.origin);
- if (d < dd)
- {
- dd = d;
- etarget = e;
- }
+ dd = d;
+ etarget = it;
}
}
}
- e = e.chain;
- }
+ });
if (etarget)
{
- te_csqc_lightningarc(from.origin,etarget.origin);
- Damage(etarget, actor, actor, damage, DEATH_TURRET_TESLA.m_id, etarget.origin, '0 0 0');
- etarget.railgunhit = 1;
+ te_csqc_lightningarc(from.origin, etarget.origin);
+ Damage(etarget, actor, actor, damage, DEATH_TURRET_TESLA.m_id, DMG_NOWEP, etarget.origin, '0 0 0');
+ etarget.railgunhit = true;
+ IL_PUSH(g_railgunhit, etarget);
}
return etarget;
}
#endif
-
-#endif