/* ammotype */ ATTRIB(Seeker, ammo_field, .int, ammo_rockets);
/* impulse */ ATTRIB(Seeker, impulse, int, 8);
/* flags */ ATTRIB(Seeker, spawnflags, int, WEP_FLAG_MUTATORBLOCKED | WEP_FLAG_RELOADABLE | WEP_TYPE_SPLASH);
-/* rating */ ATTRIB(Seeker, bot_pickupbasevalue, float, BOT_PICKUP_RATING_HIGH);
+/* rating */ ATTRIB(Seeker, bot_pickupbasevalue, float, 5000);
/* color */ ATTRIB(Seeker, wpcolor, vector, '0.5 1 0');
/* modelname */ ATTRIB(Seeker, mdl, string, "seeker");
#ifdef GAMEQC
// Do evasive maneuvers for world objects? ( this should be a cpu hog. :P )
if(WEP_CVAR(seeker, missile_smart) && (dist > WEP_CVAR(seeker, missile_smart_mindist)))
{
- // Is it a better idea (shorter distance) to trace to the target itthis?
+ // Is it a better idea (shorter distance) to trace to the target itself?
if( vdist(this.origin + olddir * this.wait, <, dist))
traceline(this.origin, this.origin + olddir * this.wait, false, this);
else
missile.health = WEP_CVAR(seeker, missile_health);
missile.damageforcescale = WEP_CVAR(seeker, missile_damageforcescale);
missile.damagedbycontents = true;
+ IL_PUSH(g_damagedbycontents, missile);
//missile.think = W_Seeker_Missile_Animate; // csqc projectiles.
if(missile.enemy != NULL)
// ============================
entity W_Seeker_Tagged_Info(entity isowner, .entity weaponentity, entity istarget)
{
- entity tag;
- for(tag = NULL; (tag = find(tag, classname, "tag_tracker")); )
- if((tag.realowner == isowner) && (tag.tag_target == istarget) && (tag.weaponentity_fld == weaponentity))
- return tag;
+ IL_EACH(g_seeker_trackers, it.classname == "tag_tracker" && it.realowner == isowner,
+ {
+ if(it.tag_target == istarget && it.weaponentity_fld == weaponentity)
+ return it;
+ });
return NULL;
}
void W_Seeker_Attack(entity actor, .entity weaponentity)
{
- entity tracker, closest_target;
+ entity closest_target = NULL;
- closest_target = NULL;
- for(tracker = NULL; (tracker = find(tracker, classname, "tag_tracker")); ) if (tracker.realowner == actor)
+ IL_EACH(g_seeker_trackers, it.classname == "tag_tracker" && it.realowner == actor,
{
if(closest_target)
{
- if(vlen2(actor.origin - tracker.tag_target.origin) < vlen2(actor.origin - closest_target.origin))
- closest_target = tracker.tag_target;
+ if(vlen2(actor.origin - it.tag_target.origin) < vlen2(actor.origin - closest_target.origin))
+ closest_target = it.tag_target;
}
else
- closest_target = tracker.tag_target;
- }
+ closest_target = it.tag_target;
+ });
- traceline(actor.origin + actor.view_ofs, closest_target.origin, MOVE_NOMONSTERS, actor);
- if((!closest_target) || ((trace_fraction < 1) && (trace_ent != closest_target)))
- closest_target = NULL;
+ if(closest_target)
+ {
+ traceline(actor.origin + actor.view_ofs, closest_target.origin, MOVE_NOMONSTERS, actor);
+ if(!closest_target || (trace_fraction < 1 && trace_ent != closest_target))
+ closest_target = NULL;
+ }
W_Seeker_Fire_Missile(WEP_SEEKER, actor, weaponentity, '0 0 0', closest_target);
}
e.cnt = WEP_CVAR(seeker, missile_count);
e.owner = this.owner;
e.realowner = this.realowner;
+ IL_PUSH(g_seeker_trackers, e);
if(WEP_CVAR(seeker, type) == 1)
{