Index: binaries/data/mods/public/simulation/components/BuildRestrictions.js =================================================================== --- binaries/data/mods/public/simulation/components/BuildRestrictions.js +++ binaries/data/mods/public/simulation/components/BuildRestrictions.js @@ -255,6 +255,13 @@ } } + let cmpTemplateManager; + if (!cmpTemplateManager) + cmpTemplateManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_TemplateManager); + let templateName = cmpTemplateManager.GetCurrentTemplateName(this.entity); + templateName = templateName.substr(templateName.lastIndexOf("|") + 1); + let template = cmpTemplateManager.GetTemplate(templateName); + // Check distance restriction if (this.template.Distance) { @@ -270,21 +277,22 @@ if (this.template.Distance.MinDistance) { - var dist = +this.template.Distance.MinDistance; - var nearEnts = cmpRangeManager.ExecuteQuery(this.entity, 0, dist, [cmpPlayer.GetPlayerID()], IID_BuildRestrictions).filter(filter); - if (nearEnts.length) + + let dist = ApplyValueModificationsToTemplate("BuildRestrictions/Distance/MinDistance", +this.template.Distance.MinDistance, cmpPlayer.GetPlayerID(), template); + var nearEnts = cmpRangeManager.ExecuteQuery(this.entity, 0, dist, [cmpPlayer.GetPlayerID()], IID_BuildRestrictions).some(filter); + if (nearEnts) { var result = markForPluralTranslation( "%(name)s too close to a %(category)s, must be at least %(distance)s meter away", "%(name)s too close to a %(category)s, must be at least %(distance)s meters away", - +this.template.Distance.MinDistance); + dist); result.success = false; result.translateMessage = true; result.parameters = { "name": name, "category": cat, - "distance": this.template.Distance.MinDistance + "distance": dist }; result.translateParameters = ["name", "category"]; return result; // Fail @@ -292,21 +300,21 @@ } if (this.template.Distance.MaxDistance) { - var dist = +this.template.Distance.MaxDistance; - var nearEnts = cmpRangeManager.ExecuteQuery(this.entity, 0, dist, [cmpPlayer.GetPlayerID()], IID_BuildRestrictions).filter(filter); - if (!nearEnts.length) + let dist = ApplyValueModificationsToTemplate("BuildRestrictions/Distance/MaxDistance", +this.template.Distance.MaxDistance, cmpPlayer.GetPlayerID(), template); + var nearEnts = cmpRangeManager.ExecuteQuery(this.entity, 0, dist, [cmpPlayer.GetPlayerID()], IID_BuildRestrictions).some(filter); + if (!nearEnts) { var result = markForPluralTranslation( "%(name)s too far from a %(category)s, must be within %(distance)s meter", "%(name)s too far from a %(category)s, must be within %(distance)s meters", - +this.template.Distance.MinDistance); + dist); result.success = false; result.translateMessage = true; result.parameters = { "name": name, "category": cat, - "distance": this.template.Distance.MaxDistance + "distance": dist }; result.translateParameters = ["name", "category"]; return result; // Fail