diff --git a/1.6/Assemblies/WulaFallenEmpire.dll b/1.6/Assemblies/WulaFallenEmpire.dll index 8941d0b0..8bb5a621 100644 Binary files a/1.6/Assemblies/WulaFallenEmpire.dll and b/1.6/Assemblies/WulaFallenEmpire.dll differ diff --git a/1.6/Defs/BackstoryDefs/Solid/Solid_Adult_WULA.xml b/1.6/Defs/BackstoryDefs/Solid/Solid_Adult_WULA.xml index 5cb5592d..b81f4a20 100644 --- a/1.6/Defs/BackstoryDefs/Solid/Solid_Adult_WULA.xml +++ b/1.6/Defs/BackstoryDefs/Solid/Solid_Adult_WULA.xml @@ -1051,20 +1051,6 @@ 破碎人格 破碎人格 [PAWN_possessive]人格矩阵完全损坏,已是某个集体意识的一部分。 - - -5 - -5 - -5 - -5 - -5 - -5 - -5 - -5 - -5 - -5 - -5 - -5 -
  • Wula_Backstory_Categories_For_Hostile_Faction
  • @@ -1090,4 +1076,4 @@ - \ No newline at end of file + diff --git a/1.6/Defs/BackstoryDefs/Solid/Solid_Child_WULA.xml b/1.6/Defs/BackstoryDefs/Solid/Solid_Child_WULA.xml index ecff35b6..3f1c461f 100644 --- a/1.6/Defs/BackstoryDefs/Solid/Solid_Child_WULA.xml +++ b/1.6/Defs/BackstoryDefs/Solid/Solid_Child_WULA.xml @@ -1,12 +1,12 @@ - WULA_Child_Backstory01 - False - Childhood - 旧日遗物 - 旧日遗物 - [PAWN_nameDef] 是诞生于乌拉帝国的合成人。 + WULA_Child_Backstory01 + False + Childhood + 旧日遗物 + 旧日遗物 + [PAWN_nameDef] 是诞生于乌拉帝国的合成人。 5 5 @@ -31,5 +31,11 @@
  • WULA_Addons_Antenna_Hediff_Base
  • + +
  • + WULA_BrokenPersonalityTrait + 100 +
  • +
    diff --git a/1.6/Defs/FactionDefs/Factions_Player_WULA.xml b/1.6/Defs/FactionDefs/Factions_Player_WULA.xml index 04aac892..c831e7da 100644 --- a/1.6/Defs/FactionDefs/Factions_Player_WULA.xml +++ b/1.6/Defs/FactionDefs/Factions_Player_WULA.xml @@ -73,7 +73,7 @@
  • (4000, 500)
  • - false + true true false false diff --git a/1.6/Defs/MentalBreakDefs/MentalBreaks_WULA.xml b/1.6/Defs/MentalBreakDefs/MentalBreaks_WULA.xml new file mode 100644 index 00000000..8e8b2a24 --- /dev/null +++ b/1.6/Defs/MentalBreakDefs/MentalBreaks_WULA.xml @@ -0,0 +1,13 @@ + + + + + Wula_BrokenPersonality + + Wula_BrokenPersonality + Extreme + 1.0 + WulaFallenEmpire.MentalBreakWorker_BrokenPersonality + + + diff --git a/1.6/Defs/MentalStateDefs/MentalStates_WULA_Broken.xml b/1.6/Defs/MentalStateDefs/MentalStates_WULA_Broken.xml new file mode 100644 index 00000000..4671e24f --- /dev/null +++ b/1.6/Defs/MentalStateDefs/MentalStates_WULA_Broken.xml @@ -0,0 +1,31 @@ + + + + + Wula_BrokenPersonality + + WulaFallenEmpire.MentalState_BrokenPersonality + Aggro + true + (255, 0, 0) + 0.0001 + +
  • + WULA_Trait_Broken_Personality + Wula_Broken_Personality_Faction + 0.5 +
  • +
    + +
  • Insult
  • +
    + +
  • Insult
  • +
    + Catharsis + 由于重度精神崩溃,{0}的模拟人格已经破碎,{0}受到了星球上乌拉帝国反常网络的一个主脑子节点影响,已经成为了这些反常子个体乌拉的一员。 + NegativeEvent + 精神状态:人格破碎 +
    + +
    diff --git a/1.6/Defs/ThingDefs_Races/Races_Wulaspecies.xml b/1.6/Defs/ThingDefs_Races/Races_Wulaspecies.xml index 4d1a4e42..e9bbf769 100644 --- a/1.6/Defs/ThingDefs_Races/Races_Wulaspecies.xml +++ b/1.6/Defs/ThingDefs_Races/Races_Wulaspecies.xml @@ -1126,4 +1126,4 @@ - \ No newline at end of file + diff --git a/1.6/Defs/TraitDefs/Traits_WULA_Broken.xml b/1.6/Defs/TraitDefs/Traits_WULA_Broken.xml new file mode 100644 index 00000000..f2b3e9f5 --- /dev/null +++ b/1.6/Defs/TraitDefs/Traits_WULA_Broken.xml @@ -0,0 +1,18 @@ + + + + + WULA_BrokenPersonalityTrait + 0 + +
  • + + {PAWN_nameDef}是机械乌拉。乌拉的思维模式与常人不同,在极端压力下,其模拟人格会彻底崩溃。 + +
  • Wula_BrokenPersonality
  • + + +
    +
    + +
    diff --git a/Source/WulaFallenEmpire/.gitignore b/Source/WulaFallenEmpire/.gitignore deleted file mode 100644 index 93713d58..00000000 --- a/Source/WulaFallenEmpire/.gitignore +++ /dev/null @@ -1,18 +0,0 @@ -# Compiled output -bin/ -obj/ - -# Rider -.idea/ - -# Visual Studio -.vs/ -*.suo -*.user -*.userosf -*.sln.docstates - -# OS generated files -.DS_Store -.localized -Thumbs.db diff --git a/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/.suo b/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/.suo index 0308adc5..5da9f907 100644 Binary files a/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/.suo and b/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/.suo differ diff --git a/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/DocumentLayout.json b/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/DocumentLayout.json index 4a6f0440..07f9c84d 100644 --- a/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/DocumentLayout.json +++ b/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/DocumentLayout.json @@ -3,7 +3,11 @@ "WorkspaceRootPath": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\", "Documents": [ { - "AbsoluteMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|c:\\steam\\steamapps\\common\\rimworld\\mods\\3516260226\\source\\wulafallenempire\\recipe_administerwulamechrepairkit.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "AbsoluteMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|c:\\steam\\steamapps\\common\\rimworld\\mods\\3516260226\\source\\wulafallenempire\\mentalstate_brokenpersonality.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|solutionrelative:mentalstate_brokenpersonality.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\recipe_administerwulamechrepairkit.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|solutionrelative:recipe_administerwulamechrepairkit.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { @@ -63,6 +67,19 @@ { "$type": "Document", "DocumentIndex": 0, + "Title": "MentalState_BrokenPersonality.cs", + "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\MentalState_BrokenPersonality.cs", + "RelativeDocumentMoniker": "MentalState_BrokenPersonality.cs", + "ToolTip": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\MentalState_BrokenPersonality.cs", + "RelativeToolTip": "MentalState_BrokenPersonality.cs", + "ViewState": "AQIAADMAAAAAAAAAAAAlwEsAAAAjAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-07-25T13:51:03.13Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 1, "Title": "Recipe_AdministerWulaMechRepairKit.cs", "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\Recipe_AdministerWulaMechRepairKit.cs", "RelativeDocumentMoniker": "Recipe_AdministerWulaMechRepairKit.cs", @@ -70,12 +87,11 @@ "RelativeToolTip": "Recipe_AdministerWulaMechRepairKit.cs", "ViewState": "AQIAAC8AAAAAAAAAAAAAAC8AAAAAAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-07-24T05:09:33.389Z", - "EditorCaption": "" + "WhenOpened": "2025-07-24T05:09:33.389Z" }, { "$type": "Document", - "DocumentIndex": 1, + "DocumentIndex": 2, "Title": "WorkGiver_Warden_DeliverEnergy.cs", "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\WorkGiver_Warden_DeliverEnergy.cs", "RelativeDocumentMoniker": "WorkGiver_Warden_DeliverEnergy.cs", @@ -87,7 +103,7 @@ }, { "$type": "Document", - "DocumentIndex": 2, + "DocumentIndex": 3, "Title": "WorkGiverDefExtension_FeedWula.cs", "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\WorkGiverDefExtension_FeedWula.cs", "RelativeDocumentMoniker": "WorkGiverDefExtension_FeedWula.cs", @@ -99,7 +115,7 @@ }, { "$type": "Document", - "DocumentIndex": 3, + "DocumentIndex": 4, "Title": "CompApparelInterceptor.cs", "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\CompApparelInterceptor.cs", "RelativeDocumentMoniker": "CompApparelInterceptor.cs", @@ -111,7 +127,7 @@ }, { "$type": "Document", - "DocumentIndex": 4, + "DocumentIndex": 5, "Title": "Projectile_Launch_Patch.cs", "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\HarmonyPatches\\Projectile_Launch_Patch.cs", "RelativeDocumentMoniker": "HarmonyPatches\\Projectile_Launch_Patch.cs", @@ -123,7 +139,7 @@ }, { "$type": "Document", - "DocumentIndex": 6, + "DocumentIndex": 7, "Title": "IngestPatch.cs", "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\IngestPatch.cs", "RelativeDocumentMoniker": "IngestPatch.cs", @@ -135,7 +151,7 @@ }, { "$type": "Document", - "DocumentIndex": 5, + "DocumentIndex": 6, "Title": "CompUseEffect_WulaSkillTrainer.cs", "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\CompUseEffect_WulaSkillTrainer.cs", "RelativeDocumentMoniker": "CompUseEffect_WulaSkillTrainer.cs", @@ -147,7 +163,7 @@ }, { "$type": "Document", - "DocumentIndex": 7, + "DocumentIndex": 8, "Title": "Building_Wula_DarkEnergy_Engine.cs", "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\Building_Wula_DarkEnergy_Engine.cs", "RelativeDocumentMoniker": "Building_Wula_DarkEnergy_Engine.cs", @@ -159,7 +175,7 @@ }, { "$type": "Document", - "DocumentIndex": 8, + "DocumentIndex": 9, "Title": "HediffComp_RegenerateBackstory.cs", "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\HediffComp_RegenerateBackstory.cs", "RelativeDocumentMoniker": "HediffComp_RegenerateBackstory.cs", @@ -171,7 +187,7 @@ }, { "$type": "Document", - "DocumentIndex": 9, + "DocumentIndex": 10, "Title": "WulaFallenEmpireMod.cs", "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\WulaFallenEmpireMod.cs", "RelativeDocumentMoniker": "WulaFallenEmpireMod.cs", @@ -183,7 +199,7 @@ }, { "$type": "Document", - "DocumentIndex": 10, + "DocumentIndex": 11, "Title": "MechanitorPatch.cs", "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\MechanitorPatch.cs", "RelativeDocumentMoniker": "MechanitorPatch.cs", diff --git a/Source/WulaFallenEmpire/MentalBreakWorker_BrokenPersonality.cs b/Source/WulaFallenEmpire/MentalBreakWorker_BrokenPersonality.cs new file mode 100644 index 00000000..4439012d --- /dev/null +++ b/Source/WulaFallenEmpire/MentalBreakWorker_BrokenPersonality.cs @@ -0,0 +1,26 @@ +using RimWorld; +using Verse; +using Verse.AI; + +namespace WulaFallenEmpire +{ + public class MentalBreakWorker_BrokenPersonality : MentalBreakWorker + { + public override bool TryStart(Pawn pawn, string reason, bool causedByMood) + { + // 先尝试启动精神状态 + if (base.TryStart(pawn, reason, causedByMood)) + { + // 成功启动后,执行附加逻辑 + var extension = def.mentalState.GetModExtension(); + if (extension != null && extension.traitToAdd != null && !pawn.story.traits.HasTrait(extension.traitToAdd)) + { + pawn.story.traits.GainTrait(new Trait(extension.traitToAdd)); + } + + return true; + } + return false; + } + } +} diff --git a/Source/WulaFallenEmpire/MentalStateDefExtension_BrokenPersonality.cs b/Source/WulaFallenEmpire/MentalStateDefExtension_BrokenPersonality.cs new file mode 100644 index 00000000..a1d07b28 --- /dev/null +++ b/Source/WulaFallenEmpire/MentalStateDefExtension_BrokenPersonality.cs @@ -0,0 +1,12 @@ +using RimWorld; +using Verse; + +namespace WulaFallenEmpire +{ + public class MentalStateDefExtension_BrokenPersonality : DefModExtension + { + public TraitDef traitToAdd; + public FactionDef factionToJoin; + public float skillLevelFactor = 1f; + } +} diff --git a/Source/WulaFallenEmpire/MentalState_BrokenPersonality.cs b/Source/WulaFallenEmpire/MentalState_BrokenPersonality.cs new file mode 100644 index 00000000..be6b8f9c --- /dev/null +++ b/Source/WulaFallenEmpire/MentalState_BrokenPersonality.cs @@ -0,0 +1,93 @@ +using RimWorld; +using Verse; +using Verse.AI; +using Verse.AI.Group; + +namespace WulaFallenEmpire +{ + public class MentalState_BrokenPersonality : MentalState + { + public override void PostStart(string reason) + { + base.PostStart(reason); + + // 发送信件 + if (PawnUtility.ShouldSendNotificationAbout(pawn)) + { + // 手动实现备用逻辑:如果信件标题(beginLetterLabel)为空,则使用精神状态的通用标签(label) + string labelText = def.beginLetterLabel; + if (string.IsNullOrEmpty(labelText)) + { + labelText = def.label; + } + TaggedString letterLabel = labelText.Formatted(pawn.LabelShort, pawn.Named("PAWN")).CapitalizeFirst(); + TaggedString letterText = def.beginLetter.Formatted(pawn.LabelShort, pawn.Named("PAWN")).CapitalizeFirst(); + if (reason != null) + { + letterText += "\n\n" + reason; + } + Find.LetterStack.ReceiveLetter(letterLabel, letterText, LetterDefOf.ThreatBig, pawn); + } + + var extension = def.GetModExtension(); + if (extension != null) + { + bool alreadyBroken = pawn.story.traits.HasTrait(extension.traitToAdd); + + if (!alreadyBroken) + { + // 移除所有技能热情 + foreach (SkillRecord skill in pawn.skills.skills) + { + skill.passion = Passion.None; + } + + // 所有技能等级减半 + foreach (SkillRecord skill in pawn.skills.skills) + { + int currentLevel = skill.Level; + skill.Level = (int)(currentLevel * extension.skillLevelFactor); + } + } + + // 改变派系 + Faction newFaction = Find.FactionManager.FirstFactionOfDef(extension.factionToJoin); + if (newFaction == null) + { + newFaction = Find.FactionManager.FirstFactionOfDef(FactionDefOf.AncientsHostile); + } + + if (newFaction != null) + { + pawn.SetFaction(newFaction, null); + } + + } + + // 离开地图 + Lord lord = pawn.GetLord(); + if (lord == null) + { + LordJob_ExitMapBest lordJob = new LordJob_ExitMapBest(LocomotionUrgency.Jog, canDig: true, canDefendSelf: true); + lord = LordMaker.MakeNewLord(pawn.Faction, lordJob, pawn.Map, Gen.YieldSingle(pawn)); + } + else + { + lord.ReceiveMemo("PawnBroken"); + } + + // 强制恢复以避免状态无限持续 + this.forceRecoverAfterTicks = 150; + } + + public override void MentalStateTick(int delta) + { + base.MentalStateTick(delta); + // 确保在下一帧就恢复,因为所有效果都已经应用 + if (age > 0) + { + RecoverFromState(); + } + } + } +} diff --git a/Source/WulaFallenEmpire/WulaFallenEmpire.csproj b/Source/WulaFallenEmpire/WulaFallenEmpire.csproj index e68fb724..87de747e 100644 --- a/Source/WulaFallenEmpire/WulaFallenEmpire.csproj +++ b/Source/WulaFallenEmpire/WulaFallenEmpire.csproj @@ -99,6 +99,9 @@ + + +