From 1e09d33a9fa666edb223b3eeec24afbb98cac887 Mon Sep 17 00:00:00 2001 From: Atrik Date: Fri, 1 May 2026 14:41:24 +0200 Subject: [PATCH] Fix renamed entities on TurretPoint Oversights from fb1c0d2a82 Fixes #8808 --- .../public/simulation/helpers/Transform.js | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/binaries/data/mods/public/simulation/helpers/Transform.js b/binaries/data/mods/public/simulation/helpers/Transform.js index e0be13402e..b38d64852a 100644 --- a/binaries/data/mods/public/simulation/helpers/Transform.js +++ b/binaries/data/mods/public/simulation/helpers/Transform.js @@ -24,6 +24,12 @@ function ChangeEntityTemplate(oldEnt, newTemplate) if (cmpVisual && cmpNewVisual) cmpNewVisual.SetActorSeed(cmpVisual.GetActorSeed()); + // Set ownership so turret checks work properly + const cmpOwnership = Engine.QueryInterface(oldEnt, IID_Ownership); + const cmpNewOwnership = Engine.QueryInterface(newEnt, IID_Ownership); + if (cmpOwnership && cmpNewOwnership) + cmpNewOwnership.SetOwner(cmpOwnership.GetOwner()); + const cmpOldTurretable = Engine.QueryInterface(oldEnt, IID_Turretable); // If the old entity is turreted, we need to handle it before copying position @@ -39,9 +45,15 @@ function ChangeEntityTemplate(oldEnt, newTemplate) // Check if it's allowed to occupy the turret point const cmpTurretHolderOfOldEnt = Engine.QueryInterface(cmpOldTurretable.HolderID(), IID_TurretHolder); - if (cmpTurretHolderOfNewEnt && - !cmpTurretHolderOfOldEnt.AllowedToOccupyTurretPoint(newEnt, cmpOldTurretable.GetTurretPointName(), true)) - cmpOldTurretable.LeaveTurret(true); + if (cmpTurretHolderOfOldEnt) + { + // Find the actual turret point object using the old entity + const turretPoint = cmpTurretHolderOfOldEnt.GetOccupiedTurretPoint(oldEnt); + + if (!turretPoint || !cmpTurretHolderOfOldEnt.AllowedToOccupyTurretPoint(newEnt, turretPoint, true)) + cmpOldTurretable.LeaveTurret(true); + // If allowed, don't leave the turret - OnEntityRenamed will handle the swap + } } } @@ -86,11 +98,6 @@ function ChangeEntityTemplate(oldEnt, newTemplate) for (const entity of cmpTurretHolder.GetEntities()) cmpNewTurretHolder.SetReservedTurretPoint(cmpTurretHolder.GetOccupiedTurretPointName(entity)); - const cmpOwnership = Engine.QueryInterface(oldEnt, IID_Ownership); - const cmpNewOwnership = Engine.QueryInterface(newEnt, IID_Ownership); - if (cmpOwnership && cmpNewOwnership) - cmpNewOwnership.SetOwner(cmpOwnership.GetOwner()); - CopyControlGroups(oldEnt, newEnt); // Rescale capture points