diff --git a/1.6/1.6/Assemblies/ArachnaeSwarm.dll b/1.6/1.6/Assemblies/ArachnaeSwarm.dll index 5b8856e..dee47a2 100644 Binary files a/1.6/1.6/Assemblies/ArachnaeSwarm.dll and b/1.6/1.6/Assemblies/ArachnaeSwarm.dll differ diff --git a/Source/ArachnaeSwarm/PowerArmor/ARA_PowerArmor.cs b/Source/ArachnaeSwarm/PowerArmor/ARA_PowerArmor.cs index 2b48001..b7668de 100644 --- a/Source/ArachnaeSwarm/PowerArmor/ARA_PowerArmor.cs +++ b/Source/ArachnaeSwarm/PowerArmor/ARA_PowerArmor.cs @@ -52,12 +52,18 @@ namespace ArachnaeSwarm public float StructurePointsPercent => StructurePoints / StructurePointsMax; public Building sourceBuilding; - private ThingWithComps originalWeapon; + private ThingWithComps originalWeapon; // Still needed to store pawn's original weapon + private ThingWithComps currentPowerArmorWeapon; // Track the currently equipped power armor weapon public void SetOriginalWeapon(ThingWithComps weapon) { originalWeapon = weapon; } + + public void SetCurrentPowerArmorWeapon(ThingWithComps weapon) + { + currentPowerArmorWeapon = weapon; + } #endregion #region Ticker @@ -118,6 +124,7 @@ namespace ArachnaeSwarm Scribe_Values.Look(ref structurePoints, "structurePoints", -1f); Scribe_References.Look(ref sourceBuilding, "sourceBuilding"); Scribe_References.Look(ref originalWeapon, "originalWeapon"); + Scribe_References.Look(ref currentPowerArmorWeapon, "currentPowerArmorWeapon"); // Save/load current power armor weapon } #endregion @@ -151,23 +158,39 @@ namespace ArachnaeSwarm { base.Notify_Unequipped(pawn); - // Handle weapon restoration - if (Ext?.powerArmorWeapon != null && pawn?.equipment != null) + // Handle power armor weapon destruction and original weapon restoration + if (Ext?.powerArmorWeapon != null) { - ThingWithComps primaryWeapon = pawn.equipment.Primary; - if (primaryWeapon != null && primaryWeapon.def == Ext.powerArmorWeapon) + // Destroy the power armor weapon, wherever it might be. + // We track it with currentPowerArmorWeapon, so we don't rely on pawn.equipment.Primary. + if (currentPowerArmorWeapon != null) { - // Destroy the power armor's weapon instead of dropping it. - pawn.equipment.Remove(primaryWeapon); - primaryWeapon.Destroy(); + if (pawn?.equipment != null && pawn.equipment.Contains(currentPowerArmorWeapon)) + { + pawn.equipment.Remove(currentPowerArmorWeapon); + } + else if (pawn?.inventory?.innerContainer != null && pawn.inventory.innerContainer.Contains(currentPowerArmorWeapon)) + { + pawn.inventory.innerContainer.Remove(currentPowerArmorWeapon); + } + // If it's on the map, destroy it there. + else if (currentPowerArmorWeapon.Spawned) + { + currentPowerArmorWeapon.DeSpawn(); + } + currentPowerArmorWeapon.Destroy(); + Log.Message($"[PA_Debug] Notify_Unequipped: Destroyed power armor weapon {currentPowerArmorWeapon.Label}."); + currentPowerArmorWeapon = null; } - } - if (originalWeapon != null && pawn?.equipment != null) - { - pawn.equipment.MakeRoomFor(originalWeapon); - pawn.equipment.AddEquipment(originalWeapon); - originalWeapon = null; + // Restore original weapon if saved + if (originalWeapon != null && pawn?.equipment != null) + { + pawn.equipment.MakeRoomFor(originalWeapon); + pawn.equipment.AddEquipment(originalWeapon); + originalWeapon = null; + Log.Message($"[PA_Debug] Notify_Unequipped: Restored original weapon {originalWeapon.Label}."); + } } Building building = sourceBuilding; diff --git a/Source/ArachnaeSwarm/PowerArmor/JobDriver_EnterPowerArmor.cs b/Source/ArachnaeSwarm/PowerArmor/JobDriver_EnterPowerArmor.cs index 9b7c899..7ff93df 100644 --- a/Source/ArachnaeSwarm/PowerArmor/JobDriver_EnterPowerArmor.cs +++ b/Source/ArachnaeSwarm/PowerArmor/JobDriver_EnterPowerArmor.cs @@ -80,8 +80,8 @@ namespace ArachnaeSwarm actor.equipment.MakeRoomFor(weapon); actor.equipment.AddEquipment(weapon); - // Set the weapon as bonded to the pawn, effectively locking it. - actor.equipment.bondedWeapon = weapon; + // Track the power armor weapon so it can be destroyed later + apparel.SetCurrentPowerArmorWeapon(weapon); } // Despawn the building