Index: binaries/data/mods/public/gui/common/tooltips.js =================================================================== --- binaries/data/mods/public/gui/common/tooltips.js +++ binaries/data/mods/public/gui/common/tooltips.js @@ -644,16 +644,16 @@ /** * Returns the cost information to display in the specified entity's construction button tooltip. */ -function getEntityCostTooltip(template, entity, buildingsCountToTrainFullBatch, fullBatchSize, remainderBatch) +function getEntityCostTooltip(template, player, entity, buildingsCountToTrainFullBatch, fullBatchSize, remainderBatch) { // Entities with a wallset component are proxies for initiating wall placement and as such do not have a cost of // their own; the individual wall pieces within it do. if (template.wallSet) { - let templateLong = GetTemplateData(template.wallSet.templates.long); - let templateMedium = GetTemplateData(template.wallSet.templates.medium); - let templateShort = GetTemplateData(template.wallSet.templates.short); - let templateTower = GetTemplateData(template.wallSet.templates.tower); + let templateLong = GetTemplateData(template.wallSet.templates.long, player); + let templateMedium = GetTemplateData(template.wallSet.templates.medium, player); + let templateShort = GetTemplateData(template.wallSet.templates.short, player); + let templateTower = GetTemplateData(template.wallSet.templates.tower, player); let wallCosts = getWallPieceTooltip([templateShort, templateMedium, templateLong]); let towerCosts = getEntityCostComponentsTooltipString(templateTower); Index: binaries/data/mods/public/gui/session/selection_panels.js =================================================================== --- binaries/data/mods/public/gui/session/selection_panels.js +++ binaries/data/mods/public/gui/session/selection_panels.js @@ -217,7 +217,7 @@ }, "setupButton": function(data) { - let template = GetTemplateData(data.item); + let template = GetTemplateData(data.item, data.player); if (!template) return false; @@ -240,12 +240,15 @@ getEntityNamesFormatted, getVisibleEntityClassesFormatted, getAurasTooltip, - getEntityTooltip, - getEntityCostTooltip, - getGarrisonTooltip, - getPopulationBonusTooltip, - showTemplateViewerOnRightClickTooltip + getEntityTooltip ].map(func => func(template)); + tooltips.push( + getEntityCostTooltip(template, data.player), + getGarrisonTooltip(template), + getPopulationBonusTooltip(template), + showTemplateViewerOnRightClickTooltip(template) + ); + let limits = getEntityLimitAndCount(data.playerState, data.item); tooltips.push( @@ -930,7 +933,7 @@ }, "setupButton": function(data) { - let template = GetTemplateData(data.item); + let template = GetTemplateData(data.item, data.player); if (!template) return false; @@ -969,9 +972,8 @@ getVisibleEntityClassesFormatted(template), getAurasTooltip(template), getEntityTooltip(template), - getEntityCostTooltip(template, unitIds[0], buildingsCountToTrainFullBatch, fullBatchSize, remainderBatch) + getEntityCostTooltip(template, data.player, unitIds[0], buildingsCountToTrainFullBatch, fullBatchSize, remainderBatch) ]; - let limits = getEntityLimitAndCount(data.playerState, data.item); tooltips.push(formatLimitString(limits.entLimit, limits.entCount, limits.entLimitChangers)); Index: binaries/data/mods/public/gui/session/session.js =================================================================== --- binaries/data/mods/public/gui/session/session.js +++ binaries/data/mods/public/gui/session/session.js @@ -208,15 +208,14 @@ return g_EntityStates[entId]; } -function GetTemplateData(templateName) +function GetTemplateData(templateName, owner = undefined) { if (!(templateName in g_TemplateData)) { - let template = Engine.GuiInterfaceCall("GetTemplateData", templateName); + let template = Engine.GuiInterfaceCall("GetTemplateData", {"templateName": templateName, "owner": owner}); translateObjectKeys(template, ["specific", "generic", "tooltip"]); g_TemplateData[templateName] = deepfreeze(template); } - return g_TemplateData[templateName]; } Index: binaries/data/mods/public/simulation/components/GuiInterface.js =================================================================== --- binaries/data/mods/public/simulation/components/GuiInterface.js +++ binaries/data/mods/public/simulation/components/GuiInterface.js @@ -561,8 +561,10 @@ return cmpRangeManager.GetElevationAdaptedRange(pos, rot, range, elevationBonus, 2*Math.PI); }; -GuiInterface.prototype.GetTemplateData = function(player, templateName) +GuiInterface.prototype.GetTemplateData = function(player, data) { + let templateName = data.templateName; + let pl = !!data.owner ? data.owner : player; let cmpTemplateManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_TemplateManager); let template = cmpTemplateManager.GetTemplate(templateName); @@ -572,14 +574,14 @@ let aurasTemplate = {}; if (!template.Auras) - return GetTemplateDataHelper(template, player, aurasTemplate); + return GetTemplateDataHelper(template, pl, aurasTemplate); let auraNames = template.Auras._string.split(/\s+/); for (let name of auraNames) aurasTemplate[name] = AuraTemplates.Get(name); - return GetTemplateDataHelper(template, player, aurasTemplate); + return GetTemplateDataHelper(template, pl, aurasTemplate); }; GuiInterface.prototype.IsTechnologyResearched = function(player, data) @@ -1219,7 +1221,7 @@ this.placementWallEntities[tpl] = { "numUsed": 0, "entities": [], - "templateData": this.GetTemplateData(player, tpl), + "templateData": this.GetTemplateData(player, {"templateName": tpl}), }; // ensure that the loaded template data contains a wallPiece component