1
0
forked from 0ad/0ad

Add some missing IsInWorld checks to Danubius for cases where all targets are garrisoned, promoted, upgraded, transformed, becoming packed or undergoing any special treatment by some mod, refs D1449.

This was SVN commit r21766.
This commit is contained in:
elexis 2018-04-23 11:22:46 +00:00
parent 096500d99a
commit 2bc068aa41
2 changed files with 14 additions and 3 deletions

View File

@ -226,6 +226,9 @@ Trigger.prototype.SpawnCCAttackers = function()
for (let gaiaCC of this.civicCenters)
{
if (!TriggerHelper.IsInWorld(gaiaCC))
continue;
let isLeft = this.IsLeftRiverside(gaiaCC);
if (isLeft && !spawnLeft || !isLeft && !spawnRight)
continue;
@ -394,7 +397,7 @@ Trigger.prototype.AttackAndPatrol = function(entities, targetClass, triggerPoint
if (!entities.length)
return;
let healers = TriggerHelper.MatchEntitiesByClass(entities, "Healer");
let healers = TriggerHelper.MatchEntitiesByClass(entities, "Healer").filter(TriggerHelper.IsInWorld);
if (healers.length)
{
let healerTargets = TriggerHelper.MatchEntitiesByClass(entities, "Hero Champion");
@ -409,9 +412,11 @@ Trigger.prototype.AttackAndPatrol = function(entities, targetClass, triggerPoint
});
}
let attackers = TriggerHelper.MatchEntitiesByClass(entities, "!Healer");
let attackers = TriggerHelper.MatchEntitiesByClass(entities, "!Healer").filter(TriggerHelper.IsInWorld);
if (!attackers.length)
return;
let targets = TriggerHelper.MatchEntitiesByClass(TriggerHelper.GetAllPlayersEntities(), targetClass).sort(
let targets = TriggerHelper.MatchEntitiesByClass(TriggerHelper.GetAllPlayersEntities(), targetClass).filter(TriggerHelper.IsInWorld).sort(
(ent1, ent2) => DistanceBetweenEntities(attackers[0], ent1) - DistanceBetweenEntities(attackers[0], ent2)).slice(0, targetCount);
this.debugLog(debugName + " " + uneval(attackers) + " attack " + uneval(targets));

View File

@ -12,6 +12,12 @@ TriggerHelper.GetPlayerIDFromEntity = function(ent)
return -1;
};
TriggerHelper.IsInWorld = function(ent)
{
let cmpPosition = Engine.QueryInterface(ent, IID_Position);
return cmpPosition && cmpPosition.IsInWorld();
};
TriggerHelper.GetEntityPosition2D = function(ent)
{
let cmpPosition = Engine.QueryInterface(ent, IID_Position);