]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/weapons/weapon/seeker.qc
Merge branch 'master' into martin-t/dmgtext2
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / weapons / weapon / seeker.qc
index 6cc78f576d74eaa2a1749cf6e4c12d9aec941454..4b5ccab4a55a5f371c8475ecf032c7321c834cab 100644 (file)
@@ -4,7 +4,7 @@ CLASS(Seeker, Weapon)
 /* 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
@@ -152,7 +152,7 @@ void W_Seeker_Missile_Think(entity this)
                // 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
@@ -282,6 +282,7 @@ void W_Seeker_Fire_Missile(Weapon thiswep, entity actor, .entity weaponentity, v
        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)
@@ -394,33 +395,36 @@ void W_Seeker_Fire_Flac(Weapon thiswep, entity actor, .entity weaponentity)
 // ============================
 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);
 }
@@ -544,6 +548,7 @@ void W_Seeker_Tag_Touch(entity this, entity toucher)
                        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)
                        {