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 814c1ff25e..2f6e10e0d5 100644 --- a/binaries/data/mods/public/simulation/ai/common-api/entity.js +++ b/binaries/data/mods/public/simulation/ai/common-api/entity.js @@ -52,6 +52,12 @@ m.Template = m.Class({ "civ": function() { return this.get("Identity/Civ"); }, + "matchLimit": function() { + if (!this.get("TrainingRestrictions")) + return undefined; + return this.get("TrainingRestrictions/MatchLimit"); + }, + "classes": function() { let template = this.get("Identity"); if (!template) diff --git a/binaries/data/mods/public/simulation/ai/common-api/gamestate.js b/binaries/data/mods/public/simulation/ai/common-api/gamestate.js index 856437bafd..6c768fd15f 100644 --- a/binaries/data/mods/public/simulation/ai/common-api/gamestate.js +++ b/binaries/data/mods/public/simulation/ai/common-api/gamestate.js @@ -718,6 +718,7 @@ m.GameState.prototype.findTrainableUnits = function(classes, anticlasses) let ret = []; let limits = this.getEntityLimits(); let current = this.getEntityCounts(); + let matchCounts = this.getEntityMatchCounts(); for (let trainable of allTrainable) { if (this.isTemplateDisabled(trainable)) @@ -725,6 +726,9 @@ m.GameState.prototype.findTrainableUnits = function(classes, anticlasses) let template = this.getTemplate(trainable); if (!template || !template.available(this)) continue; + let limit = template.matchLimit(); + if (matchCounts && limit && matchCounts[trainable] >= limit) + continue; if (classes.some(c => !template.hasClass(c))) continue; if (anticlasses.some(c => template.hasClass(c))) @@ -888,6 +892,11 @@ m.GameState.prototype.getEntityLimits = function() return this.playerData.entityLimits; }; +m.GameState.prototype.getEntityMatchCounts = function() +{ + return this.playerData.matchEntityCounts; +}; + m.GameState.prototype.getEntityCounts = function() { return this.playerData.entityCounts;