From 2bc068aa415ac4afcbef347376111dd4a2ef2213 Mon Sep 17 00:00:00 2001 From: elexis Date: Mon, 23 Apr 2018 11:22:46 +0000 Subject: [PATCH] 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. --- .../data/mods/public/maps/random/danubius_triggers.js | 11 ++++++++--- .../data/mods/public/maps/scripts/TriggerHelper.js | 6 ++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/binaries/data/mods/public/maps/random/danubius_triggers.js b/binaries/data/mods/public/maps/random/danubius_triggers.js index 1a0ac1277c..822d1d0c63 100644 --- a/binaries/data/mods/public/maps/random/danubius_triggers.js +++ b/binaries/data/mods/public/maps/random/danubius_triggers.js @@ -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)); diff --git a/binaries/data/mods/public/maps/scripts/TriggerHelper.js b/binaries/data/mods/public/maps/scripts/TriggerHelper.js index 28578d724a..02e3976cf6 100644 --- a/binaries/data/mods/public/maps/scripts/TriggerHelper.js +++ b/binaries/data/mods/public/maps/scripts/TriggerHelper.js @@ -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);