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
@@ -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));
@@ -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);