X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fweapons%2Fweapon%2Fseeker.qc;h=4b5ccab4a55a5f371c8475ecf032c7321c834cab;hb=5a356ff39bd87af74db73b8fc36cc9613e60f2e7;hp=6cc78f576d74eaa2a1749cf6e4c12d9aec941454;hpb=ecebe32dc00c4236a4050b73a9dcc9afbcddf087;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/weapons/weapon/seeker.qc b/qcsrc/common/weapons/weapon/seeker.qc index 6cc78f576..4b5ccab4a 100644 --- a/qcsrc/common/weapons/weapon/seeker.qc +++ b/qcsrc/common/weapons/weapon/seeker.qc @@ -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) {