From 6deca026b3eee5a64ad15b7a7134918750d931aa Mon Sep 17 00:00:00 2001 From: Vantha Date: Sat, 21 Feb 2026 17:35:27 +0100 Subject: [PATCH] Add player to GetTemplateData calls where necessary If no player is provided then the function falls back to the viewed player, which is sometimes not the right one (like for observers), which resulted in inconsistent/incorrect data being returned. This patch fixes that. --- .../DeveloperOverlayEntityState.js | 2 +- binaries/data/mods/public/gui/session/input.js | 2 +- binaries/data/mods/public/gui/session/selection.js | 2 +- .../mods/public/gui/session/selection_panels.js | 13 +++++++------ .../public/gui/session/selection_panels_helpers.js | 6 +++--- binaries/data/mods/public/gui/session/session.js | 4 +++- 6 files changed, 16 insertions(+), 13 deletions(-) diff --git a/binaries/data/mods/public/gui/session/developer_overlay/DeveloperOverlayEntityState.js b/binaries/data/mods/public/gui/session/developer_overlay/DeveloperOverlayEntityState.js index 909572b766..b298884ec0 100644 --- a/binaries/data/mods/public/gui/session/developer_overlay/DeveloperOverlayEntityState.js +++ b/binaries/data/mods/public/gui/session/developer_overlay/DeveloperOverlayEntityState.js @@ -38,7 +38,7 @@ class DeveloperOverlayEntityState const entState = GetEntityState(selection[0]); if (entState) { - const template = GetTemplateData(entState.template); + const template = GetTemplateData(entState.template, entState.player); text += "\n\nentity: {\n"; for (const k in entState) text += " " + k + ":" + uneval(entState[k]) + "\n"; diff --git a/binaries/data/mods/public/gui/session/input.js b/binaries/data/mods/public/gui/session/input.js index be8b6d4e23..6dbca62723 100644 --- a/binaries/data/mods/public/gui/session/input.js +++ b/binaries/data/mods/public/gui/session/input.js @@ -1555,7 +1555,7 @@ function getEntityLimitAndCount(playerState, entType) }; if (!playerState.entityLimits) return ret; - const template = GetTemplateData(entType); + const template = GetTemplateData(entType, playerState.id); let entCategory; let matchLimit; if (template.trainingRestrictions) diff --git a/binaries/data/mods/public/gui/session/selection.js b/binaries/data/mods/public/gui/session/selection.js index 855a84956c..7a03c670cd 100644 --- a/binaries/data/mods/public/gui/session/selection.js +++ b/binaries/data/mods/public/gui/session/selection.js @@ -83,7 +83,7 @@ EntityGroups.prototype.add = function(ents) continue; var templateName = entState.template; - var key = GetTemplateData(templateName).selectionGroupName || templateName; + var key = GetTemplateData(templateName, entState.player).selectionGroupName || templateName; // Group the ents by player and template if (entState.player !== undefined) diff --git a/binaries/data/mods/public/gui/session/selection_panels.js b/binaries/data/mods/public/gui/session/selection_panels.js index 8ffd6a8402..a157f5a261 100644 --- a/binaries/data/mods/public/gui/session/selection_panels.js +++ b/binaries/data/mods/public/gui/session/selection_panels.js @@ -344,7 +344,7 @@ g_SelectionPanels.Garrison = { { const entState = GetEntityState(data.item.ents[0]); - const template = GetTemplateData(entState.template); + const template = GetTemplateData(entState.template, entState.player); if (!template) return false; @@ -566,7 +566,7 @@ g_SelectionPanels.Queue = { // Differentiate between units and techs let template; if (queuedItem.unitTemplate) - template = GetTemplateData(queuedItem.unitTemplate); + template = GetTemplateData(queuedItem.unitTemplate, data.player); else if (queuedItem.technologyTemplate) template = GetTechnologyData(queuedItem.technologyTemplate, GetSimState().players[data.player].civ); else @@ -1048,7 +1048,8 @@ g_SelectionPanels.Research = { { showTemplateDetails( t, - GetTemplateData(baseData.unitEntStates.find(state => state.id == baseData.item.researchFacilityId).template).nativeCiv); + GetTemplateData(baseData.unitEntStates.find(state => state.id == baseData.item.researchFacilityId).template, state.player).nativeCiv + ); }); button.onPressRight = showTemplateFunc(techName); @@ -1113,7 +1114,7 @@ g_SelectionPanels.Selection = { "setupButton": function(data) { const entState = GetEntityState(data.item.ents[0]); - const template = GetTemplateData(entState.template); + const template = GetTemplateData(entState.template, entState.player); if (!template) return false; @@ -1340,7 +1341,7 @@ g_SelectionPanels.Upgrade = { }, "setupButton": function(data) { - const template = GetTemplateData(data.item.entity); + const template = GetTemplateData(data.item.entity, data.player); if (!template) return false; @@ -1421,7 +1422,7 @@ g_SelectionPanels.Upgrade = { }; if (!requirementsMet || limits.canBeAddedCount == 0 && - !upgradableEntStates.some(state => hasSameRestrictionCategory(data.item.entity, state.template))) + !upgradableEntStates.some(state => hasSameRestrictionCategory(data.item.entity, state.template, state.player))) { data.button.enabled = false; modifier = "color:0 0 0 127:grayscale:"; diff --git a/binaries/data/mods/public/gui/session/selection_panels_helpers.js b/binaries/data/mods/public/gui/session/selection_panels_helpers.js index 99b055e54a..a2a84d87d9 100644 --- a/binaries/data/mods/public/gui/session/selection_panels_helpers.js +++ b/binaries/data/mods/public/gui/session/selection_panels_helpers.js @@ -19,10 +19,10 @@ function canMoveSelectionIntoFormation(formationTemplate) return g_canMoveIntoFormation[formationTemplate]; } -function hasSameRestrictionCategory(templateName1, templateName2) +function hasSameRestrictionCategory(templateName1, templateName2, player) { - const template1 = GetTemplateData(templateName1); - const template2 = GetTemplateData(templateName2); + const template1 = GetTemplateData(templateName1, player); + const template2 = GetTemplateData(templateName2, player); if (template1.trainingRestrictions && template2.trainingRestrictions) return template1.trainingRestrictions.category == template2.trainingRestrictions.category; diff --git a/binaries/data/mods/public/gui/session/session.js b/binaries/data/mods/public/gui/session/session.js index 523f0668c1..47a8039801 100644 --- a/binaries/data/mods/public/gui/session/session.js +++ b/binaries/data/mods/public/gui/session/session.js @@ -443,6 +443,7 @@ function updatePlayerData() playerData.push({ "name": playerState.name, + "id": i, "civ": playerState.civ, "color": { "r": playerState.color.r * 255, @@ -727,7 +728,8 @@ function updateGroups() // Determine the sum of the costs of a given template const getCostSum = (ent) => { - const cost = GetTemplateData(GetEntityState(ent).template).cost; + const entState = GetEntityState(ent); + const cost = GetTemplateData(entState.template, entState.player).cost; return cost ? Object.keys(cost).map(key => cost[key]).reduce((sum, cur) => sum + cur) : 0; };