diff --git a/1.6/1.6/Assemblies/ArachnaeSwarm.dll b/1.6/1.6/Assemblies/ArachnaeSwarm.dll
index 306aac2..f9a4ea8 100644
Binary files a/1.6/1.6/Assemblies/ArachnaeSwarm.dll and b/1.6/1.6/Assemblies/ArachnaeSwarm.dll differ
diff --git a/1.6/1.6/Defs/AbilityDefs/Ability_Morph.xml b/1.6/1.6/Defs/AbilityDefs/Ability_Morph.xml
index 6731b3e..bf34421 100644
--- a/1.6/1.6/Defs/AbilityDefs/Ability_Morph.xml
+++ b/1.6/1.6/Defs/AbilityDefs/Ability_Morph.xml
@@ -70,7 +70,22 @@
ResearchSpeedFactor
+
1.0
+
+
+ 离开织座
+
+
+ 使织域种离开织座。
+
+
+ UI/Commands/EggSpew
diff --git a/Source/ArachnaeSwarm/Morphable/Building_Morphable.cs b/Source/ArachnaeSwarm/Morphable/Building_Morphable.cs
index b566746..fb7b50b 100644
--- a/Source/ArachnaeSwarm/Morphable/Building_Morphable.cs
+++ b/Source/ArachnaeSwarm/Morphable/Building_Morphable.cs
@@ -223,7 +223,19 @@ namespace ArachnaeSwarm
// 计算将要对 Pawn 造成的伤害
float damageProportion = dinfo.Amount / this.def.statBases.GetStatValueFromList(StatDefOf.MaxHitPoints, 1f);
float pawnDamage = pawn.MaxHitPoints * damageProportion;
- DamageInfo pawnDinfo = new DamageInfo(dinfo.Def, pawnDamage, dinfo.ArmorPenetrationInt, dinfo.Angle, dinfo.Instigator, null, dinfo.Weapon, dinfo.Category, dinfo.IntendedTarget);
+
+ // 关键修复:创建一个新的、干净的DamageInfo,不指定hitPart,让游戏自动选择有效的部位
+ DamageInfo pawnDinfo = new DamageInfo(
+ def: dinfo.Def,
+ amount: pawnDamage,
+ armorPenetration: dinfo.ArmorPenetrationInt,
+ angle: dinfo.Angle,
+ instigator: dinfo.Instigator,
+ hitPart: null, // 明确设为null,防止继承无效上下文
+ weapon: dinfo.Weapon,
+ category: dinfo.Category,
+ intendedTarget: dinfo.IntendedTarget
+ );
// 调用统一的转换方法,它会处理建筑的移除、Pawn的生成和状态同步
compMorphable.TransformBackToPawn();
diff --git a/Source/ArachnaeSwarm/Morphable/CompMorphable.cs b/Source/ArachnaeSwarm/Morphable/CompMorphable.cs
index f2f8dc3..9605bd5 100644
--- a/Source/ArachnaeSwarm/Morphable/CompMorphable.cs
+++ b/Source/ArachnaeSwarm/Morphable/CompMorphable.cs
@@ -28,13 +28,21 @@ namespace ArachnaeSwarm
{
if (parent.Faction == Faction.OfPlayer && storedPawn != null)
{
- yield return new Command_Action
+ Command_Action command = new Command_Action();
+ command.defaultLabel = Props.gizmoLabel;
+ command.defaultDesc = Props.gizmoDesc;
+ command.action = () => { TransformBackToPawn(); };
+
+ if (!Props.gizmoIconPath.NullOrEmpty())
{
- defaultLabel = "恢复人形",
- defaultDesc = "将此建筑恢复为人形。",
- icon = TexCommand.ReleaseAnimals, // TODO: Replace with a proper icon
- action = () => { TransformBackToPawn(); }
- };
+ command.icon = ContentFinder.Get(Props.gizmoIconPath);
+ }
+ else
+ {
+ command.icon = TexCommand.ReleaseAnimals; // Fallback icon
+ }
+
+ yield return command;
}
}
diff --git a/Source/ArachnaeSwarm/Morphable/CompProperties_Morphable.cs b/Source/ArachnaeSwarm/Morphable/CompProperties_Morphable.cs
index 3d1770c..f0e4674 100644
--- a/Source/ArachnaeSwarm/Morphable/CompProperties_Morphable.cs
+++ b/Source/ArachnaeSwarm/Morphable/CompProperties_Morphable.cs
@@ -5,7 +5,12 @@ namespace ArachnaeSwarm
{
public class CompProperties_Morphable : CompProperties
{
- public float restGainMultiplier = 1f; // Default to 1.0 if not specified in XML
+ public float restGainMultiplier = 1f;
+
+ // Gizmo properties
+ public string gizmoLabel = "离开织座";
+ public string gizmoDesc = "使织域种离开织座。";
+ public string gizmoIconPath;
public CompProperties_Morphable()
{