From 62db78beecfc3d41089b30e7ca1a1f5a8eacc5f5 Mon Sep 17 00:00:00 2001 From: Freagarach Date: Fri, 2 Feb 2024 12:40:52 +0000 Subject: [PATCH] [PetraAI] - Fix resources (dead animals) coming in the defense army. When a wild animal was in a defenseArmy and it was killed, its resource got into the army as well. This caused a call to GetUnitAIOrder data which was undefined for the resource. Fixed by checking for UnitAI-ness and also for attack-ability whilst at it. Reported by @seregadushka at the forums: https://wildfiregames.com/forum/topic/110098-petra-error-winter-is-coming5/. Investigated and MWE by @Norse_Harold. Fixes #6899 This was SVN commit r28025. --- binaries/data/mods/public/simulation/ai/common-api/entity.js | 2 ++ binaries/data/mods/public/simulation/ai/petra/defenseArmy.js | 3 +++ 2 files changed, 5 insertions(+) diff --git a/binaries/data/mods/public/simulation/ai/common-api/entity.js b/binaries/data/mods/public/simulation/ai/common-api/entity.js index 6adf86af1c..77656a525e 100644 --- a/binaries/data/mods/public/simulation/ai/common-api/entity.js +++ b/binaries/data/mods/public/simulation/ai/common-api/entity.js @@ -550,6 +550,8 @@ m.Template = m.Class({ "canOccupyTurret": function() { return "Turretable" in this._template; }, "isTreasureCollector": function() { return this.get("TreasureCollector") !== undefined; }, + + "hasUnitAI": function() { return this.get("UnitAI") !== undefined; }, }); diff --git a/binaries/data/mods/public/simulation/ai/petra/defenseArmy.js b/binaries/data/mods/public/simulation/ai/petra/defenseArmy.js index 8836e17bf8..24ee261c78 100644 --- a/binaries/data/mods/public/simulation/ai/petra/defenseArmy.js +++ b/binaries/data/mods/public/simulation/ai/petra/defenseArmy.js @@ -527,6 +527,9 @@ PETRA.DefenseArmy.prototype.checkEvents = function(gameState, events) } else if (this.ownEntities.indexOf(evt.entity) !== -1) { + const newEnt = gameState.getEntityById(evt.newentity); + if (newEnt && (!newEnt.hasUnitAI() || !newEnt.attackTypes())) + continue; let idx = this.ownEntities.indexOf(evt.entity); this.ownEntities[idx] = evt.newentity; this.assignedTo[evt.newentity] = this.assignedTo[evt.entity];