This commit is contained in:
2025-10-15 14:44:17 +08:00
parent 16c4230358
commit 9c2b791bd2
3 changed files with 39 additions and 16 deletions

Binary file not shown.

View File

@@ -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;

View File

@@ -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