Index: binaries/data/mods/public/simulation/ai/petra/baseManager.js =================================================================== --- binaries/data/mods/public/simulation/ai/petra/baseManager.js +++ binaries/data/mods/public/simulation/ai/petra/baseManager.js @@ -180,8 +180,7 @@ let medium = this.dropsiteSupplies[type].medium; let faraway = this.dropsiteSupplies[type].faraway; - resources.forEach(function(supply) - { + resources.forEach(supply => { if (!supply.position()) return; // Moving resources and fields are treated differently. @@ -194,6 +193,10 @@ let dist = API3.SquareVectorDistance(supply.position(), dropsitePos); if (dist < maxDistResourceSquare) { + supply.setMetadata(PlayerID, "assignedResource", type); + supply.setMetadata(PlayerID, "base", this.ID); + if (supply.id() === 2886) + warn("Adding " + supply.id() + " for " + PlayerID); if (dist < maxDistResourceSquare/16) // distmax/4 nearby.push({ "dropsite": dropsiteId, "id": supply.id(), "ent": supply, "dist": dist }); else if (dist < maxDistResourceSquare/4) // distmax/2 @@ -233,6 +236,18 @@ }); }; +PETRA.BaseManager.prototype.removeFromAssignedDropsite = function(ent) +{ + for (const type in this.dropsiteSupplies) + for (const proxim in this.dropsiteSupplies[type]) + { + const resourcesList = this.dropsiteSupplies[type][proxim]; + for (let i = 0; i < resourcesList.length; ++i) + if (resourcesList[i].id === ent.id()) + resourcesList.splice(i--, 1); + } +} + // completely remove the dropsite resources from our list. PETRA.BaseManager.prototype.removeDropsite = function(gameState, ent) { Index: binaries/data/mods/public/simulation/ai/petra/basesManager.js =================================================================== --- binaries/data/mods/public/simulation/ai/petra/basesManager.js +++ binaries/data/mods/public/simulation/ai/petra/basesManager.js @@ -132,6 +132,8 @@ evt.metadata[PlayerID].base) { const ent = evt.entityObj; + if (evt?.metadata?.[PlayerID]?.assignedResource) + this.getBaseByID(evt.metadata[PlayerID].base).removeFromAssignedDropsite(ent); if (ent.owner() != PlayerID) continue; // A new base foundation was created and destroyed on the same (AI) turn