diff --git a/1.6/1.6/Assemblies/ArachnaeSwarm.dll b/1.6/1.6/Assemblies/ArachnaeSwarm.dll index e6dc5e6..0f0041e 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/ARA_Abilities.xml b/1.6/1.6/Defs/AbilityDefs/ARA_Abilities.xml index c601089..f16ec65 100644 --- a/1.6/1.6/Defs/AbilityDefs/ARA_Abilities.xml +++ b/1.6/1.6/Defs/AbilityDefs/ARA_Abilities.xml @@ -232,7 +232,7 @@ 阿拉克涅女皇种向目标地点喷射大量腐蚀性酸液,喷射将持续数秒以完全覆盖一片区域。 ArachnaeSwarm/UI/Abilities/ARA_AcidSprayBurst 5000 - true + false 300 AcidSpray_Warmup @@ -308,7 +308,7 @@ 阿拉克涅督虫向目标地点喷射大量腐蚀性酸液,虽然不如女皇种所喷射的酸雨那样强劲,但是虫酸的伤害依然是实打实的。 ArachnaeSwarm/UI/Abilities/ARA_AcidSprayBurst 12000 - true + false 300 AcidSpray_Warmup @@ -871,6 +871,7 @@ 3800 true false + false false true false @@ -930,7 +931,7 @@ 7500 true false - true + false true 300 false @@ -992,7 +993,7 @@ ArachnaeSwarm/UI/Abilities/ARA_TerrainTempt_Ability 13500 true - true + false true 300 false diff --git a/1.6/1.6/Defs/EventDefs/ARA_Loop_Attack_EventDef.xml b/1.6/1.6/Defs/EventDefs/ARA_Loop_Attack_EventDef.xml new file mode 100644 index 0000000..21a59fa --- /dev/null +++ b/1.6/1.6/Defs/EventDefs/ARA_Loop_Attack_EventDef.xml @@ -0,0 +1,131 @@ + + + + ARA_Loop_Raid_Incident + + Misc + +
  • Map_PlayerHome
  • +
    + + + IncidentWorker_GiveQuest + + + ARA_Loop_Raid_Quest + + +
    + + ARA_Loop_Raid_Quest + + 虫群袭击description + + +
  • + + +
  • questName->虫群袭击
  • + + + +
  • + + +
  • questDescription->虫群袭击questDescription
  • + + + +
  • + 虫群袭击Label + 虫群袭击Title + 虫群袭击Text + +
  • + + +
  • + +
  • + ARA_Loop_Raid_Main_Event_1 +
  • + + + + + + +
    +
    +
    + + ARA_Loop_Raid_Main_Event_1 + 嘻嘻 + true + +
  • + + +
  • + 10000 + ARA_Hostile_Hive + ImmediateAttack + EdgeWalkIn + Combat + +
  • + Combat + 100 + + 20 + 5 + +
  • + + +
  • + 10000 + ARA_Hostile_Hive + ImmediateAttack + EdgeWalkIn + Combat + +
  • + Combat + 100 + + 20 + 3 + +
  • + + +
  • + 10000 + ARA_Hostile_Hive + ImmediateAttack + EdgeWalkIn + Combat + +
  • + Combat + 100 + + 20 + 3 + 7 + +
  • + + + + + + +
    +
    +
    \ No newline at end of file diff --git a/1.6/1.6/Defs/EvolutionDefs/ARA_Evolution.xml b/1.6/1.6/Defs/EvolutionDefs/ARA_Evolution.xml index b4b4d7a..495a6f9 100644 --- a/1.6/1.6/Defs/EvolutionDefs/ARA_Evolution.xml +++ b/1.6/1.6/Defs/EvolutionDefs/ARA_Evolution.xml @@ -45,7 +45,7 @@ true true false - true + false true false CastAbilityOnThing @@ -109,7 +109,7 @@ true true false - true + false true false CastAbilityOnThing @@ -196,7 +196,7 @@ true true false - true + false true false CastAbilityOnThing @@ -271,7 +271,7 @@ true true false - true + false true false CastAbilityOnThing @@ -422,7 +422,7 @@ true true false - true + false true false CastAbilityOnThing @@ -538,7 +538,7 @@ true true false - true + false true false CastAbilityOnThing @@ -690,7 +690,7 @@ true true false - true + false true false CastAbilityOnThing @@ -868,7 +868,7 @@ true true false - true + false true false CastAbilityOnThing @@ -984,7 +984,7 @@ true true false - true + false true false CastAbilityOnThing diff --git a/1.6/1.6/Defs/FactionDefs/ARA_Factions_Hostile_Hive.xml b/1.6/1.6/Defs/FactionDefs/ARA_Factions_Hostile_Hive.xml index ab74b32..099444c 100644 --- a/1.6/1.6/Defs/FactionDefs/ARA_Factions_Hostile_Hive.xml +++ b/1.6/1.6/Defs/FactionDefs/ARA_Factions_Hostile_Hive.xml @@ -6,40 +6,101 @@ 向闪耀世界方向侵略的阿拉克涅虫巢舰队被闪耀世界联军击败后,残留于星域中的虫群子个体。这些虫群子个体由于无法和蜂巢网络建立联系,其自行组织的反常网络只有低度的智能,只能让其成员如野兽般行动——然而她们依然是一群危险的敌人,于无数敌手交战留下的基因性反射使得她们的锋芒不减当年。\n\n她们不会对任何人展现仁慈,即使她们的对手是自己的同族。 虫群 虫群 + RealWula_PawnKind + ARA_Hostile_Hive 1 - 阿拉克涅断须 - World/WorldObjects/Expanding/Insects + ARA_New_Hive_NamerFaction + Wula/World/WorldObjects/Expanding/Wula_FE_Faction + false + + false + false + +
  • + +
  • Offworld
  • + + +
    + Animal + +
  • Surface
  • + +
    -
  • (0.44, 0.41, 0.32)
  • -
  • (0.61, 0.58, 0.49)
  • -
  • (0.60, 0.49, 0.36)
  • +
  • (0.6, 0.5, 0.9)
  • + -
  • (0, 0)
  • +
  • (300, 0)
  • +
  • (700, 0)
  • +
  • (1400, 0)
  • +
  • (2800, 0)
  • +
  • (4000, 0)
  • + +
  • + + Combat + + 7 + 3 + +
  • +
  • + Settlement + + 10 + 7 + 10 + 10 + +
  • +
    + + + +
  • (35, 8)
  • +
  • (100, 60)
  • +
  • (1000, 250)
  • +
  • (2000, 400)
  • +
  • (4000, 500)
  • +
    +
    + true + true + + false + + +
  • Cloth
  • +
    +
    + 0 + true + true -
  • (100,100)
  • -
  • (10000,10000)
  • +
  • (400,200)
  • +
  • (900,300)
  • +
  • (100000,10000)
  • - - - - false - true - false - false - Animal - false - -
  • Entities
  • -
    World/WorldObjects/DefaultSettlement -2000~2000 1 - 1000 + 900 + ActiveDropPodMechanoid + DropPodIncomingMechanoidRapid + +
  • Children
  • +
    \ No newline at end of file diff --git a/1.6/1.6/Defs/HediffDefs/ARA_Hediffs_HiveMind.xml b/1.6/1.6/Defs/HediffDefs/ARA_Hediffs_HiveMind.xml index 974d4be..b0387b7 100644 --- a/1.6/1.6/Defs/HediffDefs/ARA_Hediffs_HiveMind.xml +++ b/1.6/1.6/Defs/HediffDefs/ARA_Hediffs_HiveMind.xml @@ -30,20 +30,6 @@
  • 3200
  • -
  • - 6 - ARA_CreepyCrawly_Hediff - - true - - false - false - false - false - true - - false -
  • @@ -71,20 +57,6 @@ -
  • - 6 - ARA_CreepyCrawly_Hediff - - true - - false - false - false - false - true - - false -
  • 6400
  • @@ -94,8 +66,47 @@ 一只新的阿拉克涅督虫 {0_labelShort} 已经破茧而出!她正在四处徘徊,等待女皇种的指示——使用阿拉克涅女皇种的信息素标记技能完成链接,或者等待其自行建立链接。 HumanPregnancy +
  • + +
  • ARA_NonPlayer_HiveMindDroneHediff
  • + +
    + + ARA_NonPlayer_HiveMindDroneHediff + + 与阿拉克涅虫群蜂巢意志断开链接的督虫只会如野兽般行动——女皇种可以重新接管它们。 + + (0.6, 0.4, 0.8) + false + false + +
  • + 0 + 0 + +
  • Mood
  • +
  • Joy
  • +
  • Beauty
  • +
  • Comfort
  • +
  • Outdoors
  • +
  • Indoors
  • +
  • DrugDesire
  • +
  • RoomSize
  • + + +
    +
    + + ARA_NonPlayerHediffSet + +
  • + ARA_NonPlayer_HiveMindDroneHediff + 0.1 +
  • +
    +
    ARA_HiveMindWorker @@ -104,22 +115,6 @@ (0.6, 0.4, 0.8) false false - -
  • - 6 - ARA_CreepyCrawly_Hediff - - true - - false - false - false - false - true - - false -
  • -
  • 0 @@ -192,9 +187,9 @@ ARA_LifespanHediff - Hediff_High + HediffWithComps (0.6, 0.8, 0.9) - 0.01 + 0.01 阿拉克涅虫族记录寿命的hediff,正常情况下你不应该看见这个。 @@ -204,6 +199,9 @@ false
  • + +
  • + ARA_TemperatureRegulation @@ -249,52 +247,6 @@
  • - - ARA_CreepyCrawly_Hediff - - 快把这些虫子从我身边支开! - (0.52, 1, 0.95) - HediffWithComps - false - other - 1 - 1 - -
  • - 0 - false -
  • -
    - -
  • - false -
  • -
  • -
  • -
    -
    - - Mote_ARA_CreepyCrawly_HediffLinkLine - MoteDualAttached - MoteLow - - 0.1 - 0.1 - 999999 - True - True - True - - - MoteGlow - Things/Mote/WorkCommandLinkLine - (0,0,0,0) - - ARA_RaceBaseSwarmProduceSwitchHediff diff --git a/1.6/1.6/Defs/HiveRaidDef/ARA_CustomRaidDef.xml b/1.6/1.6/Defs/HiveRaidDef/ARA_CustomRaidDef.xml index 2825e0b..b896818 100644 --- a/1.6/1.6/Defs/HiveRaidDef/ARA_CustomRaidDef.xml +++ b/1.6/1.6/Defs/HiveRaidDef/ARA_CustomRaidDef.xml @@ -7,7 +7,7 @@
  • 0 - 800 + 800 ARA_WavePool_Stage1
  • diff --git a/1.6/1.6/Defs/MemeDefs/ARA_Memes.xml b/1.6/1.6/Defs/MemeDefs/ARA_Memes.xml index 609e3e8..29836eb 100644 --- a/1.6/1.6/Defs/MemeDefs/ARA_Memes.xml +++ b/1.6/1.6/Defs/MemeDefs/ARA_Memes.xml @@ -3,7 +3,7 @@ ARA_Hive_Worship - 这些美丽的节肢类动物便是无上意志派来拯救我们的使者。 + 这些美丽的节肢类动物便是无上意志派来拯救我们的使者。(虫群恐惧已经删除,该文化即将废弃,如果你是开新档请勿选择) ArachnaeSwarm/UI/Memes/ARA_Hive_Worship Misc 2 @@ -125,10 +125,6 @@ 20 1000 -
  • - ARA_CreepyCrawly - 对虫群的恐惧 -
  • \ No newline at end of file diff --git a/1.6/1.6/Defs/PawnKindDef/ARA_Hostile_Hive_PawnKinds.xml b/1.6/1.6/Defs/PawnKindDef/ARA_Hostile_Hive_PawnKinds.xml index 39e1e51..c0447ee 100644 --- a/1.6/1.6/Defs/PawnKindDef/ARA_Hostile_Hive_PawnKinds.xml +++ b/1.6/1.6/Defs/PawnKindDef/ARA_Hostile_Hive_PawnKinds.xml @@ -23,7 +23,7 @@
  • ARA_Creep - 3.0 + 1.5
  • @@ -43,7 +43,7 @@
  • ARA_Clothes
  • 200 - 200 + 50000
  • ARA_BaseRace_Acid_Launcher
  • @@ -62,10 +62,10 @@
  • ARA_Inner
  • 150 - 400 - 100 + 50000 + 0 -
  • ARA_Hibernate_Ability
  • +
  • ARA_BaseRace_Acid_Launcher
  • @@ -112,7 +112,7 @@
  • ARA_Clothes
  • 400 - 600 + 1200 0 diff --git a/1.6/1.6/Defs/PawnKindDef/ARA_PawnKinds.xml b/1.6/1.6/Defs/PawnKindDef/ARA_PawnKinds.xml index e29b107..a46812f 100644 --- a/1.6/1.6/Defs/PawnKindDef/ARA_PawnKinds.xml +++ b/1.6/1.6/Defs/PawnKindDef/ARA_PawnKinds.xml @@ -38,7 +38,7 @@
  • ARA_Creep - 3.0 + 1.5
  • diff --git a/1.6/1.6/Defs/ThingDef_Races/ARA_RaceQueen.xml b/1.6/1.6/Defs/ThingDef_Races/ARA_RaceQueen.xml index b5bcb12..8bd206d 100644 --- a/1.6/1.6/Defs/ThingDef_Races/ARA_RaceQueen.xml +++ b/1.6/1.6/Defs/ThingDef_Races/ARA_RaceQueen.xml @@ -120,6 +120,7 @@
  • OrganicStandard
  • Human
  • +
  • ARA_NonPlayerHediffSet
  • @@ -462,7 +463,6 @@
  • ColonistLost
  • KnowColonistDied
  • PsychicDrone
  • -
  • ARA_CreepyCrawly
  • Naked
  • AnyBodyPartButGroinCovered_Disapproved_Female
  • AnyBodyPartButGroinCovered_Disapproved_Male
  • diff --git a/1.6/1.6/Defs/Thing_Misc/Weapons/ARA_Weapon.xml b/1.6/1.6/Defs/Thing_Misc/Weapons/ARA_Weapon.xml index d43b40d..8e672b7 100644 --- a/1.6/1.6/Defs/Thing_Misc/Weapons/ARA_Weapon.xml +++ b/1.6/1.6/Defs/Thing_Misc/Weapons/ARA_Weapon.xml @@ -20,7 +20,7 @@ CutoutComplex 1 - 0 + 0.01 None 1 @@ -138,7 +138,7 @@ ARA_Technology_2MEL UnfinishedWeapon - 0 + 0.01 None @@ -218,7 +218,7 @@ ARA_Technology_3MEL UnfinishedWeapon - 0 + 0.01 None @@ -311,12 +311,9 @@ 25 -
  • ARA_Armed_Organ
  • -
  • ARA_Armed_Organ_Ranged
  • -
  • ARA_Armed_Organ_T1
  • ARA_Armed_Organ_Small_Ranged_Needle
  • - 0 + 0.01 None @@ -412,7 +409,7 @@ true false 0.8 - Bullet_ARA_RW_Basic_Fist_Needle_Gun + Bullet_ARA_RW_Toxic_Needle_MG 25.9 48 1 @@ -431,7 +428,7 @@
  • ARA_Armed_Organ_T2
  • ARA_Armed_Organ_Small_Ranged_Needle
  • - 0 + 0.01 None @@ -529,7 +526,7 @@
  • ARA_Armed_Organ_T2
  • ARA_Armed_Organ_Small_Ranged_Needle
  • - 0 + 0.01 None @@ -643,7 +640,7 @@
  • ARA_Armed_Organ_T2
  • ARA_Armed_Organ_Huge_Ranged_Needle
  • - 0 + 0.01 None @@ -759,7 +756,7 @@
  • ARA_Armed_Organ_T2
  • ARA_Armed_Organ_Small_Ranged_Needle
  • - 0 + 0.01 None @@ -862,7 +859,7 @@
  • ARA_Armed_Organ_T1
  • ARA_Armed_Organ_Small_Ranged_Acid
  • - 0 + 0.01 None @@ -978,7 +975,7 @@
  • ARA_Armed_Organ_T2
  • ARA_Armed_Organ_Huge_Ranged_Acid
  • - 0 + 0.01 None @@ -1128,7 +1125,7 @@
  • ARA_Armed_Organ_T2
  • ARA_Armed_Organ_Huge_Ranged_Acid
  • - 0 + 0.01 None @@ -1247,7 +1244,7 @@
  • ARA_Armed_Organ_T3
  • ARA_Armed_Organ_Small_Ranged_Acid
  • - 0 + 0.01 None @@ -1382,7 +1379,7 @@
  • ARA_Armed_Organ_T3
  • ARA_Armed_Organ_Huge_Ranged_Acid
  • - 0 + 0.01 None @@ -1519,7 +1516,7 @@
  • ARA_Armed_Organ_T1
  • ARA_Armed_Organ_Small_Ranged_SP
  • - 0 + 0.01 None @@ -1672,7 +1669,7 @@
  • ARA_Armed_Organ_T2
  • ARA_Armed_Organ_Small_Ranged_Energy
  • - 0 + 0.01 None @@ -1779,7 +1776,7 @@
  • ARA_Armed_Organ_T2
  • ARA_Armed_Organ_Huge_Ranged_Energy
  • - 0 + 0.01 None @@ -1835,9 +1832,9 @@ 阿拉克涅虫群督虫使用基础近战武装器官,通过多根外露神经束与督虫的辅肢相连。这根毒针中藏有休眠中的阿拉克涅拟线种虫卵,攻击将感染受害者使其最终成为被拟线虫操控的寄生体。 -
  • ARA_Armed_Organ
  • +
    ArachnaeSwarm/Weapon/ARA_MW_Bone_Sword @@ -1889,7 +1886,7 @@ UnfinishedWeapon - 0 + 0.01 None diff --git a/1.6/1.6/Defs/Thing_Plant/ARA_Plant.xml b/1.6/1.6/Defs/Thing_Plant/ARA_Plant.xml index 6d8e52c..8e1ddb5 100644 --- a/1.6/1.6/Defs/Thing_Plant/ARA_Plant.xml +++ b/1.6/1.6/Defs/Thing_Plant/ARA_Plant.xml @@ -19,7 +19,7 @@ 0.05 0.05 - 6 + 3 10 ARA_CreepFungus diff --git a/1.6/1.6/Defs/Thing_building/ARA_Building.xml b/1.6/1.6/Defs/Thing_building/ARA_Building.xml index 1fbd5c3..e520e7e 100644 --- a/1.6/1.6/Defs/Thing_building/ARA_Building.xml +++ b/1.6/1.6/Defs/Thing_building/ARA_Building.xml @@ -14,7 +14,7 @@ FadeRough 0 330 - 10 + 0 Filth_Slime
  • ARA_Base_Technology
  • diff --git a/1.6/1.6/Defs/Thing_building/ARA_InteractiveEggSac.xml b/1.6/1.6/Defs/Thing_building/ARA_InteractiveEggSac.xml index 4d958b8..c118224 100644 --- a/1.6/1.6/Defs/Thing_building/ARA_InteractiveEggSac.xml +++ b/1.6/1.6/Defs/Thing_building/ARA_InteractiveEggSac.xml @@ -526,7 +526,7 @@
  • - 500 + 100 精华素 @@ -534,10 +534,10 @@ 0 - true + false 0.02 1 - 999 + 0
  • @@ -691,10 +691,10 @@ 0 - true + false 0.2 1 - 20 + 0
  • @@ -712,10 +712,10 @@ 0 - true + false 1 1 - 20 + 0
    @@ -801,10 +801,10 @@ 0 - true + false 0.2 1 - 20 + 0
    @@ -822,10 +822,10 @@ 0 - true + false 1 1 - 20 + 0
    @@ -919,10 +919,10 @@ 0 - true + false 0.2 1 - 60 + 30
    @@ -940,10 +940,10 @@ 0 - true + false 1 1 - 60 + 30
    @@ -1032,10 +1032,10 @@ 0 - true + false 0.2 1 - 60 + 30
    @@ -1053,10 +1053,10 @@ 0 - true + false 1 1 - 60 + 30
    @@ -1142,7 +1142,7 @@ 0 - true + false 0.2 1 110 @@ -1163,7 +1163,7 @@ 0 - true + false 1 1 110 @@ -1276,7 +1276,7 @@ 0 - true + false 0.2 1 110 @@ -1297,7 +1297,7 @@ 0 - true + false 1 1 110 @@ -1405,7 +1405,7 @@ 0 - true + false 0.2 1 999 @@ -1426,7 +1426,7 @@ 0 - true + false 1 1 999 diff --git a/1.6/1.6/Defs/Thing_building/ARA_RefuelingVat.xml b/1.6/1.6/Defs/Thing_building/ARA_RefuelingVat.xml index 8616d04..e8f3e31 100644 --- a/1.6/1.6/Defs/Thing_building/ARA_RefuelingVat.xml +++ b/1.6/1.6/Defs/Thing_building/ARA_RefuelingVat.xml @@ -94,7 +94,7 @@
  • - 5 + 8 1
  • diff --git a/1.6/1.6/Defs/ThoughtDefs/ARA_Thoughts.xml b/1.6/1.6/Defs/ThoughtDefs/ARA_Thoughts.xml index adbb3ff..d05c2cc 100644 --- a/1.6/1.6/Defs/ThoughtDefs/ARA_Thoughts.xml +++ b/1.6/1.6/Defs/ThoughtDefs/ARA_Thoughts.xml @@ -1,19 +1,3 @@  - - ARA_CreepyCrawly - ThoughtWorker_Hediff - ARA_CreepyCrawly_Hediff - true - -
  • ARA_Hive_Dear
  • -
    - -
  • - - 受不了了,快把这些虫子从我身边支开! - -30 -
  • -
    -
    diff --git a/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/.suo b/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/.suo index 4c5d520..bfd9886 100644 Binary files a/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/.suo and b/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/.suo differ diff --git a/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/DocumentLayout.json b/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/DocumentLayout.json index 9e1b40a..3187ad5 100644 --- a/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/DocumentLayout.json +++ b/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/DocumentLayout.json @@ -1,13 +1,33 @@ { "Version": 1, - "WorkspaceRootPath": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\", + "WorkspaceRootPath": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\", "Documents": [ { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|d:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\storyteller\\incidentworker_customraid.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|e:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\pawn_comps\\ara_nodeswarmlifetime\\compnodeswarmlifetime.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:pawn_comps\\ara_nodeswarmlifetime\\compnodeswarmlifetime.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|e:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\hediffs\\hediffcomp_lifespandisplay.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:hediffs\\hediffcomp_lifespandisplay.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|e:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\hediffs\\hediffcomp_temperature.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:hediffs\\hediffcomp_temperature.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|e:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\hediffs\\hediffcomp_spawnpawnonremoved.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:hediffs\\hediffcomp_spawnpawnonremoved.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|e:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\hediffgiver\\hediffgiver_nonplayerfaction.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:hediffgiver\\hediffgiver_nonplayerfaction.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\storyteller\\incidentworker_customraid.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:storyteller\\incidentworker_customraid.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|d:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\storyteller\\raidwavedef.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\storyteller\\raidwavedef.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:storyteller\\raidwavedef.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" } ], @@ -18,7 +38,7 @@ "DocumentGroups": [ { "DockedWidth": 200, - "SelectedChildIndex": 2, + "SelectedChildIndex": 1, "Children": [ { "$type": "Bookmark", @@ -26,29 +46,91 @@ }, { "$type": "Document", - "DocumentIndex": 1, - "Title": "RaidWaveDef.cs", - "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Storyteller\\RaidWaveDef.cs", - "RelativeDocumentMoniker": "Storyteller\\RaidWaveDef.cs", - "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Storyteller\\RaidWaveDef.cs*", - "RelativeToolTip": "Storyteller\\RaidWaveDef.cs*", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAkAAAA9AAAAAAAAAA==", + "DocumentIndex": 0, + "Title": "CompNodeSwarmLifetime.cs", + "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_NodeSwarmLifetime\\CompNodeSwarmLifetime.cs", + "RelativeDocumentMoniker": "Pawn_Comps\\ARA_NodeSwarmLifetime\\CompNodeSwarmLifetime.cs", + "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_NodeSwarmLifetime\\CompNodeSwarmLifetime.cs", + "RelativeToolTip": "Pawn_Comps\\ARA_NodeSwarmLifetime\\CompNodeSwarmLifetime.cs", + "ViewState": "AgIAAPwAAAAAAAAAAAAYwBYBAABIAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-10-16T09:14:26.956Z", + "WhenOpened": "2025-10-16T15:17:15.994Z", "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 0, - "Title": "IncidentWorker_CustomRaid.cs", - "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Storyteller\\IncidentWorker_CustomRaid.cs", - "RelativeDocumentMoniker": "Storyteller\\IncidentWorker_CustomRaid.cs", - "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Storyteller\\IncidentWorker_CustomRaid.cs*", - "RelativeToolTip": "Storyteller\\IncidentWorker_CustomRaid.cs*", - "ViewState": "AgIAAHgBAAAAAAAAAAA1wJIBAAAfAAAAAAAAAA==", + "DocumentIndex": 2, + "Title": "HediffComp_Temperature.cs", + "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\HediffComp_Temperature.cs", + "RelativeDocumentMoniker": "Hediffs\\HediffComp_Temperature.cs", + "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\HediffComp_Temperature.cs", + "RelativeToolTip": "Hediffs\\HediffComp_Temperature.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAwAAAAYAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-10-16T07:14:58.682Z", + "WhenOpened": "2025-10-16T15:13:58.773Z", "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 3, + "Title": "HediffComp_SpawnPawnOnRemoved.cs", + "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\HediffComp_SpawnPawnOnRemoved.cs", + "RelativeDocumentMoniker": "Hediffs\\HediffComp_SpawnPawnOnRemoved.cs", + "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\HediffComp_SpawnPawnOnRemoved.cs", + "RelativeToolTip": "Hediffs\\HediffComp_SpawnPawnOnRemoved.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-10-16T15:13:49.858Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 1, + "Title": "HediffComp_LifespanDisplay.cs", + "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\HediffComp_LifespanDisplay.cs", + "RelativeDocumentMoniker": "Hediffs\\HediffComp_LifespanDisplay.cs", + "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\HediffComp_LifespanDisplay.cs", + "RelativeToolTip": "Hediffs\\HediffComp_LifespanDisplay.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAABMAAAANAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-10-16T15:13:38.519Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 4, + "Title": "HediffGiver_NonPlayerFaction.cs", + "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\HediffGiver\\HediffGiver_NonPlayerFaction.cs", + "RelativeDocumentMoniker": "HediffGiver\\HediffGiver_NonPlayerFaction.cs", + "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\HediffGiver\\HediffGiver_NonPlayerFaction.cs", + "RelativeToolTip": "HediffGiver\\HediffGiver_NonPlayerFaction.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAACoAAAAFAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-10-16T12:07:58.018Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 6, + "Title": "RaidWaveDef.cs", + "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Storyteller\\RaidWaveDef.cs", + "RelativeDocumentMoniker": "Storyteller\\RaidWaveDef.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Storyteller\\RaidWaveDef.cs*", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAkAAAA9AAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-10-16T09:14:26.956Z" + }, + { + "$type": "Document", + "DocumentIndex": 5, + "Title": "IncidentWorker_CustomRaid.cs", + "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Storyteller\\IncidentWorker_CustomRaid.cs", + "RelativeDocumentMoniker": "Storyteller\\IncidentWorker_CustomRaid.cs", + "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Storyteller\\IncidentWorker_CustomRaid.cs", + "RelativeToolTip": "Storyteller\\IncidentWorker_CustomRaid.cs", + "ViewState": "AgIAAHkBAAAAAAAAAAAUwJIBAAAfAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-10-16T07:14:58.682Z" } ] } diff --git a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj index e32f2e2..95a85e0 100644 --- a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj +++ b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj @@ -119,6 +119,8 @@ + + diff --git a/Source/ArachnaeSwarm/HediffGiver/HediffGiver_NonPlayerFaction.cs b/Source/ArachnaeSwarm/HediffGiver/HediffGiver_NonPlayerFaction.cs new file mode 100644 index 0000000..c2f2e0d --- /dev/null +++ b/Source/ArachnaeSwarm/HediffGiver/HediffGiver_NonPlayerFaction.cs @@ -0,0 +1,44 @@ +using RimWorld; +using Verse; + +namespace ArachnaeSwarm +{ + public class HediffGiver_NonPlayerFaction : HediffGiver + { + // 显式重新定义这些字段,确保 XML 解析器能找到它们 + public float mtbDays; + public new HediffDef hediff; + + public override void OnIntervalPassed(Pawn pawn, Hediff cause) + { + // 检查派系条件 + if (ShouldHaveHediff(pawn)) + { + // 给予 hediff + HealthUtility.AdjustSeverity(pawn, this.hediff, 1.0f); + } + else + { + // 移除 hediff + RemoveHediffIfExists(pawn); + } + } + + private bool ShouldHaveHediff(Pawn pawn) + { + // 非玩家派系且不是殖民地囚犯 + return pawn.Faction != null && + pawn.Faction != Faction.OfPlayer && + !pawn.IsPrisonerOfColony; + } + + private void RemoveHediffIfExists(Pawn pawn) + { + Hediff existing = pawn.health?.hediffSet?.GetFirstHediffOfDef(this.hediff); + if (existing != null) + { + pawn.health.RemoveHediff(existing); + } + } + } +} diff --git a/Source/ArachnaeSwarm/Hediffs/HediffComp_LifespanDisplay.cs b/Source/ArachnaeSwarm/Hediffs/HediffComp_LifespanDisplay.cs new file mode 100644 index 0000000..aafe3af --- /dev/null +++ b/Source/ArachnaeSwarm/Hediffs/HediffComp_LifespanDisplay.cs @@ -0,0 +1,44 @@ +using RimWorld; +using Verse; + +namespace ArachnaeSwarm +{ + // 新的 HediffComp,用于显示寿命信息 + public class HediffComp_LifespanDisplay : HediffComp + { + public CompNodeSwarmLifetime LifespanComp => parent.pawn.GetComp(); + + public override string CompTipStringExtra + { + get + { + if (LifespanComp != null && !LifespanComp.HasShutdownHediff) + { + return $"剩余寿命: {LifespanComp.DaysLeft:F1} 天"; + } + return null; + } + } + + public override string CompLabelInBracketsExtra + { + get + { + if (LifespanComp != null && !LifespanComp.HasShutdownHediff) + { + return $"{LifespanComp.DaysLeft:F1}d"; + } + return null; + } + } + } + + // HediffComp 属性类 + public class HediffCompProperties_LifespanDisplay : HediffCompProperties + { + public HediffCompProperties_LifespanDisplay() + { + compClass = typeof(HediffComp_LifespanDisplay); + } + } +} diff --git a/Source/ArachnaeSwarm/Pawn_Comps/ARA_NodeSwarmLifetime/CompNodeSwarmLifetime.cs b/Source/ArachnaeSwarm/Pawn_Comps/ARA_NodeSwarmLifetime/CompNodeSwarmLifetime.cs index 0e75510..d860c3d 100644 --- a/Source/ArachnaeSwarm/Pawn_Comps/ARA_NodeSwarmLifetime/CompNodeSwarmLifetime.cs +++ b/Source/ArachnaeSwarm/Pawn_Comps/ARA_NodeSwarmLifetime/CompNodeSwarmLifetime.cs @@ -20,6 +20,10 @@ namespace ArachnaeSwarm private int lastHediffSyncTick; private const int HEDIFF_SYNC_INTERVAL = 250; // 每250ticks同步一次 + // 新增:hediff消失检查相关 + private int lastHediffMissingCheckTick = -1; + private const int HEDIFF_MISSING_CHECK_INTERVAL = 60; // 每60ticks检查一次hediff是否存在 + public CompProperties_NodeSwarmLifetime Props => (CompProperties_NodeSwarmLifetime)props; // 修改:将 ticks 转换为天数计算 @@ -60,6 +64,41 @@ namespace ArachnaeSwarm return pawn.health.hediffSet.HasHediff(Props.immuteHediff); } + // 新增:检查寿命Hediff是否存在 + private bool CheckLifespanHediffExists() + { + Pawn pawn = parent as Pawn; + if (pawn == null) return false; + + // 直接检查hediff是否存在,不使用缓存 + return pawn.health.hediffSet.GetFirstHediffOfDef(Props.lifespanHediff) != null; + } + + // 新增:当hediff消失时执行的处理 + private void HandleMissingHediff() + { + Pawn pawn = parent as Pawn; + if (pawn == null) return; + + Log.Warning($"Lifespan hediff missing for {pawn.Label}. This should not happen. Forcing death."); + + // 立即处死pawn + if (!pawn.Dead) + { + // 可以选择不同的处死方式 + if (Props.killWhenDepleted) + { + // 使用原有的处死逻辑 + KillPowerProcessor(); + } + else + { + // 直接杀死 + pawn.Kill(null, null); + } + } + } + // 新增:获取或创建寿命Hediff private Hediff GetOrCreateLifespanHediff() { @@ -122,6 +161,24 @@ namespace ArachnaeSwarm } } + // 新增:将Comp的数据写入Hediff(用于调试命令) + private void WriteCompDataToHediff() + { + Pawn pawn = parent as Pawn; + if (pawn == null) return; + + var hediff = GetOrCreateLifespanHediff(); + if (hediff == null) + { + Log.Warning($"Failed to get or create lifespan hediff for {pawn.Label}"); + return; + } + + // 直接将Comp的数据写入Hediff + hediff.Severity = PercentFull; + Log.Message($"Debug: Wrote comp data to hediff - Severity: {hediff.Severity:P4}, TicksLeft: {powerTicksLeft}"); + } + // 新增:定期校验Hediff状态 private void ValidateHediffState() { @@ -133,10 +190,9 @@ namespace ArachnaeSwarm if (currentHediff == null) { - // Hediff消失了,重新创建 - Log.Message($"Lifespan hediff was missing for {pawn.Label}, recreating with component data"); - lifespanHediff = null; // 重置缓存 - GetOrCreateLifespanHediff(); + // Hediff消失了,触发处理逻辑 + HandleMissingHediff(); + return; } else if (currentHediff != lifespanHediff) { @@ -164,6 +220,7 @@ namespace ArachnaeSwarm hasShutdownHediffCached = null; lastHediffCheckTick = Find.TickManager.TicksGame; lastHediffSyncTick = Find.TickManager.TicksGame; + lastHediffMissingCheckTick = Find.TickManager.TicksGame; // 确保寿命Hediff存在 GetOrCreateLifespanHediff(); @@ -197,39 +254,123 @@ namespace ArachnaeSwarm } if (DebugSettings.ShowDevGizmos) { + // 新增:补满寿命调试命令 yield return new Command_Action { - defaultLabel = "DEV: Power left 0%", - action = delegate - { - powerTicksLeft = 0; - SyncLifespanWithHediff(); // 同步到Hediff - } - }; - yield return new Command_Action - { - defaultLabel = "DEV: Power left 100%", + defaultLabel = "DEV: 补满寿命", action = delegate { powerTicksLeft = (int)(Props.lifetimeDays * 60000); - SyncLifespanWithHediff(); // 同步到Hediff + WriteCompDataToHediff(); // 使用新的写入方法 + Log.Message($"已补满寿命: {parent.Label} 剩余 {DaysLeft:F1} 天"); + Messages.Message($"已补满寿命: {Props.lifetimeDays} 天", MessageTypeDefOf.SilentInput); } }; - + + // 新增:剩余0.01%寿命调试命令 + yield return new Command_Action + { + defaultLabel = "DEV: 剩余0.01%寿命", + action = delegate + { + int totalTicks = (int)(Props.lifetimeDays * 60000); + powerTicksLeft = (int)(totalTicks * 0.0001f); // 0.01% + WriteCompDataToHediff(); // 使用新的写入方法 + float daysLeft = (float)powerTicksLeft / 60000f; + Log.Message($"已设置剩余0.01%寿命: {parent.Label} 剩余 {daysLeft:F4} 天 ({PercentFull:P2})"); + Messages.Message($"设置剩余寿命为0.01%: {daysLeft:F4} 天", MessageTypeDefOf.SilentInput); + } + }; + + // 新增:归零寿命调试命令 + yield return new Command_Action + { + defaultLabel = "DEV: 归零寿命", + action = delegate + { + powerTicksLeft = 0; + WriteCompDataToHediff(); // 使用新的写入方法 + Log.Message($"已归零寿命: {parent.Label} 将立即死亡"); + Messages.Message("寿命已归零,即将死亡", MessageTypeDefOf.SilentInput); + + // 立即触发死亡逻辑 + if (Props.killWhenDepleted) + { + KillPowerProcessor(); + } + else + { + depleted = true; + } + } + }; + // 新增:调试命令显示Hediff状态 yield return new Command_Action { - defaultLabel = "DEV: Show Hediff Info", + defaultLabel = "DEV: 显示Hediff信息", action = delegate { var hediff = GetOrCreateLifespanHediff(); if (hediff != null) { - Messages.Message($"Lifespan Hediff: Severity={hediff.Severity:P2}, TicksLeft={powerTicksLeft}", MessageTypeDefOf.SilentInput); + string message = $"寿命Hediff信息:\n" + + $"严重程度: {hediff.Severity:P4}\n" + + $"剩余ticks: {powerTicksLeft}\n" + + $"剩余天数: {DaysLeft:F4}\n" + + $"总天数: {TotalDays:F1}\n" + + $"百分比: {PercentFull:P4}\n" + + $"已耗尽: {depleted}"; + Messages.Message(message, MessageTypeDefOf.SilentInput); + Log.Message(message); } else { - Messages.Message("No lifespan hediff found", MessageTypeDefOf.SilentInput); + Messages.Message("未找到寿命hediff", MessageTypeDefOf.SilentInput); + } + } + }; + + // 新增:调试命令手动移除hediff(测试hediff消失逻辑) + yield return new Command_Action + { + defaultLabel = "DEV: 移除寿命Hediff", + action = delegate + { + Pawn pawn = parent as Pawn; + if (pawn != null) + { + var hediff = pawn.health.hediffSet.GetFirstHediffOfDef(Props.lifespanHediff); + if (hediff != null) + { + pawn.health.RemoveHediff(hediff); + lifespanHediff = null; + Log.Message($"已手动移除 {pawn.Label} 的寿命Hediff"); + Messages.Message("已手动移除寿命hediff,pawn将立即死亡", MessageTypeDefOf.SilentInput); + } + else + { + Messages.Message("没有找到寿命hediff", MessageTypeDefOf.SilentInput); + } + } + } + }; + + // 新增:强制同步命令(用于测试同步逻辑) + yield return new Command_Action + { + defaultLabel = "DEV: 强制同步", + action = delegate + { + SyncLifespanWithHediff(); + var hediff = GetOrCreateLifespanHediff(); + if (hediff != null) + { + string message = $"强制同步后:\n" + + $"Comp剩余ticks: {powerTicksLeft}\n" + + $"Hediff严重程度: {hediff.Severity:P4}\n" + + $"剩余天数: {DaysLeft:F4}"; + Messages.Message(message, MessageTypeDefOf.SilentInput); } } }; @@ -251,11 +392,17 @@ namespace ArachnaeSwarm return; } + // 定期检查hediff是否存在(比同步更频繁) + if (Find.TickManager.TicksGame > lastHediffMissingCheckTick + HEDIFF_MISSING_CHECK_INTERVAL) + { + ValidateHediffState(); + lastHediffMissingCheckTick = Find.TickManager.TicksGame; + } + // 定期同步Hediff状态 if (Find.TickManager.TicksGame > lastHediffSyncTick + HEDIFF_SYNC_INTERVAL) { SyncLifespanWithHediff(); - ValidateHediffState(); lastHediffSyncTick = Find.TickManager.TicksGame; } @@ -283,6 +430,11 @@ namespace ArachnaeSwarm private void KillPowerProcessor() { Pawn pawn = (Pawn)parent; + + // 记录日志 + Log.Message($"Killing pawn {pawn.Label} due to lifespan depletion"); + + // 原有的处死逻辑 List allParts = pawn.def.race.body.AllParts; for (int i = 0; i < allParts.Count; i++) { @@ -311,6 +463,7 @@ namespace ArachnaeSwarm Scribe_Values.Look(ref powerTicksLeft, "powerTicksLeft", 0); Scribe_Values.Look(ref depleted, "depleted", defaultValue: false); Scribe_Values.Look(ref lastHediffSyncTick, "lastHediffSyncTick", 0); + Scribe_Values.Look(ref lastHediffMissingCheckTick, "lastHediffMissingCheckTick", 0); // 添加:保存时重置缓存 if (Scribe.mode == LoadSaveMode.PostLoadInit) @@ -326,6 +479,9 @@ namespace ArachnaeSwarm powerTicksLeft = (int)(Props.lifetimeDays * 60000); } + // 立即检查hediff是否存在 + ValidateHediffState(); + // 确保寿命Hediff存在并同步 GetOrCreateLifespanHediff(); SyncLifespanWithHediff(); @@ -333,6 +489,7 @@ namespace ArachnaeSwarm } } + // Gizmo 类保持不变 [StaticConstructorOnStartup] public class NodeSwarmLifetimeGizmo : Gizmo {