Index: ps/trunk/binaries/data/mods/public/simulation/components/ProductionQueue.js =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/components/ProductionQueue.js +++ ps/trunk/binaries/data/mods/public/simulation/components/ProductionQueue.js @@ -417,6 +417,9 @@ let cmpPlayerEntityLimits = QueryPlayerIDInterface(player, IID_EntityLimits); if (cmpPlayerEntityLimits) { + if (!cmpPlayerEntityLimits.AllowedToTrain(unitCategory, count, templateName, template.TrainingRestrictions.MatchLimit)) + // Already warned, return. + return false; cmpPlayerEntityLimits.ChangeCount(unitCategory, count); if (template.TrainingRestrictions.MatchLimit) cmpPlayerEntityLimits.ChangeMatchCount(templateName, count); Index: ps/trunk/binaries/data/mods/public/simulation/components/tests/test_ProductionQueue.js =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/components/tests/test_ProductionQueue.js +++ ps/trunk/binaries/data/mods/public/simulation/components/tests/test_ProductionQueue.js @@ -501,6 +501,7 @@ "GetPlayerID": () => 1, // entitylimits "ChangeCount": () => {}, + "AllowedToTrain": () => true, // techmanager "CheckTechnologyRequirements": () => true, "IsTechnologyResearched": () => false,