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() {