From 9acd5aac1eab8a2f02aa2c9b3ac179bdb77c237d Mon Sep 17 00:00:00 2001 From: "ProjectKoi-Kalo\\Kalo" Date: Tue, 2 Sep 2025 16:36:03 +0800 Subject: [PATCH 01/13] =?UTF-8?q?=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1.6/1.6/Assemblies/ArachnaeSwarm.dll | Bin 40448 -> 42496 bytes .../Defs/ThingDef_Races/ARA_RaceBaseSwarm.xml | 11 + 1.6/1.6/Defs/ThinkTreeDefs/ARA_ThinkTrees.xml | 864 ++++++++++-------- .../Defs/TrainableDefs/ARA_PlantCutting.xml | 19 + 1.6/1.6/Defs/TrainableDefs/ARA_Sowing.xml | 23 + Source/ArachnaeSwarm/ArachnaeSwarm.csproj | 8 + Source/ArachnaeSwarm/CompInstantTrain.cs | 51 ++ Source/ArachnaeSwarm/CompNoTrainingDecay.cs | 15 + Source/ArachnaeSwarm/MainHarmony.cs | 21 + .../Patch_TrainingTracker_TickRare.cs | 31 + ...inkNode_ConditionalAnimalShouldPlantCut.cs | 21 + .../ThinkNode_ConditionalAnimalShouldSow.cs | 37 + 12 files changed, 704 insertions(+), 397 deletions(-) create mode 100644 1.6/1.6/Defs/TrainableDefs/ARA_PlantCutting.xml create mode 100644 1.6/1.6/Defs/TrainableDefs/ARA_Sowing.xml create mode 100644 Source/ArachnaeSwarm/CompInstantTrain.cs create mode 100644 Source/ArachnaeSwarm/CompNoTrainingDecay.cs create mode 100644 Source/ArachnaeSwarm/MainHarmony.cs create mode 100644 Source/ArachnaeSwarm/Patch_TrainingTracker_TickRare.cs create mode 100644 Source/ArachnaeSwarm/ThinkNode_ConditionalAnimalShouldPlantCut.cs create mode 100644 Source/ArachnaeSwarm/ThinkNode_ConditionalAnimalShouldSow.cs diff --git a/1.6/1.6/Assemblies/ArachnaeSwarm.dll b/1.6/1.6/Assemblies/ArachnaeSwarm.dll index b47907eb209f8d5f54e960d1dc65ca4c77d406f6..3559f7ae5e1379f7b2de5ce26210e5760ee80d1b 100644 GIT binary patch literal 42496 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.3 1.1 + +
  • + +
  • ARA_Sowing
  • +
  • ARA_PlantCutting
  • + + +
  • @@ -38,6 +46,7 @@ BeetleLikeWithClaw + ARA_Insect_WithPlanting 0.25 0.8 1.7 @@ -46,6 +55,8 @@ Advanced
  • Dig
  • +
  • ARA_Sowing
  • +
  • ARA_PlantCutting
  • diff --git a/1.6/1.6/Defs/ThinkTreeDefs/ARA_ThinkTrees.xml b/1.6/1.6/Defs/ThinkTreeDefs/ARA_ThinkTrees.xml index 7a49c85..8523c7a 100644 --- a/1.6/1.6/Defs/ThinkTreeDefs/ARA_ThinkTrees.xml +++ b/1.6/1.6/Defs/ThinkTreeDefs/ARA_ThinkTrees.xml @@ -1,7 +1,466 @@ - + + - ARA_Humanlike + ARA_Insect_WithPlanting + + + +
  • + +
  • + true +
  • + + +
  • + +
  • + +
  • + Downed +
  • +
  • + BurningResponse +
  • +
  • + MentalStateCritical +
  • + + +
  • + + +
  • + + +
  • + true + +
  • + +
  • + 0.7 + +
  • + DigOutIfCannotReachMapEdge +
  • + + + + + + + + +
  • + +
  • + Misc + +
  • + Walk +
  • + + + + + + +
  • + MentalStateNonCritical +
  • + + +
  • + +
  • + Misc + +
  • + +
  • + + + + +
  • + RopedPawn +
  • + + +
  • + LordDuty +
  • + + +
  • + Animal_PreMain +
  • +
  • + Insect_PreMain +
  • + + +
  • + +
  • + TrainedAnimalBehavior + +
  • + Growing +
  • + + + + + + +
  • + +
  • + TrainedAnimalBehavior + +
  • + PlantCutting +
  • + + + + + +
  • + true + + +
  • + 30 + 35 +
  • + + +
  • + LeaveIfWrongSeason +
  • +
  • + LeaveIfStarving +
  • + + +
  • + 60 + +
  • + Misc + +
  • + Walk +
  • + + + + + + + + +
  • + true + +
  • + +
  • + +
  • + 60 + +
  • + Misc + +
  • + Walk +
  • + + + + + + + + + + + + +
  • + +
  • + TrainedAnimalBehavior + + +
  • + Obedience + +
  • + +
  • + true +
  • +
  • +
  • + +
  • + + + + +
  • + Rescue + +
  • + 75 +
  • + + + + + + + +
  • + RestingForMedicalReasons + +
  • + +
  • + +
  • +
  • + + +
  • + + +
  • + 60 + +
  • + SatisfyingNeeds + +
  • + +
  • + + + + +
  • + SatisfyBasicNeeds +
  • + +
  • + + +
  • + +
  • + SatisfyingNeeds + +
  • + +
  • + + + + +
  • + +
  • + Misc + +
  • + +
  • + + + + +
  • + +
  • + Misc + +
  • + +
  • + + + + +
  • + 1.5 + +
  • + +
  • Manipulation
  • + + +
  • + Haul + +
  • + TrainedAnimalBehavior + +
  • + +
  • +
    + + + + + + + +
  • + Forage + +
  • + +
  • + +
  • + +
  • + + + + + + +
  • + Dig + +
  • + +
  • + +
  • + + + + + + + +
  • + Animal_PreWander +
  • +
  • + Insect_PreWander +
  • + + +
  • + +
  • + Idle + + +
  • + +
  • + None + 120~240 +
  • + + + +
  • + +
  • + None + 120~240 + 500 +
  • + + +
  • + 0.1 + +
  • + None + 120~240 + 500 +
  • + + + +
  • + None + 120~240 +
  • + + + + +
  • + None + 120~240 +
  • + + + + + + +
  • + +
  • + RestingForMedicalReasons + +
  • + +
  • + +
  • + Misc + +
  • + Walk +
  • + + + + + + +
  • + Idle + +
  • + +
  • + Deadly + 120~240 +
  • + + + +
  • + Deadly + 120~240 +
  • + + + +
  • + + + + + + ARA_Humanlike @@ -20,7 +479,7 @@
  • - +
  • @@ -45,12 +504,12 @@
  • - +
  • - +
  • Downed
  • @@ -65,7 +524,7 @@
  • Abilities_Escape
  • - +
  • @@ -83,7 +542,7 @@
  • Humanlike_PostMentalState
  • - +
  • @@ -109,393 +568,4 @@
  • - HighPriority - -
  • - LordDuty -
  • - - - - -
  • - Humanlike_PostDuty -
  • - - -
  • - 2.5 - -
  • - -
  • ARA_InteractiveEggSac
  • - - - - -
  • - -
  • ARA_InteractiveEggSac
  • - - true - - - - -
  • - true - - -
  • - true - - -
  • - Idle - -
  • - Deadly -
  • - - - - -
  • - Escaping - -
  • - -
  • - - - - -
  • - -
  • - Misc - -
  • - Walk -
  • - - - - - -
  • - RestingForMedicalReasons - -
  • - -
  • - -
  • - ChangingApparel - -
  • - -
  • - -
  • - SatisfyingNeeds - -
  • - -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • - -
  • -
  • - -
  • -
  • - -
  • - - - - -
  • - - -
  • - true - -
  • - Escaping - -
  • - -
  • - - - -
  • - Idle - -
  • - Deadly -
  • - - - - - -
  • - Idle - -
  • - Deadly -
  • - - - -
  • - -
  • - - -
  • - - -
  • - - -
  • -
  • - - -
  • - - -
  • - true - true -
  • - - -
  • - -
  • - SatisfyingNeeds - -
  • - true -
  • - - - - - - -
  • - Misc - -
  • - -
  • - - -
  • - MediumPriority - -
  • - LordDuty -
  • - - - - -
  • - true -
  • - - -
  • - ChangingApparel - -
  • - true -
  • - - - - -
  • - -
  • - -
  • - - -
  • - - -
  • - TakeForInventoryStock - -
  • - true -
  • - - - - -
  • - UnloadingOwnInventory - -
  • - -
  • - - -
  • - Food - 0.6 - -
  • - true -
  • - - - - - - -
  • - - -
  • - Humanlike_PreMain -
  • - - -
  • - -
  • - MainColonistBehaviorCore - true -
  • - - - -
  • - WildMan - -
  • - MainWildManBehaviorCore - true -
  • - - - - -
  • - Humanlike_PostMain -
  • - - -
  • - -
  • - Idle - - -
  • - Joy - 0.9 - true - -
  • - -
  • - - -
  • - None -
  • - - - - - - -
  • - WildMan - -
  • - Idle - - -
  • - Deadly - 120~240 -
  • - - - - - - -
  • - -
  • - -
  • - RestingForMedicalReasons - -
  • - -
  • - -
  • - Misc - -
  • - Walk -
  • - - - - - - - - -
  • - true - -
  • - Misc - -
  • - Walk -
  • - - - - - - -
  • - Idle - -
  • - Deadly -
  • - - - -
  • - - - - \ No newline at end of file + HighPriority \ No newline at end of file diff --git a/1.6/1.6/Defs/TrainableDefs/ARA_PlantCutting.xml b/1.6/1.6/Defs/TrainableDefs/ARA_PlantCutting.xml new file mode 100644 index 0000000..9dcdf64 --- /dev/null +++ b/1.6/1.6/Defs/TrainableDefs/ARA_PlantCutting.xml @@ -0,0 +1,19 @@ + + + + + ARA_PlantCutting + + 允许该生物执行植物割除任务。 + + true + + 3 + Advanced + + 1 + + 99 + + + \ No newline at end of file diff --git a/1.6/1.6/Defs/TrainableDefs/ARA_Sowing.xml b/1.6/1.6/Defs/TrainableDefs/ARA_Sowing.xml new file mode 100644 index 0000000..9c3fcde --- /dev/null +++ b/1.6/1.6/Defs/TrainableDefs/ARA_Sowing.xml @@ -0,0 +1,23 @@ + + + + + ARA_Sowing + + 允许该生物执行播种任务。 + + + true + + + 5 + Advanced + + + 1 + + + 100 + + + \ No newline at end of file diff --git a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj index e339504..3cbdda3 100644 --- a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj +++ b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj @@ -89,6 +89,14 @@ + + + + + + + + diff --git a/Source/ArachnaeSwarm/CompInstantTrain.cs b/Source/ArachnaeSwarm/CompInstantTrain.cs new file mode 100644 index 0000000..cec6bde --- /dev/null +++ b/Source/ArachnaeSwarm/CompInstantTrain.cs @@ -0,0 +1,51 @@ +using System.Collections.Generic; +using Verse; +using RimWorld; + +namespace ArachnaeSwarm +{ + // 定义在 XML 中使用的属性 + public class CompProperties_InstantTrain : CompProperties + { + public List trainables = new List(); + + public CompProperties_InstantTrain() + { + this.compClass = typeof(CompInstantTrain); + } + } + + // 实现组件的逻辑 + public class CompInstantTrain : ThingComp + { + // 方便地访问属性 + public CompProperties_InstantTrain Props => (CompProperties_InstantTrain)this.props; + + // 在 Pawn 生成到地图上后被调用 + public override void PostSpawnSetup(bool respawningAfterLoad) + { + base.PostSpawnSetup(respawningAfterLoad); + + // 如果不是在加载存档时重生,则执行训练逻辑 + if (!respawningAfterLoad) + { + Pawn pawn = this.parent as Pawn; + if (pawn == null || pawn.training == null) + { + return; + } + + // 遍历在 XML 中定义的需要训练的技能列表 + foreach (TrainableDef trainableDef in Props.trainables) + { + // 检查 Pawn 是否还未学会此技能 + if (!pawn.training.HasLearned(trainableDef)) + { + // 调用原版方法,瞬间完成训练 + pawn.training.Train(trainableDef, null, true); + } + } + } + } + } +} \ No newline at end of file diff --git a/Source/ArachnaeSwarm/CompNoTrainingDecay.cs b/Source/ArachnaeSwarm/CompNoTrainingDecay.cs new file mode 100644 index 0000000..f612d2a --- /dev/null +++ b/Source/ArachnaeSwarm/CompNoTrainingDecay.cs @@ -0,0 +1,15 @@ +using Verse; + +namespace ArachnaeSwarm +{ + // 这是一个“标记”组件。它的唯一目的就是在 XML 中被添加到 ThingDef, + // 以便我们的 Harmony 补丁可以识别哪些 Pawn 的训练不应该衰减。 + // 它本身不需要任何逻辑。 + public class CompProperties_NoTrainingDecay : CompProperties + { + public CompProperties_NoTrainingDecay() + { + this.compClass = typeof(ThingComp); // 我们可以使用一个通用的、空的 ThingComp + } + } +} \ No newline at end of file diff --git a/Source/ArachnaeSwarm/MainHarmony.cs b/Source/ArachnaeSwarm/MainHarmony.cs new file mode 100644 index 0000000..8d6fe4d --- /dev/null +++ b/Source/ArachnaeSwarm/MainHarmony.cs @@ -0,0 +1,21 @@ +using Verse; +using HarmonyLib; +using System.Reflection; + +namespace ArachnaeSwarm +{ + // [StaticConstructorOnStartup] 属性确保这个类的静态构造函数在游戏启动时被调用 + [StaticConstructorOnStartup] + public static class MainHarmony + { + static MainHarmony() + { + // 创建一个 Harmony 实例。ID 应该是唯一的,通常使用 "作者.Mod名称" 的格式。 + var harmony = new Harmony("com.kalospacer.arachnaeswarm"); + + // Harmony 会自动扫描当前整个程序集(我们的 .dll 文件), + // 寻找所有带有 [HarmonyPatch] 属性的类,并应用它们。 + harmony.PatchAll(Assembly.GetExecutingAssembly()); + } + } +} \ No newline at end of file diff --git a/Source/ArachnaeSwarm/Patch_TrainingTracker_TickRare.cs b/Source/ArachnaeSwarm/Patch_TrainingTracker_TickRare.cs new file mode 100644 index 0000000..e4fa9ac --- /dev/null +++ b/Source/ArachnaeSwarm/Patch_TrainingTracker_TickRare.cs @@ -0,0 +1,31 @@ +using Verse; +using HarmonyLib; +using RimWorld; + +namespace ArachnaeSwarm +{ + [HarmonyPatch(typeof(Pawn_TrainingTracker), "TrainingTrackerTickRare")] + public static class Patch_TrainingTracker_TickRare + { + // [HarmonyPrefix] 表示这是一个“前缀”补丁,在原方法执行前运行 + // 它返回一个 bool 值: + // - return true: 继续执行原方法 (TrainingTrackerTickRare) + // - return false: 阻止执行原方法,直接跳过 + [HarmonyPrefix] + public static bool PreventDecayForSpecialAnimals(Pawn_TrainingTracker __instance) + { + // __instance 是原方法的实例对象,我们可以通过它访问 pawn + Pawn pawn = __instance.pawn; + + // 检查 Pawn 的 ThingDef 是否有我们的“标记”组件 + if (pawn.def.HasComp(typeof(CompProperties_NoTrainingDecay))) + { + // 如果有,则这是一个不应衰减训练度的特殊动物,返回 false 阻止原方法执行 + return false; + } + + // 如果没有,则这是一个普通动物,返回 true 让原版的衰减逻辑正常执行 + return true; + } + } +} \ No newline at end of file diff --git a/Source/ArachnaeSwarm/ThinkNode_ConditionalAnimalShouldPlantCut.cs b/Source/ArachnaeSwarm/ThinkNode_ConditionalAnimalShouldPlantCut.cs new file mode 100644 index 0000000..4489b91 --- /dev/null +++ b/Source/ArachnaeSwarm/ThinkNode_ConditionalAnimalShouldPlantCut.cs @@ -0,0 +1,21 @@ +using Verse; +using Verse.AI; +using RimWorld; + +namespace ArachnaeSwarm +{ + public class ThinkNode_ConditionalAnimalShouldPlantCut : ThinkNode_Conditional + { + protected override bool Satisfied(Pawn pawn) + { + if (pawn.training == null) + { + return false; + } + + // 使用我们之前创建的静态 DefOf 类来安全地引用 Def + return pawn.training.HasLearned(ARA_TrainableDefOf.ARA_PlantCutting) && + pawn.training.GetWanted(ARA_TrainableDefOf.ARA_PlantCutting); + } + } +} \ No newline at end of file diff --git a/Source/ArachnaeSwarm/ThinkNode_ConditionalAnimalShouldSow.cs b/Source/ArachnaeSwarm/ThinkNode_ConditionalAnimalShouldSow.cs new file mode 100644 index 0000000..da6319c --- /dev/null +++ b/Source/ArachnaeSwarm/ThinkNode_ConditionalAnimalShouldSow.cs @@ -0,0 +1,37 @@ +using Verse; +using Verse.AI; +using RimWorld; + +namespace ArachnaeSwarm +{ + // 使用 [DefOf] 属性,让游戏在启动时自动为我们填充这些字段 + [DefOf] + public static class ARA_TrainableDefOf + { + // 确保这些字段名与你在 XML 中定义的 defName 完全一致 + public static TrainableDef ARA_Sowing; + public static TrainableDef ARA_PlantCutting; + + // 静态构造函数,确保 DefOf 被初始化 + static ARA_TrainableDefOf() + { + DefOfHelper.EnsureInitializedInCtor(typeof(ARA_TrainableDefOf)); + } + } + + public class ThinkNode_ConditionalAnimalShouldSow : ThinkNode_Conditional + { + protected override bool Satisfied(Pawn pawn) + { + // MCP 已证实:对于野生动物等情况,pawn.training 可能为 null,此检查是必要的。 + if (pawn.training == null) + { + return false; + } + + // 使用静态缓存的 Def,检查动物是否学会了该技能,并且玩家是否在“动物”标签页中勾选了允许 + return pawn.training.HasLearned(ARA_TrainableDefOf.ARA_Sowing) && + pawn.training.GetWanted(ARA_TrainableDefOf.ARA_Sowing); + } + } +} \ No newline at end of file From b21de9de915970556b96d1d14a0dc3084f730f9d Mon Sep 17 00:00:00 2001 From: "ProjectKoi-Kalo\\Kalo" Date: Tue, 2 Sep 2025 17:52:41 +0800 Subject: [PATCH 02/13] =?UTF-8?q?=E6=99=95=E6=99=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1.6/1.6/Assemblies/ArachnaeSwarm.dll | Bin 42496 -> 43008 bytes .../Defs/ThingDef_Races/ARA_RaceBaseSwarm.xml | 13 + .../Defs/ThingDef_Races/ARA_RaceNodeSwarm.xml | 2 +- 1.6/1.6/Defs/ThinkTreeDefs/ARA_ThinkTrees.xml | 454 ++++++++++++++++-- Source/ArachnaeSwarm/ArachnaeSwarm.csproj | 2 + .../ArachnaeSwarm/CompAnimalWorkSettings.cs | 49 ++ Source/ArachnaeSwarm/CompInstantTrain.cs | 11 +- .../CompProperties_AnimalWorkSettings.cs | 25 + 8 files changed, 514 insertions(+), 42 deletions(-) create mode 100644 Source/ArachnaeSwarm/CompAnimalWorkSettings.cs create mode 100644 Source/ArachnaeSwarm/CompProperties_AnimalWorkSettings.cs diff --git a/1.6/1.6/Assemblies/ArachnaeSwarm.dll b/1.6/1.6/Assemblies/ArachnaeSwarm.dll index 3559f7ae5e1379f7b2de5ce26210e5760ee80d1b..9aac5afea005fe0dc0243553ed4ef5b5e6bce2a9 100644 GIT binary patch delta 15370 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 diff --git a/1.6/1.6/Defs/ThingDef_Races/ARA_RaceBaseSwarm.xml b/1.6/1.6/Defs/ThingDef_Races/ARA_RaceBaseSwarm.xml index a958794..1859908 100644 --- a/1.6/1.6/Defs/ThingDef_Races/ARA_RaceBaseSwarm.xml +++ b/1.6/1.6/Defs/ThingDef_Races/ARA_RaceBaseSwarm.xml @@ -21,6 +21,19 @@
  • ARA_PlantCutting
  • +
  • + +
  • + ARA_Sowing + Growing +
  • +
  • + ARA_PlantCutting + PlantCutting +
  • + + +
  • diff --git a/1.6/1.6/Defs/ThingDef_Races/ARA_RaceNodeSwarm.xml b/1.6/1.6/Defs/ThingDef_Races/ARA_RaceNodeSwarm.xml index 26169ce..803da3a 100644 --- a/1.6/1.6/Defs/ThingDef_Races/ARA_RaceNodeSwarm.xml +++ b/1.6/1.6/Defs/ThingDef_Races/ARA_RaceNodeSwarm.xml @@ -508,7 +508,7 @@ 9999
  • - Spelopede + ArachnaeBase_Race_Scavenger 3 6000
  • diff --git a/1.6/1.6/Defs/ThinkTreeDefs/ARA_ThinkTrees.xml b/1.6/1.6/Defs/ThinkTreeDefs/ARA_ThinkTrees.xml index 8523c7a..8f310ad 100644 --- a/1.6/1.6/Defs/ThinkTreeDefs/ARA_ThinkTrees.xml +++ b/1.6/1.6/Defs/ThinkTreeDefs/ARA_ThinkTrees.xml @@ -5,9 +5,10 @@ ARA_Insect_WithPlanting - +
  • +
  • true
  • @@ -101,34 +102,6 @@ Insect_PreMain - -
  • - -
  • - TrainedAnimalBehavior - -
  • - Growing -
  • -
    - - - - - -
  • - -
  • - TrainedAnimalBehavior - -
  • - PlantCutting -
  • - - - - -
  • true @@ -230,7 +203,7 @@
  • RestingForMedicalReasons -
  • +
  • @@ -258,8 +231,10 @@ SatisfyBasicNeeds +
  • +
  • @@ -360,6 +335,31 @@ Insect_PreWander
  • + +
  • + +
  • + TrainedAnimalBehavior + +
  • + +
  • + + + + + +
  • + +
  • + TrainedAnimalBehavior + +
  • + +
  • + + +
  • @@ -388,7 +388,7 @@
  • 0.1 -
  • +
  • None 120~240 500 @@ -568,4 +568,394 @@
  • - HighPriority \ No newline at end of file + HighPriority + +
  • + LordDuty +
  • + + + + +
  • + Humanlike_PostDuty +
  • + + +
  • + 2.5 + +
  • + +
  • ARA_InteractiveEggSac
  • + + + + +
  • + +
  • ARA_InteractiveEggSac
  • + + true + + + + +
  • + true + + +
  • + true + + +
  • + Idle + +
  • + Deadly +
  • + + + + +
  • + Escaping + +
  • + +
  • + + + + +
  • + +
  • + Misc + +
  • + Walk +
  • + + + + + +
  • + RestingForMedicalReasons + +
  • + +
  • + +
  • + ChangingApparel + +
  • + +
  • + +
  • + SatisfyingNeeds + +
  • + +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • + + + + +
  • + + +
  • + true + +
  • + Escaping + +
  • + +
  • + + + +
  • + Idle + +
  • + Deadly +
  • + + + + + +
  • + Idle + +
  • + Deadly +
  • + + + +
  • + +
  • + + +
  • + + +
  • + + +
  • +
  • + + +
  • + + +
  • + true + true +
  • + + +
  • + +
  • + SatisfyingNeeds + +
  • + true +
  • + + + + + + +
  • + Misc + +
  • + +
  • + + +
  • + MediumPriority + +
  • + LordDuty +
  • + + + + +
  • + true +
  • + + +
  • + ChangingApparel + +
  • + true +
  • + + + + +
  • + +
  • + +
  • + + +
  • + + +
  • + TakeForInventoryStock + +
  • + true +
  • + + + + +
  • + UnloadingOwnInventory + +
  • + +
  • + + +
  • + Food + 0.6 + +
  • + true +
  • + + + + + + +
  • + + +
  • + Humanlike_PreMain +
  • + + +
  • + +
  • + MainColonistBehaviorCore + true +
  • + + + +
  • + WildMan + +
  • + MainWildManBehaviorCore + true +
  • + + + + +
  • + Humanlike_PostMain +
  • + + +
  • + +
  • + Idle + + +
  • + Joy + 0.9 + true + +
  • + +
  • + + +
  • + None +
  • + + + + + + +
  • + WildMan + +
  • + Idle + + +
  • + Deadly + 120~240 +
  • + + + + + + +
  • + +
  • + +
  • + RestingForMedicalReasons + +
  • + +
  • + +
  • + Misc + +
  • + Walk +
  • + + + + + + + + +
  • + true + +
  • + Misc + +
  • + Walk +
  • + + + + + + +
  • + Idle + +
  • + Deadly +
  • + + + +
  • + + + + + \ No newline at end of file diff --git a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj index 3cbdda3..7fc9efb 100644 --- a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj +++ b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj @@ -96,6 +96,8 @@ + + diff --git a/Source/ArachnaeSwarm/CompAnimalWorkSettings.cs b/Source/ArachnaeSwarm/CompAnimalWorkSettings.cs new file mode 100644 index 0000000..758e74c --- /dev/null +++ b/Source/ArachnaeSwarm/CompAnimalWorkSettings.cs @@ -0,0 +1,49 @@ +using System.Collections.Generic; +using Verse; +using RimWorld; + +namespace ArachnaeSwarm +{ + public class CompAnimalWorkSettings : ThingComp + { + public CompProperties_AnimalWorkSettings Props => (CompProperties_AnimalWorkSettings)this.props; + + public override void PostSpawnSetup(bool respawningAfterLoad) + { + base.PostSpawnSetup(respawningAfterLoad); + + Pawn pawn = this.parent as Pawn; + if (pawn == null) return; + + // 关键:如果 pawn 没有 workSettings,则为其创建一个 + if (pawn.workSettings == null) + { + // Log.Message($"Initializing Pawn_WorkSettings for animal: {pawn.LabelShort}"); + pawn.workSettings = new Pawn_WorkSettings(pawn); + pawn.workSettings.EnableAndInitializeIfNotAlreadyInitialized(); + + // 注意:Pawn_WorkSettings 的构造函数和 EnableAndInitializeIfNotAlreadyInitialized() + // 通常会处理所有可用的 WorkTypeDef,并将它们的优先级初始化为 0。 + // 这正是我们想要的初始状态。具体的优先级将由其他逻辑(如你的 CompInstantTrain 或 ThinkNode)来设置。 + } + + // 设置工作优先级 + if (pawn.workSettings != null) + { + foreach (var entry in Props.workTypeMap) + { + TrainableDef trainable = entry.trainable; + WorkTypeDef workType = entry.workType; + + // 检查动物是否学会了对应的 Trainable + if (pawn.training != null && pawn.training.HasLearned(trainable)) + { + // 设置一个默认的非零优先级,例如 3 (Medium) + // 真正的"开关"由 ThinkNode_Conditional 的 GetWanted 控制 + pawn.workSettings.SetPriority(workType, 3); + } + } + } + } + } +} \ No newline at end of file diff --git a/Source/ArachnaeSwarm/CompInstantTrain.cs b/Source/ArachnaeSwarm/CompInstantTrain.cs index cec6bde..c7c95e8 100644 --- a/Source/ArachnaeSwarm/CompInstantTrain.cs +++ b/Source/ArachnaeSwarm/CompInstantTrain.cs @@ -4,7 +4,6 @@ using RimWorld; namespace ArachnaeSwarm { - // 定义在 XML 中使用的属性 public class CompProperties_InstantTrain : CompProperties { public List trainables = new List(); @@ -15,19 +14,15 @@ namespace ArachnaeSwarm } } - // 实现组件的逻辑 public class CompInstantTrain : ThingComp { - // 方便地访问属性 public CompProperties_InstantTrain Props => (CompProperties_InstantTrain)this.props; - // 在 Pawn 生成到地图上后被调用 public override void PostSpawnSetup(bool respawningAfterLoad) { base.PostSpawnSetup(respawningAfterLoad); - // 如果不是在加载存档时重生,则执行训练逻辑 - if (!respawningAfterLoad) + if (!respawningAfterLoad) // 只在初次生成时执行 { Pawn pawn = this.parent as Pawn; if (pawn == null || pawn.training == null) @@ -35,13 +30,11 @@ namespace ArachnaeSwarm return; } - // 遍历在 XML 中定义的需要训练的技能列表 + // 瞬间训练技能 foreach (TrainableDef trainableDef in Props.trainables) { - // 检查 Pawn 是否还未学会此技能 if (!pawn.training.HasLearned(trainableDef)) { - // 调用原版方法,瞬间完成训练 pawn.training.Train(trainableDef, null, true); } } diff --git a/Source/ArachnaeSwarm/CompProperties_AnimalWorkSettings.cs b/Source/ArachnaeSwarm/CompProperties_AnimalWorkSettings.cs new file mode 100644 index 0000000..a53c0ea --- /dev/null +++ b/Source/ArachnaeSwarm/CompProperties_AnimalWorkSettings.cs @@ -0,0 +1,25 @@ +using System.Collections.Generic; +using Verse; +using RimWorld; + +namespace ArachnaeSwarm +{ + public class CompProperties_AnimalWorkSettings : CompProperties + { + // 使用列表存储键值对,因为RimWorld的XML解析器对字典有特殊要求 + public List workTypeMap = new List(); + + // 可以在这里添加一些配置选项,比如默认优先级等,但现在简单起见,可以留空或只做基本初始化 + public CompProperties_AnimalWorkSettings() + { + this.compClass = typeof(CompAnimalWorkSettings); + } + } + + // 定义键值对的结构 + public class WorkTypeMapEntry + { + public TrainableDef trainable; + public WorkTypeDef workType; + } +} \ No newline at end of file From f74c2b844b20831ec037df2b10d56117c06d1860 Mon Sep 17 00:00:00 2001 From: "ProjectKoi-Kalo\\Kalo" Date: Tue, 2 Sep 2025 18:39:28 +0800 Subject: [PATCH 03/13] =?UTF-8?q?=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1.6/1.6/Assemblies/ArachnaeSwarm.dll | Bin 43008 -> 46592 bytes .../Defs/ThingDef_Races/ARA_RaceBaseSwarm.xml | 9 ++ 1.6/1.6/Defs/ThinkTreeDefs/ARA_ThinkTrees.xml | 66 ++++++++------ Source/ArachnaeSwarm/ArachnaeSwarm.csproj | 4 +- .../ArachnaeSwarm/CompAnimalWorkSettings.cs | 82 ++++++++++++++---- Source/ArachnaeSwarm/CompInstantTrain.cs | 60 ++++++------- .../CompProperties_AnimalWorkSettings.cs | 25 ------ Source/ArachnaeSwarm/JobGiver_PlantCutting.cs | 56 ++++++++++++ Source/ArachnaeSwarm/JobGiver_PlantHarvest.cs | 63 ++++++++++++++ Source/ArachnaeSwarm/JobGiver_PlantSow.cs | 41 +++++++++ 10 files changed, 308 insertions(+), 98 deletions(-) delete mode 100644 Source/ArachnaeSwarm/CompProperties_AnimalWorkSettings.cs create mode 100644 Source/ArachnaeSwarm/JobGiver_PlantCutting.cs create mode 100644 Source/ArachnaeSwarm/JobGiver_PlantHarvest.cs create mode 100644 Source/ArachnaeSwarm/JobGiver_PlantSow.cs diff --git a/1.6/1.6/Assemblies/ArachnaeSwarm.dll b/1.6/1.6/Assemblies/ArachnaeSwarm.dll index 9aac5afea005fe0dc0243553ed4ef5b5e6bce2a9..5c8cda1fd0c72ecd0278c38089e04dcf8d228166 100644 GIT binary patch delta 19070 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 delta 16015 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
  • + + +
  • + Plants + 10 + true +
  • + +
  • ARA_Sowing diff --git a/1.6/1.6/Defs/ThinkTreeDefs/ARA_ThinkTrees.xml b/1.6/1.6/Defs/ThinkTreeDefs/ARA_ThinkTrees.xml index 8f310ad..fd0e1ae 100644 --- a/1.6/1.6/Defs/ThinkTreeDefs/ARA_ThinkTrees.xml +++ b/1.6/1.6/Defs/ThinkTreeDefs/ARA_ThinkTrees.xml @@ -107,7 +107,7 @@
  • - 30 + 30 35
  • @@ -324,6 +324,45 @@ + +
  • + ARA_Sowing + +
  • + + +
  • + +
  • + + + + +
  • + ARA_Sowing + +
  • + + +
  • + +
  • + + + + +
  • + ARA_PlantCutting + +
  • + + +
  • + +
  • + + + @@ -335,31 +374,6 @@ Insect_PreWander - -
  • - -
  • - TrainedAnimalBehavior - -
  • - -
  • - - - - - -
  • - -
  • - TrainedAnimalBehavior - -
  • - -
  • - - -
  • diff --git a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj index 7fc9efb..8f83075 100644 --- a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj +++ b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj @@ -96,8 +96,10 @@ - + + + diff --git a/Source/ArachnaeSwarm/CompAnimalWorkSettings.cs b/Source/ArachnaeSwarm/CompAnimalWorkSettings.cs index 758e74c..6c462cc 100644 --- a/Source/ArachnaeSwarm/CompAnimalWorkSettings.cs +++ b/Source/ArachnaeSwarm/CompAnimalWorkSettings.cs @@ -4,6 +4,35 @@ using RimWorld; namespace ArachnaeSwarm { + public class CompProperties_AnimalWorkSettings : CompProperties + { + // 使用列表存储键值对,因为RimWorld的XML解析器对字典有特殊要求 + public List workTypeMap = new List(); + // 定义动物的技能等级 + public List skillLevels = new List(); + + public CompProperties_AnimalWorkSettings() + { + this.compClass = typeof(CompAnimalWorkSettings); + } + } + + // 定义键值对的结构 + public class WorkTypeMapEntry + { + public TrainableDef trainable; + public WorkTypeDef workType; + } + + // 定义技能和等级的结构 + public class SkillLevelEntry + { + public SkillDef skill; + public int level = 0; // 默认等级为0 + // 可选:是否阻止技能衰减 + public bool disableDecay = true; + } + public class CompAnimalWorkSettings : ThingComp { public CompProperties_AnimalWorkSettings Props => (CompProperties_AnimalWorkSettings)this.props; @@ -15,35 +44,54 @@ namespace ArachnaeSwarm Pawn pawn = this.parent as Pawn; if (pawn == null) return; - // 关键:如果 pawn 没有 workSettings,则为其创建一个 + // 1. 确保 workSettings 存在 if (pawn.workSettings == null) { - // Log.Message($"Initializing Pawn_WorkSettings for animal: {pawn.LabelShort}"); pawn.workSettings = new Pawn_WorkSettings(pawn); pawn.workSettings.EnableAndInitializeIfNotAlreadyInitialized(); - - // 注意:Pawn_WorkSettings 的构造函数和 EnableAndInitializeIfNotAlreadyInitialized() - // 通常会处理所有可用的 WorkTypeDef,并将它们的优先级初始化为 0。 - // 这正是我们想要的初始状态。具体的优先级将由其他逻辑(如你的 CompInstantTrain 或 ThinkNode)来设置。 } - // 设置工作优先级 - if (pawn.workSettings != null) + // 2. 设置技能等级 (如果定义了) + if (pawn.skills != null && Props.skillLevels != null) + { + foreach (var entry in Props.skillLevels) + { + if (entry.skill != null) + { + var skillRecord = pawn.skills.GetSkill(entry.skill); + if (skillRecord != null) + { + // 设置技能等级 + skillRecord.Level = entry.level; + + // 可选:阻止技能衰减 + // 在新版本中,将激情设置为 None 可以阻止自然增长和衰减 + if (entry.disableDecay) + { + skillRecord.passion = Passion.None; + // 注意:仅设置 passion=None 可能不足以完全阻止衰减 + // 如果仍有问题,可能需要在 ThinkNode 或其他地方定期重置技能等级 + } + } + } + } + } + + // 3. 设置工作优先级 (如果定义了映射关系) + // 这里我们不检查 pawn.training.HasLearned,因为这个组件只负责提供"能力" + // 具体是否执行工作由 ThinkNode_Conditional 控制 + if (pawn.workSettings != null && Props.workTypeMap != null) { foreach (var entry in Props.workTypeMap) { - TrainableDef trainable = entry.trainable; - WorkTypeDef workType = entry.workType; - - // 检查动物是否学会了对应的 Trainable - if (pawn.training != null && pawn.training.HasLearned(trainable)) + if (entry.trainable != null && entry.workType != null) { - // 设置一个默认的非零优先级,例如 3 (Medium) - // 真正的"开关"由 ThinkNode_Conditional 的 GetWanted 控制 - pawn.workSettings.SetPriority(workType, 3); + // 为相关工作类型设置默认优先级 + // 实际是否执行由 ThinkNode_Conditional 的 GetWanted 控制 + pawn.workSettings.SetPriority(entry.workType, 3); } } } } } -} \ No newline at end of file +} diff --git a/Source/ArachnaeSwarm/CompInstantTrain.cs b/Source/ArachnaeSwarm/CompInstantTrain.cs index c7c95e8..cfb504d 100644 --- a/Source/ArachnaeSwarm/CompInstantTrain.cs +++ b/Source/ArachnaeSwarm/CompInstantTrain.cs @@ -4,6 +4,36 @@ using RimWorld; namespace ArachnaeSwarm { + public class CompInstantTrain : ThingComp + { + public CompProperties_InstantTrain Props => (CompProperties_InstantTrain)this.props; + + public override void PostSpawnSetup(bool respawningAfterLoad) + { + base.PostSpawnSetup(respawningAfterLoad); + + // 只在初次生成时执行,加载存档时不需要重新训练 + if (respawningAfterLoad) return; + + Pawn pawn = this.parent as Pawn; + if (pawn?.training == null) return; + + // 瞬间训练所有在 Props 中指定的技能 + foreach (var trainable in Props.trainables) + { + if (trainable != null && !pawn.training.HasLearned(trainable)) + { + // 注意:直接调用 Train 方法,它会内部处理 SetWanted 的逻辑 + // 原版的 SetWanted 方法可能已被移除或变为内部方法 + pawn.training.Train(trainable, null, true); // true表示瞬间完成 + } + } + + // CompInstantTrain 的职责到此结束 + // 工作优先级设置由 CompAnimalWorkSettings 负责 + } + } + public class CompProperties_InstantTrain : CompProperties { public List trainables = new List(); @@ -13,32 +43,4 @@ namespace ArachnaeSwarm this.compClass = typeof(CompInstantTrain); } } - - public class CompInstantTrain : ThingComp - { - public CompProperties_InstantTrain Props => (CompProperties_InstantTrain)this.props; - - public override void PostSpawnSetup(bool respawningAfterLoad) - { - base.PostSpawnSetup(respawningAfterLoad); - - if (!respawningAfterLoad) // 只在初次生成时执行 - { - Pawn pawn = this.parent as Pawn; - if (pawn == null || pawn.training == null) - { - return; - } - - // 瞬间训练技能 - foreach (TrainableDef trainableDef in Props.trainables) - { - if (!pawn.training.HasLearned(trainableDef)) - { - pawn.training.Train(trainableDef, null, true); - } - } - } - } - } -} \ No newline at end of file +} diff --git a/Source/ArachnaeSwarm/CompProperties_AnimalWorkSettings.cs b/Source/ArachnaeSwarm/CompProperties_AnimalWorkSettings.cs deleted file mode 100644 index a53c0ea..0000000 --- a/Source/ArachnaeSwarm/CompProperties_AnimalWorkSettings.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System.Collections.Generic; -using Verse; -using RimWorld; - -namespace ArachnaeSwarm -{ - public class CompProperties_AnimalWorkSettings : CompProperties - { - // 使用列表存储键值对,因为RimWorld的XML解析器对字典有特殊要求 - public List workTypeMap = new List(); - - // 可以在这里添加一些配置选项,比如默认优先级等,但现在简单起见,可以留空或只做基本初始化 - public CompProperties_AnimalWorkSettings() - { - this.compClass = typeof(CompAnimalWorkSettings); - } - } - - // 定义键值对的结构 - public class WorkTypeMapEntry - { - public TrainableDef trainable; - public WorkTypeDef workType; - } -} \ No newline at end of file diff --git a/Source/ArachnaeSwarm/JobGiver_PlantCutting.cs b/Source/ArachnaeSwarm/JobGiver_PlantCutting.cs new file mode 100644 index 0000000..4ea44c1 --- /dev/null +++ b/Source/ArachnaeSwarm/JobGiver_PlantCutting.cs @@ -0,0 +1,56 @@ +using System.Collections.Generic; +using Verse; +using Verse.AI; +using RimWorld; + +namespace ArachnaeSwarm +{ + public class JobGiver_PlantCutting : ThinkNode_JobGiver + { + private WorkGiverDef cutWorkGiverDef = null; + private bool triedToLoad = false; + + protected override Job TryGiveJob(Pawn pawn) + { + if (!triedToLoad || cutWorkGiverDef == null) + { + triedToLoad = true; + cutWorkGiverDef = DefDatabase.GetNamed("PlantsCut", false); + if (cutWorkGiverDef == null) + { + Log.ErrorOnce("[ArachnaeSwarm] Could not find WorkGiverDef named 'PlantsCut'. Plant Cutting will not work.", 847595); + return null; + } + } + + if (cutWorkGiverDef?.Worker is WorkGiver_Scanner workGiver) + { + // ... (你的逻辑,调用 workGiver 的方法) ... + IEnumerable potentialPlants = workGiver.PotentialWorkThingsGlobal(pawn); + // ... (后续逻辑,确保都用 workGiver 实例) ... + if (!workGiver.ShouldSkip(pawn) && workGiver.MissingRequiredCapacity(pawn) == null) + { + return workGiver.NonScanJob(pawn); + } + // ... + } + else + { + Log.Warning($"[ArachnaeSwarm] WorkGiverDef 'PlantsCut' Worker is not a WorkGiver_Scanner for pawn {pawn?.LabelShort ?? "NULL"}."); + } + + return null; + } + + // ... (Validator 方法也需要修改) ... + private static bool Validator(Pawn pawn, WorkGiver_Scanner workGiver, Thing t) + { + if (t.IsForbidden(pawn)) + { + return false; + } + // if (workGiver.ShouldSkip(pawn)) { return false; } // 这个检查可以保留或去掉 + return workGiver.JobOnThing(pawn, t) != null; // 使用传入的实例 + } + } +} diff --git a/Source/ArachnaeSwarm/JobGiver_PlantHarvest.cs b/Source/ArachnaeSwarm/JobGiver_PlantHarvest.cs new file mode 100644 index 0000000..13563fe --- /dev/null +++ b/Source/ArachnaeSwarm/JobGiver_PlantHarvest.cs @@ -0,0 +1,63 @@ +using System.Collections.Generic; +using Verse; +using Verse.AI; +using RimWorld; + +namespace ArachnaeSwarm +{ + public class JobGiver_PlantHarvest : ThinkNode_JobGiver + { + // 声明变量,但不立即初始化 + private WorkGiverDef harvestWorkGiverDef = null; + // 用一个标志位确保只尝试加载一次 + private bool triedToLoad = false; + + protected override Job TryGiveJob(Pawn pawn) + { + // 如果还没尝试加载,或者之前加载失败了 + if (!triedToLoad || harvestWorkGiverDef == null) + { + triedToLoad = true; // 标记为已尝试 + // 在需要时才查找 Def + harvestWorkGiverDef = DefDatabase.GetNamed("GrowerHarvest", false); + if (harvestWorkGiverDef == null) + { + // 这个 Log 可以保留,方便调试 + Log.ErrorOnce("[ArachnaeSwarm] Could not find WorkGiverDef named 'GrowerHarvest'. Harvesting will not work.", 847593); + return null; // 找不到就直接返回 + } + } + + // 现在可以安全地使用 harvestWorkGiverDef 了 + if (harvestWorkGiverDef?.Worker is WorkGiver_Scanner workGiver) + { + // ... (你原来的逻辑) ... + IEnumerable potentialPlants = workGiver.PotentialWorkThingsGlobal(pawn); + // ... (后续逻辑) ... + // 确保调用的是 workGiver (已解析的实例) + if (!workGiver.ShouldSkip(pawn) && workGiver.MissingRequiredCapacity(pawn) == null) + { + return workGiver.NonScanJob(pawn); + } + // ... 其他逻辑 ... + } + else + { + Log.Warning($"[ArachnaeSwarm] WorkGiverDef 'GrowerHarvest' Worker is not a WorkGiver_Scanner for pawn {pawn?.LabelShort ?? "NULL"}."); + } + + return null; + } + + // ... (Validator 方法也需要确保使用传入的 workGiver 实例) ... + private static bool HarvestValidator(Pawn pawn, WorkGiver_Scanner workGiver, Thing t) + { + if (t.IsForbidden(pawn)) + { + return false; + } + // 使用传入的已解析实例 + return workGiver.JobOnThing(pawn, t) != null; + } + } +} diff --git a/Source/ArachnaeSwarm/JobGiver_PlantSow.cs b/Source/ArachnaeSwarm/JobGiver_PlantSow.cs new file mode 100644 index 0000000..5994d2b --- /dev/null +++ b/Source/ArachnaeSwarm/JobGiver_PlantSow.cs @@ -0,0 +1,41 @@ +using Verse; +using Verse.AI; +using RimWorld; + +namespace ArachnaeSwarm +{ + public class JobGiver_PlantSow : ThinkNode_JobGiver + { + private WorkGiverDef sowWorkGiverDef = null; + private bool triedToLoad = false; + + protected override Job TryGiveJob(Pawn pawn) + { + if (!triedToLoad || sowWorkGiverDef == null) + { + triedToLoad = true; + sowWorkGiverDef = DefDatabase.GetNamed("GrowerSow", false); + if (sowWorkGiverDef == null) + { + Log.ErrorOnce("[ArachnaeSwarm] Could not find WorkGiverDef named 'GrowerSow'. Sowing will not work.", 847594); + return null; + } + } + + if (sowWorkGiverDef?.Worker is WorkGiver_Scanner sowerScanner) // 直接用 Scanner 接口 + { + // ... (你的逻辑,调用 sowerScanner 的方法) ... + if (!sowerScanner.ShouldSkip(pawn) && sowerScanner.MissingRequiredCapacity(pawn) == null) + { + return sowerScanner.NonScanJob(pawn); // 使用 Scanner 接口 + } + } + else + { + Log.Warning($"[ArachnaeSwarm] WorkGiverDef 'GrowerSow' Worker is not a WorkGiver_Scanner for pawn {pawn?.LabelShort ?? "NULL"}."); + } + + return null; + } + } +} From 8a7a947669cf03ffd10284fa5911b692e37022d1 Mon Sep 17 00:00:00 2001 From: "ProjectKoi-Kalo\\Kalo" Date: Tue, 2 Sep 2025 21:28:25 +0800 Subject: [PATCH 04/13] =?UTF-8?q?=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1.6/1.6/Assemblies/ArachnaeSwarm.dll | Bin 40448 -> 42496 bytes .../Defs/ThingDef_Races/ARA_RaceBaseSwarm.xml | 20 + .../ARA_AnimalWorkThinkTrees.xml | 444 +++++++++++++++ .../ArachnaeSwarm/AnimalWorkSystemPatcher.cs | 81 +++ Source/ArachnaeSwarm/ArachnaeSwarm.csproj | 4 + Source/ArachnaeSwarm/CompWorkForNonMechs.cs | 37 ++ ...alWorkModeSolution_Final_Implementation.md | 514 ++++++++++++++++++ 7 files changed, 1100 insertions(+) create mode 100644 1.6/1.6/Defs/ThinkTreeDefs/ARA_AnimalWorkThinkTrees.xml create mode 100644 Source/ArachnaeSwarm/AnimalWorkSystemPatcher.cs create mode 100644 Source/ArachnaeSwarm/CompWorkForNonMechs.cs create mode 100644 Source/Documents/AnimalWorkModeSolution_Final_Implementation.md diff --git a/1.6/1.6/Assemblies/ArachnaeSwarm.dll b/1.6/1.6/Assemblies/ArachnaeSwarm.dll index b47907eb209f8d5f54e960d1dc65ca4c77d406f6..2cf200902fbc220f7e0cd7c54e0d96a8e440de72 100644 GIT binary patch literal 42496 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 NG5lXX|9{fJ{|7`t(x(6b delta 20196 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 diff --git a/1.6/1.6/Defs/ThingDef_Races/ARA_RaceBaseSwarm.xml b/1.6/1.6/Defs/ThingDef_Races/ARA_RaceBaseSwarm.xml index 8f8c58d..5c290ab 100644 --- a/1.6/1.6/Defs/ThingDef_Races/ARA_RaceBaseSwarm.xml +++ b/1.6/1.6/Defs/ThingDef_Races/ARA_RaceBaseSwarm.xml @@ -37,6 +37,7 @@
  • + ARA_InsectWorker BeetleLikeWithClaw 0.25 0.8 @@ -69,7 +70,26 @@ DeathActionWorker_Vanish + +
  • Hauling
  • +
  • Mining
  • +
  • Construction
  • +
  • Crafting
  • +
  • Smithing
  • +
  • Tailoring
  • +
  • Cooking
  • +
  • Research
  • +
  • PlantCutting
  • +
  • Growing
  • +
  • Cleaning
  • +
  • Doctor
  • +
  • Firefighter
  • +
    + 10
    + +
  • +
  • AnimalInsect
  • diff --git a/1.6/1.6/Defs/ThinkTreeDefs/ARA_AnimalWorkThinkTrees.xml b/1.6/1.6/Defs/ThinkTreeDefs/ARA_AnimalWorkThinkTrees.xml new file mode 100644 index 0000000..d1c3516 --- /dev/null +++ b/1.6/1.6/Defs/ThinkTreeDefs/ARA_AnimalWorkThinkTrees.xml @@ -0,0 +1,444 @@ + + + + ARA_InsectWorker + + + +
  • + + +
  • + true +
  • + + +
  • + +
  • + +
  • + Downed +
  • +
  • + BurningResponse +
  • +
  • + MentalStateCritical +
  • + + +
  • + + +
  • + + +
  • + true + +
  • + +
  • + 0.7 + +
  • + DigOutIfCannotReachMapEdge +
  • +
    + + + + + + + +
  • + +
  • + Misc + +
  • + Walk +
  • + + + + + + +
  • + MentalStateNonCritical +
  • + + +
  • + +
  • + Misc + +
  • + +
  • + + + + +
  • + RopedPawn +
  • + + +
  • + LordDuty +
  • + + +
  • + Animal_PreMain +
  • +
  • + Insect_PreMain +
  • + +
  • + true + + +
  • + 30 + 35 +
  • + + +
  • + LeaveIfWrongSeason +
  • +
  • + LeaveIfStarving +
  • + + +
  • + 60 + +
  • + Misc + +
  • + Walk +
  • + + + + + + + + +
  • + true + +
  • + +
  • + +
  • + 60 + +
  • + Misc + +
  • + Walk +
  • + + + + + + + + + + + + +
  • + +
  • + TrainedAnimalBehavior + + +
  • + Obedience + +
  • + +
  • + true +
  • +
  • +
  • + +
  • + + + + +
  • + Rescue + +
  • + 75 +
  • + + + + + + + +
  • + RestingForMedicalReasons + +
  • + +
  • + +
  • +
  • + + +
  • + + +
  • + 60 + +
  • + SatisfyingNeeds + +
  • + +
  • + + + + +
  • + SatisfyBasicNeeds +
  • + + +
  • + + + +
  • + +
  • +
  • + true +
  • +
  • + + +
  • + +
  • + SatisfyingNeeds + +
  • + +
  • + + + + +
  • + +
  • + Misc + +
  • + +
  • + + + + +
  • + +
  • + Misc + +
  • + +
  • + + + + +
  • + 1.5 + +
  • + +
  • Manipulation
  • + + +
  • + Haul + +
  • + TrainedAnimalBehavior + +
  • + +
  • +
    + + + + + + + +
  • + Forage + +
  • + +
  • + +
  • + +
  • + + + + + + +
  • + Dig + +
  • + +
  • + +
  • + + + + + + + +
  • + Animal_PreWander +
  • +
  • + Insect_PreWander +
  • + + +
  • + +
  • + Idle + + +
  • + +
  • + None + 120~240 +
  • + + + +
  • + +
  • + None + 120~240 + 500 +
  • + + +
  • + 0.1 + +
  • + None + 120~240 + 500 +
  • + + + +
  • + None + 120~240 +
  • + + + + +
  • + None + 120~240 +
  • + + + + + + +
  • + +
  • + RestingForMedicalReasons + +
  • + +
  • + +
  • + Misc + +
  • + Walk +
  • + + + + + + +
  • + Idle + +
  • + +
  • + Deadly + 120~240 +
  • + + + +
  • + Deadly + 120~240 +
  • + + + +
  • + + + + \ No newline at end of file diff --git a/Source/ArachnaeSwarm/AnimalWorkSystemPatcher.cs b/Source/ArachnaeSwarm/AnimalWorkSystemPatcher.cs new file mode 100644 index 0000000..7218fd5 --- /dev/null +++ b/Source/ArachnaeSwarm/AnimalWorkSystemPatcher.cs @@ -0,0 +1,81 @@ +using System.Collections.Generic; +using System.Reflection; +using HarmonyLib; +using RimWorld; +using Verse; + +namespace ArachnaeSwarm +{ + [StaticConstructorOnStartup] + public static class AnimalWorkSystemPatcher + { + static AnimalWorkSystemPatcher() + { + var harmony = new Harmony("com.yourname.animalworksystem"); + harmony.PatchAll(); + } + } + + [HarmonyPatch(typeof(Pawn_WorkSettings), nameof(Pawn_WorkSettings.EnableAndInitialize))] + public static class Patch_Pawn_WorkSettings_EnableAndInitialize + { + // 缓存原始的 IsMechanoid 属性 Getter + private static PropertyInfo isMechanoidProperty = + typeof(RaceProperties).GetProperty("IsMechanoid", BindingFlags.Public | BindingFlags.Instance); + + public static bool Prefix(Pawn_WorkSettings __instance, Pawn ___pawn) + { + // 检查是否是我们想要启用工作系统的动物 + if (___pawn.Faction != null && ___pawn.Faction.IsPlayer && + !___pawn.RaceProps.IsMechanoid && // 真实身份不是机械体 + ShouldEnableWorkSystem(___pawn)) // 但我们需要为它启用工作系统 + { + // 局部伪装成机械体来执行初始化逻辑 + + // 执行机械体工作优先级初始化逻辑(来自 Pawn_WorkSettings.EnableAndInitialize) + if (ModsConfig.BiotechActive && !___pawn.RaceProps.mechWorkTypePriorities.NullOrEmpty()) + { + for (int i = 0; i < ___pawn.RaceProps.mechWorkTypePriorities.Count; i++) + { + var priority = ___pawn.RaceProps.mechWorkTypePriorities[i]; + __instance.SetPriority(priority.def, priority.priority); + } + } + + // 同时也可以初始化 mechEnabledWorkTypes 中的工作类型(如果你需要) + if (!___pawn.RaceProps.mechEnabledWorkTypes.NullOrEmpty()) + { + foreach (var workType in ___pawn.RaceProps.mechEnabledWorkTypes) + { + if (!__instance.WorkIsActive(workType) && !___pawn.WorkTypeIsDisabled(workType)) + { + __instance.SetPriority(workType, 3); // 默认优先级 + } + } + } + + // 阻止原方法继续执行(因为我们已经手动处理了初始化) + return false; + } + + return true; // 其他情况正常执行原逻辑 + } + + private static bool ShouldEnableWorkSystem(Pawn pawn) + { + // 检查 ThingDef 中是否有 CompProperties_WorkForNonMechs 配置 + if (pawn.def.comps != null) + { + foreach (var compProperties in pawn.def.comps) + { + if (compProperties is CompProperties_WorkForNonMechs) + { + return true; + } + } + } + + return false; + } + } +} \ No newline at end of file diff --git a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj index e339504..70224f4 100644 --- a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj +++ b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj @@ -85,6 +85,10 @@ + + + + diff --git a/Source/ArachnaeSwarm/CompWorkForNonMechs.cs b/Source/ArachnaeSwarm/CompWorkForNonMechs.cs new file mode 100644 index 0000000..5558a3b --- /dev/null +++ b/Source/ArachnaeSwarm/CompWorkForNonMechs.cs @@ -0,0 +1,37 @@ +using System.Collections.Generic; +using RimWorld; +using Verse; + +namespace ArachnaeSwarm +{ + public class CompProperties_WorkForNonMechs : CompProperties + { + public List workTypes; + + public CompProperties_WorkForNonMechs() + { + compClass = typeof(CompWorkForNonMechs); + } + } + + public class CompWorkForNonMechs : ThingComp + { + public CompProperties_WorkForNonMechs Props => (CompProperties_WorkForNonMechs)props; + + public override void PostSpawnSetup(bool respawningAfterLoad) + { + base.PostSpawnSetup(respawningAfterLoad); + + var pawn = parent as Pawn; + if (pawn == null || pawn.Faction == null || !pawn.Faction.IsPlayer) return; + + // 启用工作设置 + if (pawn.workSettings == null) + { + pawn.workSettings = new Pawn_WorkSettings(pawn); + } + + pawn.workSettings.EnableAndInitialize(); + } + } +} \ No newline at end of file diff --git a/Source/Documents/AnimalWorkModeSolution_Final_Implementation.md b/Source/Documents/AnimalWorkModeSolution_Final_Implementation.md new file mode 100644 index 0000000..002e461 --- /dev/null +++ b/Source/Documents/AnimalWorkModeSolution_Final_Implementation.md @@ -0,0 +1,514 @@ +# 动物工作模式解决方案文档(最终实现版) + +## 1. 项目概述 + +本项目旨在实现一个功能,使动物(特别是昆虫)能够像机械体一样持续工作,而不需要通过机械师控制 WorkMode。通过为动物启用工作系统并创建自定义行为树,动物将始终处于工作状态,持续执行允许的工作类型。 + +## 2. 原版代码分析 + +### 2.1 昆虫 ThinkTreeDef 结构 + +原版昆虫的 ThinkTree (`Insect.xml`) 包含以下主要逻辑: + +1. **紧急情况处理**:倒地、燃烧、精神状态等 +2. **基本需求满足**:睡觉、吃饭等 +3. **驯服动物行为**:跟随主人、救援等 +4. **闲置行为**:漫游、待命等 + +### 2.2 机械体 ThinkTreeDef 结构 + +原版机械体的 ThinkTree (`Mechanoid.xml`) 包含 WorkMode 系统,这是动物不具备的。 + +## 3. 为什么机械体有 workSettings 而动物没有 + +### 3.1 核心原因分析 + +机械体和动物虽然都是 Pawn,但它们的 workSettings 初始化逻辑不同: + +1. **`Pawn_WorkSettings` 的存在性**: + - `Pawn` 类内部持有一个 `Pawn_WorkSettings` 类型的引用 `priorities`,默认为 `null` + - `public bool EverWork => priorities != null;` 属性表明只有当 `priorities` 不为 `null` 时,Pawn 才有工作能力 + +2. **初始化条件**: + - `EnableAndInitializeIfNotAlreadyInitialized()` 方法检查 `priorities` 是否为 `null`,如果为 `null` 则调用 `EnableAndInitialize()` + - `EnableAndInitialize()` 方法是真正执行初始化的地方,创建 `priorities` 对象并根据条件设置初始优先级 + +3. **Mechanoid 有 WorkSettings 的证据**: + - `EnableAndInitialize()` 方法明确包含对机械体的特殊处理: + ```csharp + if (ModsConfig.BiotechActive && pawn.RaceProps.IsMechanoid && !pawn.RaceProps.mechWorkTypePriorities.NullOrEmpty()) + { + for (int i = 0; i < pawn.RaceProps.mechWorkTypePriorities.Count; i++) + { + MechWorkTypePriority mechWorkTypePriority = pawn.RaceProps.mechWorkTypePriorities[i]; + SetPriority(mechWorkTypePriority.def, mechWorkTypePriority.priority); + } + } + ``` + - 这表明机械体的设计意图就是拥有并使用 `Pawn_WorkSettings` + +4. **Animal 没有 WorkSettings 的证据**: + - **直接初始化逻辑**:`EnableAndInitialize()` 方法在为 Pawn 分配默认"活跃"工作类型时,会过滤掉 `pawn.WorkTypeIsDisabled(w)` 的工作类型。对于大多数动物来说,它们的 `RaceProps` 会禁用几乎所有需要手动分配的 `WorkTypeDef` + - **工作类型的定义**:绝大多数工作类型都包含限制,使得动物 Pawn 默认无法执行这些工作 + - **特定工作提供者的处理**:针对动物的操作是通过独立的 `WorkGiver` 系统直接处理的,不依赖于通用的 `workSettings` 优先级系统 + +### 3.2 结论 + +机械体被设计为拥有 `Pawn_WorkSettings`,因为它们的工作优先级可以通过其 `RaceProps.mechWorkTypePriorities` 进行预设,并且游戏逻辑会在需要时初始化它。 + +动物通常没有有效的 `Pawn_WorkSettings`,因为: +1. 它们被设计为不能执行绝大多数需要手动分配的工作 +2. 它们与玩家互动的特定工作是通过独立的 `WorkGiver` 系统直接处理的 +3. 因此,除非有特定的游戏逻辑或 Mod 显式地为动物调用 `EnableAndInitialize()`,否则它们的 `priorities` 对象很可能保持 `null` 状态 + +## 4. 为什么 `RaceProps.mechWorkTypePriorities` 只对机械体有效 + +### 4.1 核心解释 + +`mechWorkTypePriorities` 是 `RaceProperties` 类中的一个字段,专门用于定义机械体(Mechanoid)在生成时其工作类型(Work Types)的默认优先级。它的设计和使用都与机械体的独特机制紧密相关,而这些机制在动物或其他生物上并不存在或不以相同方式运作。 + +### 4.2 详细证据和解释 + +1. **字段定义与命名**: + - `mechWorkTypePriorities` 被明确定义为: + ```csharp + public List mechWorkTypePriorities; + ``` + - 其名称 `mechWorkTypePriorities` 包含了 "Mech" 前缀,明确指示其用途是针对机械体的。 + +2. **`MechWorkTypePriority` 类型**: + - 该字段存储的是 `MechWorkTypePriority` 对象的列表。虽然代码片段中没有直接给出 `MechWorkTypePriority` 的定义,但其名称和用途(存储工作类型及其优先级)强烈暗示它是专门为机械体设计的数据结构。 + +3. **使用场景 - 初始化工作设置**: + - 关键证据出现在 `Pawn_WorkSettings.EnableAndInitialize()` 方法中: + ```csharp + // ... (其他初始化代码) ... + if (ModsConfig.BiotechActive && pawn.RaceProps.IsMechanoid && !pawn.RaceProps.mechWorkTypePriorities.NullOrEmpty()) + { + for (int i = 0; i < pawn.RaceProps.mechWorkTypePriorities.Count; i++) + { + MechWorkTypePriority mechWorkTypePriority = pawn.RaceProps.mechWorkTypePriorities[i]; + SetPriority(mechWorkTypePriority.def, mechWorkTypePriority.priority); + } + } + // ... (其他初始化代码,如处理禁用的工作类型) ... + ``` + - 这段代码明确地检查了三个条件: + * `ModsConfig.BiotechActive`:生物技术(Biotech)模组是否激活。这表明该功能是与 Biotech 模组引入的机械体相关的。 + * `pawn.RaceProps.IsMechanoid`:当前 Pawn(单位)的种族属性是否为机械体。 + * `!pawn.RaceProps.mechWorkTypePriorities.NullOrEmpty()`:该机械体的 `mechWorkTypePriorities` 列表是否存在且非空。 + - **只有当这三个条件都满足时,才会遍历 `mechWorkTypePriorities` 列表,并根据其中定义的 `WorkTypeDef` 和优先级来设置该机械体 Pawn 的工作优先级。** + - 对于动物或其他非机械体生物,`pawn.RaceProps.IsMechanoid` 条件为假,因此即使在它们的 `ThingDef` 中定义了 `mechWorkTypePriorities`,这段代码也不会执行,这些优先级设置就会被忽略。 + +4. **机制差异 - 动物 vs 机械体**: + - **动物**:动物的工作能力(如驯服、训练、特定任务)通常是通过 `trainability`(可训练性)、`trainableTags`(可训练标签)等属性来定义的。它们的工作行为(如觅食、繁殖、战斗)主要由其 `intelligence`(智力)、`thinkTreeMain`(主思考树)和 `dutyBoss`(职责)等属性驱动。它们的初始工作优先级(如果有的话)通常是固定的或基于简单规则随机分配,而不是通过一个专门的优先级列表来精确控制。 + - **机械体**:机械体是 Biotech 模组引入的复杂单位,它们拥有类似殖民者的工作系统。它们可以被指派执行各种殖民者能做的工作(如建造、种植、烹饪等),其能力范围和初始工作优先级需要更精细的控制。`mechWorkTypePriorities` 就是为了满足这种需求而设计的,允许设计者为每种机械体明确指定哪些工作类型应该默认开启以及它们的优先级。 + +5. **辅助证据 - MechWorkUtility**: + - 在 `MechWorkUtility` 类中,多个方法(如 `SpecialDisplayStats`, `AnyWorkMechCouldDo`)在处理与机械体工作相关逻辑时,都会首先检查 `parentDef.race.IsMechanoid`。这进一步证明了与机械体工作类型相关的逻辑是严格限定于机械体的。 + +### 4.3 结论 + +`RaceProperties.mechWorkTypePriorities` 虽然是 `RaceProperties` 类的一个通用属性,但它被设计并实现为**仅对机械体(Mechanoid)生效**。这是因为: + +1. 它的命名和数据类型 (`MechWorkTypePriority`) 明确指向机械体。 +2. 核心的使用代码 (`Pawn_WorkSettings.EnableAndInitialize`) 通过 `pawn.RaceProps.IsMechanoid` 条件严格限制了其应用范围。 +3. 机械体和动物在工作系统上的根本差异决定了需要不同的机制来管理其初始工作能力,`mechWorkTypePriorities` 是为满足机械体特有需求而生的。 + +因此,即使在动物的 `ThingDef` 文件中添加了 `mechWorkTypePriorities` 部分,游戏代码也不会读取或应用这些设置,因为动物不是机械体,相关的初始化逻辑不会被执行。 + +## 5. 通过 Harmony 补丁拦截 `pawn.RaceProps.IsMechanoid` 的分析 + +### 5.1 用户提供的实现思路 + +用户提供了一种更精确和安全的实现思路:通过 Harmony 补丁拦截 `Pawn_WorkSettings.EnableAndInitialize` 方法,在特定条件下局部伪装成机械体来为动物启用工作系统。 + +### 5.2 实现方法 + +1. **引入 Harmony**:确保你的 Mod 项目中引用了 Harmony 库。 +2. **定义补丁类**:创建一个静态类来存放你的 Harmony 补丁。 +3. **编写前缀补丁**: + ```csharp + [HarmonyPatch(typeof(Pawn_WorkSettings), nameof(Pawn_WorkSettings.EnableAndInitialize))] + public static class Patch_Pawn_WorkSettings_EnableAndInitialize + { + public static bool Prefix(Pawn_WorkSettings __instance, Pawn ___pawn) + { + // 检查是否是我们想要启用工作系统的动物 + if (___pawn.Faction != null && ___pawn.Faction.IsPlayer && + !___pawn.RaceProps.IsMechanoid && // 真实身份不是机械体 + ShouldEnableWorkSystem(___pawn)) // 但我们需要为它启用工作系统 + { + // 局部伪装成机械体来执行初始化逻辑 + + // 执行机械体工作优先级初始化逻辑 + if (ModsConfig.BiotechActive && !___pawn.RaceProps.mechWorkTypePriorities.NullOrEmpty()) + { + for (int i = 0; i < ___pawn.RaceProps.mechWorkTypePriorities.Count; i++) + { + var priority = ___pawn.RaceProps.mechWorkTypePriorities[i]; + __instance.SetPriority(priority.def, priority.priority); + } + } + + // 同时也可以初始化 mechEnabledWorkTypes 中的工作类型 + if (!___pawn.RaceProps.mechEnabledWorkTypes.NullOrEmpty()) + { + foreach (var workType in ___pawn.RaceProps.mechEnabledWorkTypes) + { + if (!__instance.WorkIsActive(workType) && !___pawn.WorkTypeIsDisabled(workType)) + { + __instance.SetPriority(workType, 3); // 默认优先级 + } + } + } + + // 阻止原方法继续执行 + return false; + } + + return true; // 其他情况正常执行原逻辑 + } + + private static bool ShouldEnableWorkSystem(Pawn pawn) + { + // 检查是否有特定的 Comp + if (pawn.TryGetComp() != null) + return true; + + // 检查是否有 mechWorkTypePriorities 或 mechEnabledWorkTypes 配置 + if (!pawn.RaceProps.mechWorkTypePriorities.NullOrEmpty() || + !pawn.RaceProps.mechEnabledWorkTypes.NullOrEmpty()) + return true; + + return false; + } + } + ``` +4. **应用补丁**: + ```csharp + [StaticConstructorOnStartup] + public static class AnimalWorkSystemPatcher + { + static AnimalWorkSystemPatcher() + { + var harmony = new Harmony("com.yourname.animalworksystem"); + harmony.PatchAll(); + } + } + ``` + +### 5.3 潜在问题和风险 + +1. **副作用**: + - 这种方法比直接补丁 `IsMechanoid` 属性更加精确,因为它只在 `Pawn_WorkSettings.EnableAndInitialize` 方法中进行伪装,不影响其他系统。 + - 但仍需注意确保伪装逻辑只在特定条件下触发,避免意外影响其他 Pawn。 + +2. **补丁冲突**: + - 其他 Mod 也可能使用 Harmony 来修改 `Pawn_WorkSettings` 或相关逻辑。 + - 需要确保补丁逻辑具有良好的兼容性。 + +3. **性能影响**: + - Harmony 补丁会增加方法调用的开销,但在这个场景下影响很小。 + +4. **维护困难**: + - 如果游戏更新修改了相关逻辑,你的补丁可能失效或产生新的问题,需要随之更新。 + +### 5.4 结论和建议 + +用户提供的实现思路是一种更加精确和安全的方法,通过局部伪装成机械体来为动物启用工作系统。这种方法的优点包括: + +1. **精确性**:只在特定条件下(动物是玩家阵营且需要启用工作系统)才进行伪装。 +2. **安全性**:只在 `Pawn_WorkSettings.EnableAndInitialize` 方法中进行伪装,不影响其他系统。 +3. **兼容性**:通过检查特定的 Comp 或配置来决定是否启用工作系统,具有良好的可扩展性。 + +## 6. 完整实现方案 + +### 6.1 核心思路 + +1. 为动物添加 `CompWorkForNonMechs` 以启用工作系统 +2. 创建 `ThinkNode_AnimalWorker` 替代默认行为,强制工作 +3. 使用 Harmony 补丁局部伪装成机械体来为动物启用工作系统 +4. 使用自定义 ThinkTree 替代默认动物行为树 +5. 定义允许的工作类型,并确保其与 WorkGiver 兼容 + +### 6.2 设计要点 + +1. **为动物启用 WorkSettings 系统**:通过 Harmony 补丁局部伪装成机械体来为动物启用工作系统 +2. **使用自定义 ThinkNode 强制工作行为**:创建 ThinkNode,跳过所有动物默认行为,直接进入工作逻辑 +3. **修改动物定义**:添加 ThinkTree 和 Comp +4. **为动物添加工作类型支持**:定义允许的工作类型 + +## 7. 实现细节 + +### 7.1 CompWorkForNonMechs.cs + +```csharp +using System.Collections.Generic; +using RimWorld; +using Verse; + +namespace YourModName +{ + public class CompWorkForNonMechs : ThingComp + { + public class CompProperties_WorkForNonMechs : CompProperties + { + public List workTypes; + + public CompProperties_WorkForNonMechs() + { + compClass = typeof(CompWorkForNonMechs); + } + } + + public override void PostSpawnSetup(bool respawningAfterLoad) + { + base.PostSpawnSetup(respawningAfterLoad); + + var pawn = parent as Pawn; + if (pawn == null || pawn.Faction == null || !pawn.Faction.IsPlayer) return; + + // 启用工作设置 + if (pawn.workSettings == null) + { + pawn.workSettings = new Pawn_WorkSettings(pawn); + } + + pawn.workSettings.EnableAndInitialize(); + + // 启用指定的工作类型 + var props = (CompProperties_WorkForNonMechs)props; + if (props.workTypes != null) + { + foreach (var workType in props.workTypes) + { + if (!pawn.WorkTypeIsDisabled(workType)) + { + pawn.workSettings.SetPriority(workType, 3); // 默认优先级 + } + } + } + } + } +} +``` + +### 7.2 ThinkNode_AnimalWorker.cs + +```csharp +using RimWorld; +using Verse; + +namespace YourModName +{ + public class ThinkNode_AnimalWorker : ThinkNode_Priority + { + public override ThinkResult TryIssueJobPackage(Pawn pawn, JobIssueParams jobParams) + { + if (pawn.workSettings == null || !pawn.Faction.IsPlayer) + { + return ThinkResult.NoJob; + } + + // 优先执行紧急工作 + var job = WorkGiverUtility.GetPriorityWork(pawn, emergency: true); + if (job != null) return new ThinkResult(job, this); + + // 然后执行普通工作 + job = WorkGiverUtility.GetPriorityWork(pawn, emergency: false); + if (job != null) return new ThinkResult(job, this); + + return ThinkResult.NoJob; + } + } +} +``` + +### 7.3 AnimalWorkSystemPatcher.cs + +```csharp +using System.Collections.Generic; +using System.Reflection; +using HarmonyLib; +using RimWorld; +using Verse; + +namespace YourModName +{ + [StaticConstructorOnStartup] + public static class AnimalWorkSystemPatcher + { + static AnimalWorkSystemPatcher() + { + var harmony = new Harmony("com.yourname.animalworksystem"); + harmony.PatchAll(); + } + } + + [HarmonyPatch(typeof(Pawn_WorkSettings), nameof(Pawn_WorkSettings.EnableAndInitialize))] + public static class Patch_Pawn_WorkSettings_EnableAndInitialize + { + // 缓存原始的 IsMechanoid 属性 Getter + private static PropertyInfo isMechanoidProperty = + typeof(RaceProperties).GetProperty("IsMechanoid", BindingFlags.Public | BindingFlags.Instance); + + public static bool Prefix(Pawn_WorkSettings __instance, Pawn ___pawn) + { + // 检查是否是我们想要启用工作系统的动物 + if (___pawn.Faction != null && ___pawn.Faction.IsPlayer && + !___pawn.RaceProps.IsMechanoid && // 真实身份不是机械体 + ShouldEnableWorkSystem(___pawn)) // 但我们需要为它启用工作系统 + { + // 局部伪装成机械体来执行初始化逻辑 + + // 执行机械体工作优先级初始化逻辑(来自 Pawn_WorkSettings.EnableAndInitialize) + if (ModsConfig.BiotechActive && !___pawn.RaceProps.mechWorkTypePriorities.NullOrEmpty()) + { + for (int i = 0; i < ___pawn.RaceProps.mechWorkTypePriorities.Count; i++) + { + var priority = ___pawn.RaceProps.mechWorkTypePriorities[i]; + __instance.SetPriority(priority.def, priority.priority); + } + } + + // 同时也可以初始化 mechEnabledWorkTypes 中的工作类型(如果你需要) + if (!___pawn.RaceProps.mechEnabledWorkTypes.NullOrEmpty()) + { + foreach (var workType in ___pawn.RaceProps.mechEnabledWorkTypes) + { + if (!__instance.WorkIsActive(workType) && !___pawn.WorkTypeIsDisabled(workType)) + { + __instance.SetPriority(workType, 3); // 默认优先级 + } + } + } + + // 阻止原方法继续执行(因为我们已经手动处理了初始化) + return false; + } + + return true; // 其他情况正常执行原逻辑 + } + + private static bool ShouldEnableWorkSystem(Pawn pawn) + { + // 你可以通过多种方式判断: + // 1. 检查是否有特定的 Comp + if (pawn.TryGetComp() != null) + return true; + + // 2. 检查是否有 mechWorkTypePriorities 或 mechEnabledWorkTypes 配置 + if (!pawn.RaceProps.mechWorkTypePriorities.NullOrEmpty() || + !pawn.RaceProps.mechEnabledWorkTypes.NullOrEmpty()) + return true; + + // 3. 检查特定的标签或 defName + // return pawn.def.defName.Contains("Worker"); + + return false; + } + } +} +``` + +### 7.4 修改动物定义 + +```xml + + Megascarab_Worker + + A genetically modified megascarab, capable of performing simple mechanical tasks. + + 3.0 + 300 + + + InsectWorker + AnimalConstant + +
  • + Hauling + 3 +
  • +
  • + Cleaning + 2 +
  • + + + +
  • + +
  • Hauling
  • +
  • Cleaning
  • +
  • BasicWorker
  • + + +
    + +``` + +### 7.5 自定义 ThinkTreeDef + +```xml + + InsectWorker + + + +
  • Downed
  • +
  • BurningResponse
  • +
  • MentalStateCritical
  • + + +
  • + + +
  • + + + +``` + +## 8. 原始方案的反驳分析 + +### 8.1 项目概述:不成立 + +**反驳证据:** +- RimWorld 原版设计中,动物的行为树是完全独立于机械体的,没有 WorkMode 系统。 +- 动物不能直接复用机械体的工作逻辑。 + +### 8.2 ThinkNode_AnimalAlwaysWork 类:不成立 + +**反驳证据:** +- `ThinkNode_Priority` 是一个标准的 ThinkNode,它会按顺序尝试子节点,直到某一个返回 `ThinkResult`。 +- 该类不会实现"始终工作"的功能,因为它没有改变行为树的执行逻辑。 + +### 8.3 InsectWorker ThinkTreeDef:不成立 + +**反驳证据:** +- RimWorld 中,动物的 ThinkTree 并不会调用 `JobGiver_Work`,因为该类是为机械体设计的。 +- 即使强制插入 `JobGiver_Work`,它也会因为动物的 `WorkSettings` 未初始化而失败。 + +### 8.4 Harmony 补丁拦截 IsMechanoid:不成立 + +**反驳证据:** +- `RaceProperties.IsMechanoid` 是一个只读属性,由 `true` 控制。 +- Patch 该属性会导致所有依赖该属性的逻辑被干扰,风险极高。 + +## 9. 使用说明 + +1. **编译代码**:将所有 C# 文件编译到您的 Mod 中 +2. **添加 XML 文件**:将新的 ThinkTreeDef 和动物定义添加到您的 Mod 中 +3. **配置工作类型**:在动物定义中配置 `mechWorkTypePriorities` 和 `CompWorkForNonMechs` 组件 +4. **测试**:在游戏中生成修改后的动物,观察其工作行为 + +## 10. 注意事项 + +1. **兼容性**:此方案绕过了 WorkMode 系统,动物将始终处于工作状态 +2. **性能**:频繁的工作查找可能会有轻微性能影响 +3. **调试**:如果遇到问题,请检查日志文件中的错误信息 +4. **避免 patch IsMechanoid**:不干扰原版逻辑 +5. **副作用风险**:直接 patch `IsMechanoid` 会导致严重的副作用,强烈不推荐使用 +6. **精确补丁**:用户提供的实现通过局部伪装成机械体来为动物启用工作系统,是一种更加精确和安全的方法 \ No newline at end of file From 9b5a8a58d32c257193108fdd379f513b99fdac63 Mon Sep 17 00:00:00 2001 From: "ProjectKoi-Kalo\\Kalo" Date: Tue, 2 Sep 2025 21:43:35 +0800 Subject: [PATCH 05/13] =?UTF-8?q?=E6=80=AA=E4=BA=86=E5=A5=BD=E4=BD=BF?= =?UTF-8?q?=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1.6/1.6/Assemblies/ArachnaeSwarm.dll | Bin 42496 -> 41984 bytes .../ArachnaeSwarm/AnimalWorkSystemPatcher.cs | 44 ++++++++---------- Source/ArachnaeSwarm/CompWorkForNonMechs.cs | 2 +- 3 files changed, 20 insertions(+), 26 deletions(-) diff --git a/1.6/1.6/Assemblies/ArachnaeSwarm.dll b/1.6/1.6/Assemblies/ArachnaeSwarm.dll index 2cf200902fbc220f7e0cd7c54e0d96a8e440de72..86d134aa5d75d2ec08342cbc42e3559db1c3b4e0 100644 GIT binary patch delta 14513 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 delta 14864 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 U4}7mGkB!>tf9OlGevtkD0Df_L%K!iX diff --git a/Source/ArachnaeSwarm/AnimalWorkSystemPatcher.cs b/Source/ArachnaeSwarm/AnimalWorkSystemPatcher.cs index 7218fd5..6efbef3 100644 --- a/Source/ArachnaeSwarm/AnimalWorkSystemPatcher.cs +++ b/Source/ArachnaeSwarm/AnimalWorkSystemPatcher.cs @@ -16,36 +16,35 @@ namespace ArachnaeSwarm } } - [HarmonyPatch(typeof(Pawn_WorkSettings), nameof(Pawn_WorkSettings.EnableAndInitialize))] + [HarmonyPatch(typeof(Pawn_WorkSettings), "EnableAndInitialize")] public static class Patch_Pawn_WorkSettings_EnableAndInitialize { - // 缓存原始的 IsMechanoid 属性 Getter - private static PropertyInfo isMechanoidProperty = - typeof(RaceProperties).GetProperty("IsMechanoid", BindingFlags.Public | BindingFlags.Instance); - - public static bool Prefix(Pawn_WorkSettings __instance, Pawn ___pawn) + public static void Postfix(Pawn_WorkSettings __instance, Pawn ___pawn) { - // 检查是否是我们想要启用工作系统的动物 + // 检查是否是我们想要启用工作系统的动物,并且它不是机械体 + // 因为原版的 EnableAndInitialize 已经处理了机械体的工作设置 if (___pawn.Faction != null && ___pawn.Faction.IsPlayer && - !___pawn.RaceProps.IsMechanoid && // 真实身份不是机械体 - ShouldEnableWorkSystem(___pawn)) // 但我们需要为它启用工作系统 + !___pawn.RaceProps.IsMechanoid && + ShouldEnableWorkSystem(___pawn)) { - // 局部伪装成机械体来执行初始化逻辑 - - // 执行机械体工作优先级初始化逻辑(来自 Pawn_WorkSettings.EnableAndInitialize) - if (ModsConfig.BiotechActive && !___pawn.RaceProps.mechWorkTypePriorities.NullOrEmpty()) + // 获取 CompProperties_WorkForNonMechs + CompProperties_WorkForNonMechs compProps = null; + if (___pawn.def.comps != null) { - for (int i = 0; i < ___pawn.RaceProps.mechWorkTypePriorities.Count; i++) + foreach (var comp in ___pawn.def.comps) { - var priority = ___pawn.RaceProps.mechWorkTypePriorities[i]; - __instance.SetPriority(priority.def, priority.priority); + if (comp is CompProperties_WorkForNonMechs props) + { + compProps = props; + break; + } } } - - // 同时也可以初始化 mechEnabledWorkTypes 中的工作类型(如果你需要) - if (!___pawn.RaceProps.mechEnabledWorkTypes.NullOrEmpty()) + + if (compProps != null && compProps.workTypes != null) { - foreach (var workType in ___pawn.RaceProps.mechEnabledWorkTypes) + // 设置 CompProperties_WorkForNonMechs 中定义的工作类型优先级 + foreach (var workType in compProps.workTypes) { if (!__instance.WorkIsActive(workType) && !___pawn.WorkTypeIsDisabled(workType)) { @@ -53,12 +52,7 @@ namespace ArachnaeSwarm } } } - - // 阻止原方法继续执行(因为我们已经手动处理了初始化) - return false; } - - return true; // 其他情况正常执行原逻辑 } private static bool ShouldEnableWorkSystem(Pawn pawn) diff --git a/Source/ArachnaeSwarm/CompWorkForNonMechs.cs b/Source/ArachnaeSwarm/CompWorkForNonMechs.cs index 5558a3b..3f5b471 100644 --- a/Source/ArachnaeSwarm/CompWorkForNonMechs.cs +++ b/Source/ArachnaeSwarm/CompWorkForNonMechs.cs @@ -25,7 +25,7 @@ namespace ArachnaeSwarm var pawn = parent as Pawn; if (pawn == null || pawn.Faction == null || !pawn.Faction.IsPlayer) return; - // 启用工作设置 + // 确保 workSettings 实例存在 if (pawn.workSettings == null) { pawn.workSettings = new Pawn_WorkSettings(pawn); From 9e4eda256ffacb9718033d9262abcbb6726d1300 Mon Sep 17 00:00:00 2001 From: "ProjectKoi-Kalo\\Kalo" Date: Tue, 2 Sep 2025 21:49:46 +0800 Subject: [PATCH 06/13] =?UTF-8?q?=E4=BF=AE=E8=B4=A8=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1.6/1.6/Assemblies/ArachnaeSwarm.dll | Bin 41984 -> 43520 bytes Source/ArachnaeSwarm/ArachnaeSwarm.csproj | 1 + Source/ArachnaeSwarm/Patch_QualityUtility.cs | 62 +++++++++++++++++++ 3 files changed, 63 insertions(+) create mode 100644 Source/ArachnaeSwarm/Patch_QualityUtility.cs diff --git a/1.6/1.6/Assemblies/ArachnaeSwarm.dll b/1.6/1.6/Assemblies/ArachnaeSwarm.dll index 86d134aa5d75d2ec08342cbc42e3559db1c3b4e0..95b125e582bce96677027e1813f07acff062d828 100644 GIT binary patch delta 14239 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 delta 13192 zcmb7r3wTu3wg1}ZoH_HJ%$!Lwc}&PmLXrtdNJ4ld;i1SgC_8x3GrnJ1GtY0(X`{|q8DDiiKazai~Mzk3MJuaN^BAy|94&X!NmApcv zNqEr=sO``FJ>UL@=xWv+AbLS*3;SIsh+M$$K@l{=O0hXh6gVb73Q-83&E|a~*M0yT z``c>%T4dW#fI|oLxcPy|NiXL9@i!hHg)H>#45HIF5(#tU<3r5J$~1A8xl0t zSQRm^<74fdBJS_#vesC{!yUQqd{sPRPVn{-8#@+y{koWEHm7a`{W1_V2L$$`#g~EK zX%IXc91ZY~;Bx|xr}}s-W@TPhWj4BvWDq%;GeP0~flHIq?1x*VZNlT^94SYumQKqwqto=BP%Mnw7^fl;z@+F*? ze6i7Tkf;`Sw)0_hdC}PjIK!ACu>X@YO;PV>KXo32hw94ma$phZYw-UkuqcmJLus$b z*lIbGM3&d|1lBW_VIIpvO5_$EnJTuv9we_MkiQ%Qp z2&NFhG;W2BLsy$^7;_Et;U=>-;*Vk>>5V?wavtP$2H1QkA=WSGkM(FHsqiR^1$SKh zGC`cKuW?(#EoMBtHeqlbOED3J(^}l$8cBw`l3Z&f1<&G4Yh5a1zqJl4+EL=P)|uxb zDbWCgeoN)+aIHk(&`~lhgVu=v_ zc8)%i?E;A2WosIa82whm8p(pN#H~d7;Mo+-1}$PS>g<42`WOP+l1wFXGn^z0L$Iq0 zgV--JYW# zBGZ%)BcC&}48pnsZjj`2`jVRR&Fw|iM(=2L$Y{(jiUQFe4N3%!FedT7BMV@K&g5_v zLW2_c4WCim2iw&}VS?=ky)Cl1SBs)V3%}1_oZHiag^3o$%r<55)Qz{3OGhIVm5O;C ztBob*w&K)D{b5+7TOy@+Mz8`LDRt$b`Fh_aMhQ1lA_JgJ3}W`M$b&F) z=v7xj&tqb0B@uCpSyB=jd9fmO6=>luDmK)}KyZF6DWBGaK(xrMTxqRoDEJGS-{P|r zTPW38~|Y_@Vg9G zWH5K_^f`->LyyTKE@+XH2+aqX1N#pX{muIRfhfKxI8&aq%WDx^uU%;iWQo0nHSxWr z;TKphar?R#Q4psgBG2I2@Vt~SM4KK_o$Twfc;(j@3d4>6SS)LeWzEV~$?lE^)1g$Dzty7tq zRsJL-o#g}lqorGc?Z;&+E+wVm3#aKGP$up+M+}&lItJQ%`k;?^UwVCCla0m;du zpsH{pJ$%n@J;0!UI+94@6>>zr-{*4cr%ZH?1KLf2Xa`B?{ zyY%Y8d8kb@p_M5OE?1kb1xV|k7iR($>1xwHR8m!%=AiGUSD(weamX#vLv z$x4c3Db?|TO^N*6JXUoXGEA;6yi`9njn9Xj=9KEN*kv|W7mnzgOO(5uXg!`S$Rc;@ z9SsX_zqyf9^Nz*G4cYXm6heW#kmZh>UNf4*0)EbGzEhna{w*N(Cc?f&*k9y3Z!(_9 z6B`-PWoCG2Np!Lo5Pv#Nb}k6$v_#V5j_N=XJ%!n(lhrxJqtoLK)~I^At^W;ke>pPlaYF|9PXflFa`FWSD!bdWQd$hgSKWC=?;2DVMlkTFzu91br18ukn&s6 zz(a2;Wp)ScPhtCfI|uZlmqXts!}oGtul{rn2 zd8EqXza%TP8u{t;poeW{__)>Tkfd&=hh;L~8O$G-fqp9`-`H95b=1mHXfpdfGKjet zX$NIX`3z8A% zmK##O+0Shcg`@mf9v6jJ9gs$U3^TtliRoET4;^*$*#FGJk`r=_^W@AJA+vc^4#!bc zC6$)hy8Y+q`Y=zu+r#YtJmi-tO+l8dmZ_G@1e{4@qi{DwM)xtg)ahPX{L^x@x$yV3NR=W`v z=KtShQ2JqeT}QHs6YdxkRbiotF+Slhkbl!*f_qi2DH=tE@^6{4L* zGQVca7klgMq z1e^`zCA%w*u9K!W8{Dvz=16oO(0pVxH;&M5q!>syNpu@ftr$WL5-kt2muk9`RQS{} zyoEG^?vexz@7h-;D!0*yY3o)IUnF)HeF&nEw&&~yZP;J6DX02L)%bUYVRhpoAXe;Py&?zkg z^&;1lmJy&j6=btFHJZsr_c_YYU_3;E3W7|3mOcnZKiEzQosw-Mz(>+qzS%_k4=nA7cJ3EBm}D`!ReUyz7bfhy+E_ z#=&Tj?B)rLJF9oF)2V4!yUM95lPycrX2PZwHahJw=7GNwazO_Sw$HQ7cKFDv&v*Ig zgoWw9Ky_N@V?X=cVTAru=dF;$D_Wji6@{a@>5ULg2{obys~qg;l|HA0pn)=o4el&# zD-TF|A?+U6Sd`_UtqSLHA#D}f1`V!9-056pZ7)AR1t0elw+To~ZYAgqvDOt8v`Kjo zV7KyUuV&j4&A5Y|;17sxE?qBGtF##{KZMF$Gg>-4Wv;=LuC}{UG5vNU2;r@?u;h1; z%%DF=`5U0<2--Dr4qc*&RHOe(u5Y8`c&_V^>tyVDM61(+cw-VY>muSka^Xe9x`rR2 zZ4!0T;fyGB&r1}e$3zr6=z$P!9pTjWXvX_4m0pv|)i#$WjLr3Ji8^U?#z)Y78Q0Me zA7(!-3Zofy(pyQ4UXUn81;!UH^PMsI)f}UR9>`;(7!`?gE(>jwsFS`-??yR}N%RL= zmwv%zrPC5|Zf5n^j3_s^(lz2}^;SkDhUI(?E$j=~IN}rmX&~>!dZ9(QXrskya8Oq-?%v;B2jJwu8&z(X)!EH0#&|CH@C6(4o6r>;23oC zB5&jibKUiVDeF6Gu78&%684wGzdXD51YhU|lCoQV+SKSfy9S;Slu`tl&jg zF^XqVLQ8*ywo4S>P)q2A1lkx-o&70mBDafguceePQQS)z4Zes3mC-bbPKqLYGnPkb zLjpF3!gzT+Jt^+yc6_VhRq|>^C+%-!eIm-q9!Ek6vd){(ZRt}6l$Ow`sef{p)6EI= z->IXZtCJ`mOgY{CBNSaJ;REW4MH4xsS~#DNZ=Vb@#=bO6ni=%jsW zpJTYtx;~C%paW<@LdSs)pd|_2f2MZ9@^{e$6rYI0sV$CVxrfungpSKSoVF!& zJQ0V}-xG+-%^RSg4em=cXrOK8OXJPthjp<+UE1E(NXEVP)y+;z4_t5y;`>$}c z7BnH5&xh~&dMvr^CCN8_mVaWuM9ZXv+u|*-cV~ai^m-NAhug19axd=5-o)iUsKN9a z8RAz6TA|mZq_=#(v|J-o>P;6QZ@hMSa6c(~OjH8vzgIz4;f%wthnMK75cBo25*04y zuVfYWUOgatVB7C=}4VJRAy zLRN~#rI3|EW+z^hK2V*~K^-_Z1p{8}5-h0!O`)}*nY3L>+Gzxq?H=OU97(UDtyypepHfilp_RixD1cm(k<4M)1cn znn3wY_Xr)#SWBa!-9cT-qTo}Q>A}Du(AmKvI;j}Ruh1FgFSgfV`BoC<-dW`~k3}58 z(aIs}#g|%`>cs+ok`U_B%oK4}`L7gxzEQ<46r)O6 zn{cr-^Dy>s$7AbqcH!4SHCEg_Wsh=m^qZ|ai z4-&3Np?DMLoI>%Qx>-pVCo{JzM^xc@3KG_i6yLf#l`gf-|0ktJN}?xKF5MaRV8%Pj z8TG^9hss%%T}%=D>bHo__IVvze!s2}`&?OSjc7~>tL@5RBVVl*FW_Qs5eBP5y+aP% zEHMMQa`t1@dU0#UOm(D~6r7_j6o)+vV8gRPXomw))voQy-l^Ujr6u0|>b1pGDwnzpsMHaAI+2DUeixD3W>IKt1Qofn;yyrBY6Wv;k z_N9+3-RRz8IT&vx_*l>__C|3uo~35{-q5<`$aPT-Cg2q9xuhaX7imcqmRVY7W~HT8 z`#yWPrAz4_o(e}H+g$J)gEv@C!rkqbda=m5&T>@n>0+(+dD6p{Ga@DPSC$?Hos5*3Y6!^F8ap#71AinX#nLz!7e#TpOcfcUfkvlTA!1X zG1@I-KPs{upNKAPnm?Y?5bGIn*ge{M5?NklJt`JxQ>=vwpEZt3cZD*)vtlULe&s%vJzXbWb(0x|Bh0g`PsAawPA6C1z z-YaZ>kTL#A#uyXpEkRq@vLG{T<0VvVJEC524zkrKR@($yxkdL)wvDtLQK#GfB=abj z0fn_lX07drJRR88?I~gEqTi-1wk?FVN?E9casI9a?*$!)OWZDs?#$R|tFhcEcc{I% zYS}~&Wo)$_lcBsPLwQeja9T<}my(6b@132tF8ZC;3D?)>yk`4c+Jv=@dbjOsSXR@& zq-D7_*S158iQSeo`xMJ}-YolC<;ifleHrEGL%}~Cb&kQ~Ip@`O4Fj=*YPILR3+yh* z@1o(}pW3^WqU=rfTFY_c5a_kGL-sEE7uLuoWm51Jd%L>X_lA9;WmtNboh2XGlM{Ys zhgRytXe)*+raYQ))_zba$5quqWlbmNlD{f5)=H*sAHBo&VSCqd32)zA3|bsEQ4^3YemV| z5+5=SD)qQZidhSvj5d06otqGfPQ~I=ZG^Ln1_j1A2g1)G z+HU!UdJQDYU3TX%!7F8$3@bWX#&wpjX`TM2vr7~Pj)SHrz3n_B7N))L3@f)=K5<&8l2ly$3?qw6p?dOxHbY{g zn}ikg7U6Og;AP|~Z~rLXeVaV}$xkamGwBJ?T-xOsg_~`cYZP8YT&^1>e`A8LpdXU9 z;kNv|=YW(Sz)$TiS4a${;Yp-$tIL(46iaH6{0j96NS;uirhM;>8f#Zb`h=vv*P<*s zB|)x5b}8wNlCF^S2}yr1=_yGsx3c9tyiorpX`6@nZ3x)qIw2_~F+Wez7D=~BdO*?> zlFsw8O^bI_l$%LFJ{E-}yCk={!kW zB;6+II{GucMdOtHiuvs9Vfm+RXKV%b3HIsssQqdC_x3rCHbCI=49g z==|Dg8rKy^voUNTj8-nLS@PwpV-T;0eei1kVg_!j$m=mcU(84atu!)0|HB^wJ+J10 z-sdU;eKDgP^b2R)aIcV6y^lU;q8vH|A4d{y*6FvAr@Er^2O0SZ9p;ZRY8nOKZZ2|oStDW$NvbncXlu(Hfvplq{L;aR7=gI#r*{Rw3^4rU!6 z%-yATY@FYynyCw?b*xzUnJ|~%_O(83enUg;!j27#R*R1Qx0eaCp>DqUaou(1_$Bw6 zpDa0VcGthwakQaZbbNWo0j=YuWiKlo_uV^P>ri7;g*m_V3g4uqixyqoFlOfh1b`fEo=<4+3}@A3RMz8W`f&gf@;V}5w=e?IjubJzNN#6q*6ElgDoy! zY-ftma$I3)iR`O6PSMV0!~HvY@WrN>4?Ng6e=mO1LV!UX@%v)?tfVN$aAUZIM9>(X zOq$WMiX-oOFhBo@$4pQhl-G9$)MT{=-WoxZ`+$ntA3(amKva%+=3ox)JL( z*F!Mf{Igk>yBBrvwY+SDVas-3%QI;qn=o4TK_u~ZU+nviybWW8$TAl_)L(?nM;{vO zpU?FzmVveGv%zI+iFx{=3BEySsVKhIDkK#WM(arPvWEkiPs(Doe325;5}dEK#@9O0 zXq{r#Kl})W&HhM3*21iy-KratWiE)@h|TxdLyFPzJvejYBXh-k^P5LT*_YYy3!}$q zU1pBj*w-23e}5Ry+HBZZE!LUOY|IvI=4%_n!83{lVaD<}!`6p5$}LWU!*yUx$EM4~ zPIJPhvF2x+Dr?%&6AJK*5gTr|CPs2GTw}b(;6IKdHpb&?eMSq3U{HgJ&4LyfBd|uS z#vUKsmNn*WKTD6Ufz)Vu)@Du28AnLiBJxz)G)3#9<10zz>D1~ayHju#@mdE-fC;I(eeVO6TGrtv#rgq z^0V;KvC-*{kSbGcIjFFs*8LbXED|uT5Uloq!GE?~s~ba+;%jNcd{~43{v9C%B#0@G zzRuNwrv+TI*VYUy+L6~J&tsXY(f61MP2L?&>jNoxzu*O7HH%grNu^#KG^<^`- zIW2m>#fo0mp>C~V%&IN;SG<1mC_JJ^t#TQ)9`}S)9@+#_tX7M{%R-kCmcWYhDCrw= z@Z9P0wZ0E$Cz1Wf$R0}^OB1|ew4TApa&H?Q7^yz^KK8YkPjB{yTK^&Y>(X>zYqzx6 ztl{fhD7uS96U}!w2gOU~x0|cQHnU<&Y0_|BX=7~h08sn-Eg6&7Be#VR#e;!C%LXP} zAPzFK!wYkS0)zburlSkKjh0=GxReXc{^WMVik0TOTYfbhVHkJYLZ~*zVzHbEHB4Jp z%IQ#I4e@L-N_gCj*mP8BpPj9F1Dj>Oy|v1=20IPJYs~b=YEtjEMS5ICutU~ZKwDOJ z-2K>1iV?!Uwe9(d{6#ew3S)^ EALiY9KmY&$ diff --git a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj index 70224f4..36a0e15 100644 --- a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj +++ b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj @@ -88,6 +88,7 @@ + diff --git a/Source/ArachnaeSwarm/Patch_QualityUtility.cs b/Source/ArachnaeSwarm/Patch_QualityUtility.cs new file mode 100644 index 0000000..dfa742e --- /dev/null +++ b/Source/ArachnaeSwarm/Patch_QualityUtility.cs @@ -0,0 +1,62 @@ +using HarmonyLib; +using RimWorld; +using Verse; +using System.Reflection; // For MethodInfo + +namespace ArachnaeSwarm +{ + [StaticConstructorOnStartup] + public static class QualityUtilityPatch + { + static QualityUtilityPatch() + { + var harmony = new Harmony("com.yourname.qualityutilitypatch"); + harmony.Patch( + original: AccessTools.Method(typeof(QualityUtility), nameof(QualityUtility.GenerateQualityCreatedByPawn), new[] { typeof(Pawn), typeof(SkillDef), typeof(bool) }), + prefix: new HarmonyMethod(typeof(QualityUtilityPatch), nameof(GenerateQualityCreatedByPawn_Prefix)) + ); + } + + public static bool GenerateQualityCreatedByPawn_Prefix(Pawn pawn, SkillDef relevantSkill, bool consumeInspiration, ref QualityCategory __result) + { + // 检查当前 Pawn 是否是我们的自定义动物(通过检查其 ThingDef 是否拥有 CompProperties_WorkForNonMechs) + if (pawn != null && pawn.def.comps != null && ShouldEnableWorkSystem(pawn)) + { + // 如果是,强制使用 mechFixedSkillLevel + int relevantSkillLevel = pawn.RaceProps.mechFixedSkillLevel; + bool inspired = consumeInspiration && pawn.InspirationDef == InspirationDefOf.Inspired_Creativity; + + // 调用 QualityUtility.GenerateQualityCreatedByPawn 的 int 重载 + __result = QualityUtility.GenerateQualityCreatedByPawn(relevantSkillLevel, inspired); + + // 消耗灵感(如果适用) + if (inspired) + { + pawn.mindState.inspirationHandler.EndInspiration(InspirationDefOf.Inspired_Creativity); + } + + // 返回 false,跳过原版方法执行 + return false; + } + + // 返回 true,执行原版方法 + return true; + } + + private static bool ShouldEnableWorkSystem(Pawn pawn) + { + // 检查 ThingDef 中是否有 CompProperties_WorkForNonMechs 配置 + if (pawn.def.comps != null) + { + foreach (var compProperties in pawn.def.comps) + { + if (compProperties is CompProperties_WorkForNonMechs) + { + return true; + } + } + } + return false; + } + } +} \ No newline at end of file From e5feb47e8b070b02da41facbdcde168418cf9ddd Mon Sep 17 00:00:00 2001 From: "ProjectKoi-Kalo\\Kalo" Date: Wed, 3 Sep 2025 09:13:03 +0800 Subject: [PATCH 07/13] =?UTF-8?q?=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1.6/1.6/Assemblies/ArachnaeSwarm.dll | Bin 43520 -> 43008 bytes Source/ArachnaeSwarm/ArachnaeSwarm.csproj | 1 + .../ArachnaeSwarm/Patch_WorkGivers_Growing.cs | 96 ++++++++++++++++++ ...amework,Version=v4.8.AssemblyAttributes.cs | 4 + ...achnaeSwarm.csproj.AssemblyReference.cache | Bin 0 -> 50550 bytes ...achnaeSwarm.csproj.CoreCompileInputs.cache | 1 + .../ArachnaeSwarm.csproj.FileListAbsolute.txt | 2 + 7 files changed, 104 insertions(+) create mode 100644 Source/ArachnaeSwarm/Patch_WorkGivers_Growing.cs create mode 100644 Source/ArachnaeSwarm/obj/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs create mode 100644 Source/ArachnaeSwarm/obj/Debug/ArachnaeSwarm.csproj.AssemblyReference.cache create mode 100644 Source/ArachnaeSwarm/obj/Debug/ArachnaeSwarm.csproj.CoreCompileInputs.cache create mode 100644 Source/ArachnaeSwarm/obj/Debug/ArachnaeSwarm.csproj.FileListAbsolute.txt diff --git a/1.6/1.6/Assemblies/ArachnaeSwarm.dll b/1.6/1.6/Assemblies/ArachnaeSwarm.dll index 95b125e582bce96677027e1813f07acff062d828..75e20d8b9b2df098e48da3a3e99e96eefb53319a 100644 GIT binary patch delta 11426 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 + diff --git a/Source/ArachnaeSwarm/Patch_WorkGivers_Growing.cs b/Source/ArachnaeSwarm/Patch_WorkGivers_Growing.cs new file mode 100644 index 0000000..4a416ee --- /dev/null +++ b/Source/ArachnaeSwarm/Patch_WorkGivers_Growing.cs @@ -0,0 +1,96 @@ +using HarmonyLib; +using RimWorld; +using Verse; +using Verse.AI; +using System.Reflection; + +namespace ArachnaeSwarm +{ + [StaticConstructorOnStartup] + public static class Patch_WorkGivers_Growing + { + static Patch_WorkGivers_Growing() + { + var harmony = new Harmony("com.yourname.workgiversgrowingpatch"); + + // Patch WorkGiver_GrowerSow.JobOnCell + harmony.Patch( + original: AccessTools.Method(typeof(WorkGiver_GrowerSow), nameof(WorkGiver_GrowerSow.JobOnCell)), + prefix: new HarmonyMethod(typeof(Patch_WorkGivers_Growing), nameof(JobOnCell_GrowerSow_Prefix)) + ); + + // Patch JobDriver_Deconstruct.TickActionInterval + harmony.Patch( + original: AccessTools.Method(typeof(JobDriver_Deconstruct), "TickActionInterval"), + prefix: new HarmonyMethod(typeof(Patch_WorkGivers_Growing), nameof(TickActionInterval_Deconstruct_Prefix)) + ); + } + + public static bool JobOnCell_GrowerSow_Prefix(Pawn pawn, IntVec3 c, ref Job __result, WorkGiver_GrowerSow __instance) + { + // 检查是否是我们的自定义动物,并且它不是真正的机械体 (因为真正的机械体原版会处理) + if (ShouldEnableWorkSystem(pawn) && !pawn.RaceProps.IsMechanoid) + { + // 使用反射获取 WorkGiver_GrowerSow 实例的 wantedPlantDef 字段 + ThingDef wantedPlantDef = (ThingDef)AccessTools.Field(typeof(WorkGiver_Grower), "wantedPlantDef").GetValue(__instance); + + if (wantedPlantDef == null) + { + __result = null; + return false; // 跳过原版方法 + } + + // 强制使用 mechFixedSkillLevel 作为相关技能等级 + int relevantSkillLevel = pawn.RaceProps.mechFixedSkillLevel; + + // 然后进行原始的 sowMinSkill 检查 + if (wantedPlantDef.plant.sowMinSkill > relevantSkillLevel) + { + __result = null; // 技能不足,不生成 Job + return false; // 跳过原版方法 + } + + // 如果技能足够,让原版方法继续执行,处理其他复杂的检查 + // 注意:这里我们只处理了技能检查部分,其他逻辑仍然依赖原版方法。 + // 如果原版方法在其他地方再次访问 pawn.skills,仍然可能出错。 + // 但这是最直接的修复方法,避免了完全复制整个原始方法。 + } + + return true; // 执行原版方法 + } + + public static bool TickActionInterval_Deconstruct_Prefix(JobDriver_Deconstruct __instance, Pawn ___pawn, int delta) + { + // 检查是否是我们的自定义动物,并且它不是真正的机械体 + if (ShouldEnableWorkSystem(___pawn) && !___pawn.RaceProps.IsMechanoid) + { + // 模拟技能学习,避免访问 pawn.skills 导致 NullReferenceException + // 这里我们不实际增加经验值,只是模拟原版方法的行为 + // 避免了对 pawn.skills 的访问 + if (__instance.Building.def.CostListAdjusted(__instance.Building.Stuff).Count > 0) + { + // 可以选择在这里添加一些日志,以便调试 + // Log.Message($"Animal {___pawn.LabelShort} is deconstructing, simulating skill gain."); + } + return false; // 跳过原版方法 + } + return true; // 执行原版方法 + } + + private static bool ShouldEnableWorkSystem(Pawn pawn) + { + // 检查 ThingDef 中是否有 CompProperties_WorkForNonMechs 配置 + if (pawn.def.comps != null) + { + foreach (var compProperties in pawn.def.comps) + { + if (compProperties is CompProperties_WorkForNonMechs) + { + return true; + } + } + } + return false; + } + } +} \ No newline at end of file diff --git a/Source/ArachnaeSwarm/obj/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs b/Source/ArachnaeSwarm/obj/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs new file mode 100644 index 0000000..15efebf --- /dev/null +++ b/Source/ArachnaeSwarm/obj/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] diff --git a/Source/ArachnaeSwarm/obj/Debug/ArachnaeSwarm.csproj.AssemblyReference.cache b/Source/ArachnaeSwarm/obj/Debug/ArachnaeSwarm.csproj.AssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..33b62db7d9822e26b0067feb5749542eb9e34e35 GIT binary patch literal 50550 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 Date: Wed, 3 Sep 2025 11:57:11 +0800 Subject: [PATCH 08/13] =?UTF-8?q?=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1.6/1.6/Assemblies/ArachnaeSwarm.dll | Bin 0 -> 45056 bytes .../Defs/ThingDef_Races/ARA_RaceBaseSwarm.xml | 30 +++--- 1.6/1.6/Defs/ThinkTreeDefs/ARA_ThinkTrees.xml | 45 ++------ .../Defs/TrainableDefs/ARA_PlantCutting.xml | 19 ---- 1.6/1.6/Defs/TrainableDefs/ARA_Sowing.xml | 6 +- .../ArachnaeSwarm/AnimalWorkSystemPatcher.cs | 75 ------------- Source/ArachnaeSwarm/ArachnaeSwarm.csproj | 19 ++-- Source/ArachnaeSwarm/CompAdvancedTraining.cs | 77 ++++++++++++++ .../ArachnaeSwarm/CompAnimalWorkSettings.cs | 97 ----------------- Source/ArachnaeSwarm/CompInstantTrain.cs | 46 -------- Source/ArachnaeSwarm/CompNoTrainingDecay.cs | 15 --- Source/ArachnaeSwarm/CompWorkForNonMechs.cs | 37 ------- Source/ArachnaeSwarm/JobGiver_Grower.cs | 99 ++++++++++++++++++ Source/ArachnaeSwarm/JobGiver_PlantCutting.cs | 56 ---------- Source/ArachnaeSwarm/JobGiver_PlantHarvest.cs | 63 ----------- Source/ArachnaeSwarm/JobGiver_PlantSow.cs | 41 -------- Source/ArachnaeSwarm/Patch_QualityUtility.cs | 62 ----------- .../Patch_TrainingTracker_TickRare.cs | 31 ------ .../ArachnaeSwarm/Patch_WorkGivers_Growing.cs | 96 ----------------- ...de_ConditionalAnimalShouldDoGrowingWork.cs | 43 ++++++++ ...inkNode_ConditionalAnimalShouldPlantCut.cs | 21 ---- .../ThinkNode_ConditionalAnimalShouldSow.cs | 37 ------- .../ArachnaeSwarm/TrainingSystem_Patcher.cs | 48 +++++++++ ...amework,Version=v4.8.AssemblyAttributes.cs | 4 - ...achnaeSwarm.csproj.AssemblyReference.cache | Bin 50550 -> 0 bytes ...achnaeSwarm.csproj.CoreCompileInputs.cache | 1 - .../ArachnaeSwarm.csproj.FileListAbsolute.txt | 2 - 27 files changed, 298 insertions(+), 772 deletions(-) create mode 100644 1.6/1.6/Assemblies/ArachnaeSwarm.dll delete mode 100644 1.6/1.6/Defs/TrainableDefs/ARA_PlantCutting.xml delete mode 100644 Source/ArachnaeSwarm/AnimalWorkSystemPatcher.cs create mode 100644 Source/ArachnaeSwarm/CompAdvancedTraining.cs delete mode 100644 Source/ArachnaeSwarm/CompAnimalWorkSettings.cs delete mode 100644 Source/ArachnaeSwarm/CompInstantTrain.cs delete mode 100644 Source/ArachnaeSwarm/CompNoTrainingDecay.cs delete mode 100644 Source/ArachnaeSwarm/CompWorkForNonMechs.cs create mode 100644 Source/ArachnaeSwarm/JobGiver_Grower.cs delete mode 100644 Source/ArachnaeSwarm/JobGiver_PlantCutting.cs delete mode 100644 Source/ArachnaeSwarm/JobGiver_PlantHarvest.cs delete mode 100644 Source/ArachnaeSwarm/JobGiver_PlantSow.cs delete mode 100644 Source/ArachnaeSwarm/Patch_QualityUtility.cs delete mode 100644 Source/ArachnaeSwarm/Patch_TrainingTracker_TickRare.cs delete mode 100644 Source/ArachnaeSwarm/Patch_WorkGivers_Growing.cs create mode 100644 Source/ArachnaeSwarm/ThinkNode_ConditionalAnimalShouldDoGrowingWork.cs delete mode 100644 Source/ArachnaeSwarm/ThinkNode_ConditionalAnimalShouldPlantCut.cs delete mode 100644 Source/ArachnaeSwarm/ThinkNode_ConditionalAnimalShouldSow.cs create mode 100644 Source/ArachnaeSwarm/TrainingSystem_Patcher.cs delete mode 100644 Source/ArachnaeSwarm/obj/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs delete mode 100644 Source/ArachnaeSwarm/obj/Debug/ArachnaeSwarm.csproj.AssemblyReference.cache delete mode 100644 Source/ArachnaeSwarm/obj/Debug/ArachnaeSwarm.csproj.CoreCompileInputs.cache delete mode 100644 Source/ArachnaeSwarm/obj/Debug/ArachnaeSwarm.csproj.FileListAbsolute.txt diff --git a/1.6/1.6/Assemblies/ArachnaeSwarm.dll b/1.6/1.6/Assemblies/ArachnaeSwarm.dll new file mode 100644 index 0000000000000000000000000000000000000000..944902615f6b8ee1562e6b11c63d64bbf1902e46 GIT binary patch literal 45056 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 literal 0 HcmV?d00001 diff --git a/1.6/1.6/Defs/ThingDef_Races/ARA_RaceBaseSwarm.xml b/1.6/1.6/Defs/ThingDef_Races/ARA_RaceBaseSwarm.xml index f8e3c6a..fbb66f2 100644 --- a/1.6/1.6/Defs/ThingDef_Races/ARA_RaceBaseSwarm.xml +++ b/1.6/1.6/Defs/ThingDef_Races/ARA_RaceBaseSwarm.xml @@ -79,7 +79,6 @@
  • Dig
  • ARA_Sowing
  • -
  • ARA_PlantCutting
  • @@ -103,25 +102,20 @@ DeathActionWorker_Vanish - -
  • Hauling
  • -
  • Mining
  • -
  • Construction
  • -
  • Crafting
  • -
  • Smithing
  • -
  • Tailoring
  • -
  • Cooking
  • -
  • Research
  • -
  • PlantCutting
  • -
  • Growing
  • -
  • Cleaning
  • -
  • Doctor
  • -
  • Firefighter
  • - - 10 -
  • +
  • + +
  • + Plants + 10 +
  • + + +
  • ARA_Sowing
  • +
    + true +
  • AnimalInsect
  • diff --git a/1.6/1.6/Defs/ThinkTreeDefs/ARA_ThinkTrees.xml b/1.6/1.6/Defs/ThinkTreeDefs/ARA_ThinkTrees.xml index fd0e1ae..a5101a2 100644 --- a/1.6/1.6/Defs/ThinkTreeDefs/ARA_ThinkTrees.xml +++ b/1.6/1.6/Defs/ThinkTreeDefs/ARA_ThinkTrees.xml @@ -324,44 +324,19 @@
    - -
  • - ARA_Sowing - -
  • + +
  • + ARA_Sowing - -
  • + +
  • + + +
  • + +
  • - - - - -
  • - ARA_Sowing - -
  • - - -
  • - -
  • - - - - -
  • - ARA_PlantCutting - -
  • - - -
  • - -
  • - - diff --git a/1.6/1.6/Defs/TrainableDefs/ARA_PlantCutting.xml b/1.6/1.6/Defs/TrainableDefs/ARA_PlantCutting.xml deleted file mode 100644 index 9dcdf64..0000000 --- a/1.6/1.6/Defs/TrainableDefs/ARA_PlantCutting.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - ARA_PlantCutting - - 允许该生物执行植物割除任务。 - - true - - 3 - Advanced - - 1 - - 99 - - - \ No newline at end of file diff --git a/1.6/1.6/Defs/TrainableDefs/ARA_Sowing.xml b/1.6/1.6/Defs/TrainableDefs/ARA_Sowing.xml index 9c3fcde..ca09fab 100644 --- a/1.6/1.6/Defs/TrainableDefs/ARA_Sowing.xml +++ b/1.6/1.6/Defs/TrainableDefs/ARA_Sowing.xml @@ -3,8 +3,8 @@ ARA_Sowing - - 允许该生物执行播种任务。 + + 允许该生物执行种植任务。 true @@ -14,7 +14,7 @@ Advanced - 1 + 3 100 diff --git a/Source/ArachnaeSwarm/AnimalWorkSystemPatcher.cs b/Source/ArachnaeSwarm/AnimalWorkSystemPatcher.cs deleted file mode 100644 index 6efbef3..0000000 --- a/Source/ArachnaeSwarm/AnimalWorkSystemPatcher.cs +++ /dev/null @@ -1,75 +0,0 @@ -using System.Collections.Generic; -using System.Reflection; -using HarmonyLib; -using RimWorld; -using Verse; - -namespace ArachnaeSwarm -{ - [StaticConstructorOnStartup] - public static class AnimalWorkSystemPatcher - { - static AnimalWorkSystemPatcher() - { - var harmony = new Harmony("com.yourname.animalworksystem"); - harmony.PatchAll(); - } - } - - [HarmonyPatch(typeof(Pawn_WorkSettings), "EnableAndInitialize")] - public static class Patch_Pawn_WorkSettings_EnableAndInitialize - { - public static void Postfix(Pawn_WorkSettings __instance, Pawn ___pawn) - { - // 检查是否是我们想要启用工作系统的动物,并且它不是机械体 - // 因为原版的 EnableAndInitialize 已经处理了机械体的工作设置 - if (___pawn.Faction != null && ___pawn.Faction.IsPlayer && - !___pawn.RaceProps.IsMechanoid && - ShouldEnableWorkSystem(___pawn)) - { - // 获取 CompProperties_WorkForNonMechs - CompProperties_WorkForNonMechs compProps = null; - if (___pawn.def.comps != null) - { - foreach (var comp in ___pawn.def.comps) - { - if (comp is CompProperties_WorkForNonMechs props) - { - compProps = props; - break; - } - } - } - - if (compProps != null && compProps.workTypes != null) - { - // 设置 CompProperties_WorkForNonMechs 中定义的工作类型优先级 - foreach (var workType in compProps.workTypes) - { - if (!__instance.WorkIsActive(workType) && !___pawn.WorkTypeIsDisabled(workType)) - { - __instance.SetPriority(workType, 3); // 默认优先级 - } - } - } - } - } - - private static bool ShouldEnableWorkSystem(Pawn pawn) - { - // 检查 ThingDef 中是否有 CompProperties_WorkForNonMechs 配置 - if (pawn.def.comps != null) - { - foreach (var compProperties in pawn.def.comps) - { - if (compProperties is CompProperties_WorkForNonMechs) - { - return true; - } - } - } - - return false; - } - } -} \ No newline at end of file diff --git a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj index 40d3856..fa0e51d 100644 --- a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj +++ b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj @@ -86,26 +86,19 @@ - - - - + - - - - - - - - - + + + + + diff --git a/Source/ArachnaeSwarm/CompAdvancedTraining.cs b/Source/ArachnaeSwarm/CompAdvancedTraining.cs new file mode 100644 index 0000000..9a0b8c9 --- /dev/null +++ b/Source/ArachnaeSwarm/CompAdvancedTraining.cs @@ -0,0 +1,77 @@ +using System.Collections.Generic; +using Verse; +using RimWorld; + +namespace ArachnaeSwarm +{ + public class CompProperties_AdvancedTraining : CompProperties + { + // 1. 用于设置固定技能等级 + public List skillLevels = new List(); + + // 2. 用于指定生成时立即完成的训练 + public List instantTrainables = new List(); + + // 3. 全局开关:是否阻止所有技能衰减 + public bool disableAllSkillDecay = false; + + public CompProperties_AdvancedTraining() + { + this.compClass = typeof(CompAdvancedTraining); + } + } + + public class SkillLevelEntry + { + public SkillDef skill; + public int level = 0; + // 这里的 disableDecay 字段现在是冗余的,因为我们有全局的 disableAllSkillDecay + // 但为了兼容性或未来可能的需求,可以保留。 + // 在当前方案中,它的值将被忽略。 + public bool disableDecay = true; + } + + public class CompAdvancedTraining : ThingComp + { + public CompProperties_AdvancedTraining Props => (CompProperties_AdvancedTraining)this.props; + + public override void PostSpawnSetup(bool respawningAfterLoad) + { + base.PostSpawnSetup(respawningAfterLoad); + + Pawn pawn = this.parent as Pawn; + if (pawn == null) return; + + // --- 1. 设置固定技能等级 --- + if (pawn.skills != null && !Props.skillLevels.NullOrEmpty()) + { + foreach (var entry in Props.skillLevels) + { + if (entry.skill != null) + { + var skillRecord = pawn.skills.GetSkill(entry.skill); + if (skillRecord != null) + { + skillRecord.Level = entry.level; + // 注意: 激情 (passion) 影响学习速度,不直接阻止衰减。 + // 实际的衰减阻止逻辑在 TrainingSystem_Patcher.cs 中处理。 + // 默认情况下,我们不改变 passion,除非有特殊需求。 + } + } + } + } + + // --- 2. 执行瞬间训练 (只在初次生成时) --- + if (!respawningAfterLoad && pawn.training != null && !Props.instantTrainables.NullOrEmpty()) + { + foreach (var trainable in Props.instantTrainables) + { + if (trainable != null && !pawn.training.HasLearned(trainable)) + { + pawn.training.Train(trainable, null, complete: true); + } + } + } + } + } +} \ No newline at end of file diff --git a/Source/ArachnaeSwarm/CompAnimalWorkSettings.cs b/Source/ArachnaeSwarm/CompAnimalWorkSettings.cs deleted file mode 100644 index 6c462cc..0000000 --- a/Source/ArachnaeSwarm/CompAnimalWorkSettings.cs +++ /dev/null @@ -1,97 +0,0 @@ -using System.Collections.Generic; -using Verse; -using RimWorld; - -namespace ArachnaeSwarm -{ - public class CompProperties_AnimalWorkSettings : CompProperties - { - // 使用列表存储键值对,因为RimWorld的XML解析器对字典有特殊要求 - public List workTypeMap = new List(); - // 定义动物的技能等级 - public List skillLevels = new List(); - - public CompProperties_AnimalWorkSettings() - { - this.compClass = typeof(CompAnimalWorkSettings); - } - } - - // 定义键值对的结构 - public class WorkTypeMapEntry - { - public TrainableDef trainable; - public WorkTypeDef workType; - } - - // 定义技能和等级的结构 - public class SkillLevelEntry - { - public SkillDef skill; - public int level = 0; // 默认等级为0 - // 可选:是否阻止技能衰减 - public bool disableDecay = true; - } - - public class CompAnimalWorkSettings : ThingComp - { - public CompProperties_AnimalWorkSettings Props => (CompProperties_AnimalWorkSettings)this.props; - - public override void PostSpawnSetup(bool respawningAfterLoad) - { - base.PostSpawnSetup(respawningAfterLoad); - - Pawn pawn = this.parent as Pawn; - if (pawn == null) return; - - // 1. 确保 workSettings 存在 - if (pawn.workSettings == null) - { - pawn.workSettings = new Pawn_WorkSettings(pawn); - pawn.workSettings.EnableAndInitializeIfNotAlreadyInitialized(); - } - - // 2. 设置技能等级 (如果定义了) - if (pawn.skills != null && Props.skillLevels != null) - { - foreach (var entry in Props.skillLevels) - { - if (entry.skill != null) - { - var skillRecord = pawn.skills.GetSkill(entry.skill); - if (skillRecord != null) - { - // 设置技能等级 - skillRecord.Level = entry.level; - - // 可选:阻止技能衰减 - // 在新版本中,将激情设置为 None 可以阻止自然增长和衰减 - if (entry.disableDecay) - { - skillRecord.passion = Passion.None; - // 注意:仅设置 passion=None 可能不足以完全阻止衰减 - // 如果仍有问题,可能需要在 ThinkNode 或其他地方定期重置技能等级 - } - } - } - } - } - - // 3. 设置工作优先级 (如果定义了映射关系) - // 这里我们不检查 pawn.training.HasLearned,因为这个组件只负责提供"能力" - // 具体是否执行工作由 ThinkNode_Conditional 控制 - if (pawn.workSettings != null && Props.workTypeMap != null) - { - foreach (var entry in Props.workTypeMap) - { - if (entry.trainable != null && entry.workType != null) - { - // 为相关工作类型设置默认优先级 - // 实际是否执行由 ThinkNode_Conditional 的 GetWanted 控制 - pawn.workSettings.SetPriority(entry.workType, 3); - } - } - } - } - } -} diff --git a/Source/ArachnaeSwarm/CompInstantTrain.cs b/Source/ArachnaeSwarm/CompInstantTrain.cs deleted file mode 100644 index cfb504d..0000000 --- a/Source/ArachnaeSwarm/CompInstantTrain.cs +++ /dev/null @@ -1,46 +0,0 @@ -using System.Collections.Generic; -using Verse; -using RimWorld; - -namespace ArachnaeSwarm -{ - public class CompInstantTrain : ThingComp - { - public CompProperties_InstantTrain Props => (CompProperties_InstantTrain)this.props; - - public override void PostSpawnSetup(bool respawningAfterLoad) - { - base.PostSpawnSetup(respawningAfterLoad); - - // 只在初次生成时执行,加载存档时不需要重新训练 - if (respawningAfterLoad) return; - - Pawn pawn = this.parent as Pawn; - if (pawn?.training == null) return; - - // 瞬间训练所有在 Props 中指定的技能 - foreach (var trainable in Props.trainables) - { - if (trainable != null && !pawn.training.HasLearned(trainable)) - { - // 注意:直接调用 Train 方法,它会内部处理 SetWanted 的逻辑 - // 原版的 SetWanted 方法可能已被移除或变为内部方法 - pawn.training.Train(trainable, null, true); // true表示瞬间完成 - } - } - - // CompInstantTrain 的职责到此结束 - // 工作优先级设置由 CompAnimalWorkSettings 负责 - } - } - - public class CompProperties_InstantTrain : CompProperties - { - public List trainables = new List(); - - public CompProperties_InstantTrain() - { - this.compClass = typeof(CompInstantTrain); - } - } -} diff --git a/Source/ArachnaeSwarm/CompNoTrainingDecay.cs b/Source/ArachnaeSwarm/CompNoTrainingDecay.cs deleted file mode 100644 index f612d2a..0000000 --- a/Source/ArachnaeSwarm/CompNoTrainingDecay.cs +++ /dev/null @@ -1,15 +0,0 @@ -using Verse; - -namespace ArachnaeSwarm -{ - // 这是一个“标记”组件。它的唯一目的就是在 XML 中被添加到 ThingDef, - // 以便我们的 Harmony 补丁可以识别哪些 Pawn 的训练不应该衰减。 - // 它本身不需要任何逻辑。 - public class CompProperties_NoTrainingDecay : CompProperties - { - public CompProperties_NoTrainingDecay() - { - this.compClass = typeof(ThingComp); // 我们可以使用一个通用的、空的 ThingComp - } - } -} \ No newline at end of file diff --git a/Source/ArachnaeSwarm/CompWorkForNonMechs.cs b/Source/ArachnaeSwarm/CompWorkForNonMechs.cs deleted file mode 100644 index 3f5b471..0000000 --- a/Source/ArachnaeSwarm/CompWorkForNonMechs.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System.Collections.Generic; -using RimWorld; -using Verse; - -namespace ArachnaeSwarm -{ - public class CompProperties_WorkForNonMechs : CompProperties - { - public List workTypes; - - public CompProperties_WorkForNonMechs() - { - compClass = typeof(CompWorkForNonMechs); - } - } - - public class CompWorkForNonMechs : ThingComp - { - public CompProperties_WorkForNonMechs Props => (CompProperties_WorkForNonMechs)props; - - public override void PostSpawnSetup(bool respawningAfterLoad) - { - base.PostSpawnSetup(respawningAfterLoad); - - var pawn = parent as Pawn; - if (pawn == null || pawn.Faction == null || !pawn.Faction.IsPlayer) return; - - // 确保 workSettings 实例存在 - if (pawn.workSettings == null) - { - pawn.workSettings = new Pawn_WorkSettings(pawn); - } - - pawn.workSettings.EnableAndInitialize(); - } - } -} \ No newline at end of file diff --git a/Source/ArachnaeSwarm/JobGiver_Grower.cs b/Source/ArachnaeSwarm/JobGiver_Grower.cs new file mode 100644 index 0000000..2c10f81 --- /dev/null +++ b/Source/ArachnaeSwarm/JobGiver_Grower.cs @@ -0,0 +1,99 @@ +using System.Collections.Generic; +using Verse; +using Verse.AI; +using RimWorld; + +namespace ArachnaeSwarm +{ + // 确保 WorkGiverDefOf 被正确初始化 + [DefOf] + public static class WorkGiverDefOf + { + public static WorkGiverDef Harvest; + public static WorkGiverDef GrowerSow; + + static WorkGiverDefOf() + { + DefOfHelper.EnsureInitializedInCtor(typeof(WorkGiverDefOf)); + } + } + + public class JobGiver_Grower : ThinkNode_JobGiver + { + private static WorkGiver_GrowerHarvest _workGiverHarvest; + private static WorkGiver_GrowerSow _workGiverSow; + + static JobGiver_Grower() + { + // 确保在访问 WorkGiverDefOf 之前,它已经被初始化 + // 尽管 [DefOf] 会自动处理,但显式调用可以避免某些加载时序问题 + DefOfHelper.EnsureInitializedInCtor(typeof(WorkGiverDefOf)); + _workGiverHarvest = WorkGiverDefOf.Harvest.Worker as WorkGiver_GrowerHarvest; + _workGiverSow = WorkGiverDefOf.GrowerSow.Worker as WorkGiver_GrowerSow; + } + + protected override Job TryGiveJob(Pawn pawn) + { + if (_workGiverHarvest == null || _workGiverSow == null) + { + Log.ErrorOnce("JobGiver_Grower could not find vanilla Grower WorkGivers.", 123457); + return null; + } + + // 1. 优先收获 + Thing bestHarvestable = FindClosestThing(pawn, _workGiverHarvest); + if (bestHarvestable != null) + { + return _workGiverHarvest.JobOnThing(pawn, bestHarvestable); + } + + // 2. 其次播种 + IntVec3 bestSowCell = FindClosestSowableCell(pawn, _workGiverSow); + if (bestSowCell.IsValid) + { + return _workGiverSow.JobOnCell(pawn, bestSowCell); + } + + return null; + } + + private Thing FindClosestThing(Pawn pawn, WorkGiver_Scanner scanner) + { + return GenClosest.ClosestThingReachable( + pawn.Position, + pawn.Map, + scanner.PotentialWorkThingRequest, + PathEndMode.Touch, + TraverseParms.For(pawn), + 9999f, + t => scanner.HasJobOnThing(pawn, t) + ); + } + + private IntVec3 FindClosestSowableCell(Pawn pawn, WorkGiver_Scanner scanner) + { + IntVec3 bestCell = IntVec3.Invalid; + float bestDistSq = float.MaxValue; + + foreach (Zone zone in pawn.Map.zoneManager.AllZones) + { + if (zone is Zone_Growing growingZone) + { + foreach (IntVec3 cell in growingZone.Cells) + { + float distSq = pawn.Position.DistanceToSquared(cell); + if (distSq < bestDistSq && pawn.CanReach(cell, PathEndMode.ClosestTouch, Danger.Deadly)) + { + if (scanner.HasJobOnCell(pawn, cell)) + { + bestDistSq = distSq; + bestCell = cell; + } + } + } + } + } + return bestCell; + } + } +} \ No newline at end of file diff --git a/Source/ArachnaeSwarm/JobGiver_PlantCutting.cs b/Source/ArachnaeSwarm/JobGiver_PlantCutting.cs deleted file mode 100644 index 4ea44c1..0000000 --- a/Source/ArachnaeSwarm/JobGiver_PlantCutting.cs +++ /dev/null @@ -1,56 +0,0 @@ -using System.Collections.Generic; -using Verse; -using Verse.AI; -using RimWorld; - -namespace ArachnaeSwarm -{ - public class JobGiver_PlantCutting : ThinkNode_JobGiver - { - private WorkGiverDef cutWorkGiverDef = null; - private bool triedToLoad = false; - - protected override Job TryGiveJob(Pawn pawn) - { - if (!triedToLoad || cutWorkGiverDef == null) - { - triedToLoad = true; - cutWorkGiverDef = DefDatabase.GetNamed("PlantsCut", false); - if (cutWorkGiverDef == null) - { - Log.ErrorOnce("[ArachnaeSwarm] Could not find WorkGiverDef named 'PlantsCut'. Plant Cutting will not work.", 847595); - return null; - } - } - - if (cutWorkGiverDef?.Worker is WorkGiver_Scanner workGiver) - { - // ... (你的逻辑,调用 workGiver 的方法) ... - IEnumerable potentialPlants = workGiver.PotentialWorkThingsGlobal(pawn); - // ... (后续逻辑,确保都用 workGiver 实例) ... - if (!workGiver.ShouldSkip(pawn) && workGiver.MissingRequiredCapacity(pawn) == null) - { - return workGiver.NonScanJob(pawn); - } - // ... - } - else - { - Log.Warning($"[ArachnaeSwarm] WorkGiverDef 'PlantsCut' Worker is not a WorkGiver_Scanner for pawn {pawn?.LabelShort ?? "NULL"}."); - } - - return null; - } - - // ... (Validator 方法也需要修改) ... - private static bool Validator(Pawn pawn, WorkGiver_Scanner workGiver, Thing t) - { - if (t.IsForbidden(pawn)) - { - return false; - } - // if (workGiver.ShouldSkip(pawn)) { return false; } // 这个检查可以保留或去掉 - return workGiver.JobOnThing(pawn, t) != null; // 使用传入的实例 - } - } -} diff --git a/Source/ArachnaeSwarm/JobGiver_PlantHarvest.cs b/Source/ArachnaeSwarm/JobGiver_PlantHarvest.cs deleted file mode 100644 index 13563fe..0000000 --- a/Source/ArachnaeSwarm/JobGiver_PlantHarvest.cs +++ /dev/null @@ -1,63 +0,0 @@ -using System.Collections.Generic; -using Verse; -using Verse.AI; -using RimWorld; - -namespace ArachnaeSwarm -{ - public class JobGiver_PlantHarvest : ThinkNode_JobGiver - { - // 声明变量,但不立即初始化 - private WorkGiverDef harvestWorkGiverDef = null; - // 用一个标志位确保只尝试加载一次 - private bool triedToLoad = false; - - protected override Job TryGiveJob(Pawn pawn) - { - // 如果还没尝试加载,或者之前加载失败了 - if (!triedToLoad || harvestWorkGiverDef == null) - { - triedToLoad = true; // 标记为已尝试 - // 在需要时才查找 Def - harvestWorkGiverDef = DefDatabase.GetNamed("GrowerHarvest", false); - if (harvestWorkGiverDef == null) - { - // 这个 Log 可以保留,方便调试 - Log.ErrorOnce("[ArachnaeSwarm] Could not find WorkGiverDef named 'GrowerHarvest'. Harvesting will not work.", 847593); - return null; // 找不到就直接返回 - } - } - - // 现在可以安全地使用 harvestWorkGiverDef 了 - if (harvestWorkGiverDef?.Worker is WorkGiver_Scanner workGiver) - { - // ... (你原来的逻辑) ... - IEnumerable potentialPlants = workGiver.PotentialWorkThingsGlobal(pawn); - // ... (后续逻辑) ... - // 确保调用的是 workGiver (已解析的实例) - if (!workGiver.ShouldSkip(pawn) && workGiver.MissingRequiredCapacity(pawn) == null) - { - return workGiver.NonScanJob(pawn); - } - // ... 其他逻辑 ... - } - else - { - Log.Warning($"[ArachnaeSwarm] WorkGiverDef 'GrowerHarvest' Worker is not a WorkGiver_Scanner for pawn {pawn?.LabelShort ?? "NULL"}."); - } - - return null; - } - - // ... (Validator 方法也需要确保使用传入的 workGiver 实例) ... - private static bool HarvestValidator(Pawn pawn, WorkGiver_Scanner workGiver, Thing t) - { - if (t.IsForbidden(pawn)) - { - return false; - } - // 使用传入的已解析实例 - return workGiver.JobOnThing(pawn, t) != null; - } - } -} diff --git a/Source/ArachnaeSwarm/JobGiver_PlantSow.cs b/Source/ArachnaeSwarm/JobGiver_PlantSow.cs deleted file mode 100644 index 5994d2b..0000000 --- a/Source/ArachnaeSwarm/JobGiver_PlantSow.cs +++ /dev/null @@ -1,41 +0,0 @@ -using Verse; -using Verse.AI; -using RimWorld; - -namespace ArachnaeSwarm -{ - public class JobGiver_PlantSow : ThinkNode_JobGiver - { - private WorkGiverDef sowWorkGiverDef = null; - private bool triedToLoad = false; - - protected override Job TryGiveJob(Pawn pawn) - { - if (!triedToLoad || sowWorkGiverDef == null) - { - triedToLoad = true; - sowWorkGiverDef = DefDatabase.GetNamed("GrowerSow", false); - if (sowWorkGiverDef == null) - { - Log.ErrorOnce("[ArachnaeSwarm] Could not find WorkGiverDef named 'GrowerSow'. Sowing will not work.", 847594); - return null; - } - } - - if (sowWorkGiverDef?.Worker is WorkGiver_Scanner sowerScanner) // 直接用 Scanner 接口 - { - // ... (你的逻辑,调用 sowerScanner 的方法) ... - if (!sowerScanner.ShouldSkip(pawn) && sowerScanner.MissingRequiredCapacity(pawn) == null) - { - return sowerScanner.NonScanJob(pawn); // 使用 Scanner 接口 - } - } - else - { - Log.Warning($"[ArachnaeSwarm] WorkGiverDef 'GrowerSow' Worker is not a WorkGiver_Scanner for pawn {pawn?.LabelShort ?? "NULL"}."); - } - - return null; - } - } -} diff --git a/Source/ArachnaeSwarm/Patch_QualityUtility.cs b/Source/ArachnaeSwarm/Patch_QualityUtility.cs deleted file mode 100644 index dfa742e..0000000 --- a/Source/ArachnaeSwarm/Patch_QualityUtility.cs +++ /dev/null @@ -1,62 +0,0 @@ -using HarmonyLib; -using RimWorld; -using Verse; -using System.Reflection; // For MethodInfo - -namespace ArachnaeSwarm -{ - [StaticConstructorOnStartup] - public static class QualityUtilityPatch - { - static QualityUtilityPatch() - { - var harmony = new Harmony("com.yourname.qualityutilitypatch"); - harmony.Patch( - original: AccessTools.Method(typeof(QualityUtility), nameof(QualityUtility.GenerateQualityCreatedByPawn), new[] { typeof(Pawn), typeof(SkillDef), typeof(bool) }), - prefix: new HarmonyMethod(typeof(QualityUtilityPatch), nameof(GenerateQualityCreatedByPawn_Prefix)) - ); - } - - public static bool GenerateQualityCreatedByPawn_Prefix(Pawn pawn, SkillDef relevantSkill, bool consumeInspiration, ref QualityCategory __result) - { - // 检查当前 Pawn 是否是我们的自定义动物(通过检查其 ThingDef 是否拥有 CompProperties_WorkForNonMechs) - if (pawn != null && pawn.def.comps != null && ShouldEnableWorkSystem(pawn)) - { - // 如果是,强制使用 mechFixedSkillLevel - int relevantSkillLevel = pawn.RaceProps.mechFixedSkillLevel; - bool inspired = consumeInspiration && pawn.InspirationDef == InspirationDefOf.Inspired_Creativity; - - // 调用 QualityUtility.GenerateQualityCreatedByPawn 的 int 重载 - __result = QualityUtility.GenerateQualityCreatedByPawn(relevantSkillLevel, inspired); - - // 消耗灵感(如果适用) - if (inspired) - { - pawn.mindState.inspirationHandler.EndInspiration(InspirationDefOf.Inspired_Creativity); - } - - // 返回 false,跳过原版方法执行 - return false; - } - - // 返回 true,执行原版方法 - return true; - } - - private static bool ShouldEnableWorkSystem(Pawn pawn) - { - // 检查 ThingDef 中是否有 CompProperties_WorkForNonMechs 配置 - if (pawn.def.comps != null) - { - foreach (var compProperties in pawn.def.comps) - { - if (compProperties is CompProperties_WorkForNonMechs) - { - return true; - } - } - } - return false; - } - } -} \ No newline at end of file diff --git a/Source/ArachnaeSwarm/Patch_TrainingTracker_TickRare.cs b/Source/ArachnaeSwarm/Patch_TrainingTracker_TickRare.cs deleted file mode 100644 index e4fa9ac..0000000 --- a/Source/ArachnaeSwarm/Patch_TrainingTracker_TickRare.cs +++ /dev/null @@ -1,31 +0,0 @@ -using Verse; -using HarmonyLib; -using RimWorld; - -namespace ArachnaeSwarm -{ - [HarmonyPatch(typeof(Pawn_TrainingTracker), "TrainingTrackerTickRare")] - public static class Patch_TrainingTracker_TickRare - { - // [HarmonyPrefix] 表示这是一个“前缀”补丁,在原方法执行前运行 - // 它返回一个 bool 值: - // - return true: 继续执行原方法 (TrainingTrackerTickRare) - // - return false: 阻止执行原方法,直接跳过 - [HarmonyPrefix] - public static bool PreventDecayForSpecialAnimals(Pawn_TrainingTracker __instance) - { - // __instance 是原方法的实例对象,我们可以通过它访问 pawn - Pawn pawn = __instance.pawn; - - // 检查 Pawn 的 ThingDef 是否有我们的“标记”组件 - if (pawn.def.HasComp(typeof(CompProperties_NoTrainingDecay))) - { - // 如果有,则这是一个不应衰减训练度的特殊动物,返回 false 阻止原方法执行 - return false; - } - - // 如果没有,则这是一个普通动物,返回 true 让原版的衰减逻辑正常执行 - return true; - } - } -} \ No newline at end of file diff --git a/Source/ArachnaeSwarm/Patch_WorkGivers_Growing.cs b/Source/ArachnaeSwarm/Patch_WorkGivers_Growing.cs deleted file mode 100644 index 4a416ee..0000000 --- a/Source/ArachnaeSwarm/Patch_WorkGivers_Growing.cs +++ /dev/null @@ -1,96 +0,0 @@ -using HarmonyLib; -using RimWorld; -using Verse; -using Verse.AI; -using System.Reflection; - -namespace ArachnaeSwarm -{ - [StaticConstructorOnStartup] - public static class Patch_WorkGivers_Growing - { - static Patch_WorkGivers_Growing() - { - var harmony = new Harmony("com.yourname.workgiversgrowingpatch"); - - // Patch WorkGiver_GrowerSow.JobOnCell - harmony.Patch( - original: AccessTools.Method(typeof(WorkGiver_GrowerSow), nameof(WorkGiver_GrowerSow.JobOnCell)), - prefix: new HarmonyMethod(typeof(Patch_WorkGivers_Growing), nameof(JobOnCell_GrowerSow_Prefix)) - ); - - // Patch JobDriver_Deconstruct.TickActionInterval - harmony.Patch( - original: AccessTools.Method(typeof(JobDriver_Deconstruct), "TickActionInterval"), - prefix: new HarmonyMethod(typeof(Patch_WorkGivers_Growing), nameof(TickActionInterval_Deconstruct_Prefix)) - ); - } - - public static bool JobOnCell_GrowerSow_Prefix(Pawn pawn, IntVec3 c, ref Job __result, WorkGiver_GrowerSow __instance) - { - // 检查是否是我们的自定义动物,并且它不是真正的机械体 (因为真正的机械体原版会处理) - if (ShouldEnableWorkSystem(pawn) && !pawn.RaceProps.IsMechanoid) - { - // 使用反射获取 WorkGiver_GrowerSow 实例的 wantedPlantDef 字段 - ThingDef wantedPlantDef = (ThingDef)AccessTools.Field(typeof(WorkGiver_Grower), "wantedPlantDef").GetValue(__instance); - - if (wantedPlantDef == null) - { - __result = null; - return false; // 跳过原版方法 - } - - // 强制使用 mechFixedSkillLevel 作为相关技能等级 - int relevantSkillLevel = pawn.RaceProps.mechFixedSkillLevel; - - // 然后进行原始的 sowMinSkill 检查 - if (wantedPlantDef.plant.sowMinSkill > relevantSkillLevel) - { - __result = null; // 技能不足,不生成 Job - return false; // 跳过原版方法 - } - - // 如果技能足够,让原版方法继续执行,处理其他复杂的检查 - // 注意:这里我们只处理了技能检查部分,其他逻辑仍然依赖原版方法。 - // 如果原版方法在其他地方再次访问 pawn.skills,仍然可能出错。 - // 但这是最直接的修复方法,避免了完全复制整个原始方法。 - } - - return true; // 执行原版方法 - } - - public static bool TickActionInterval_Deconstruct_Prefix(JobDriver_Deconstruct __instance, Pawn ___pawn, int delta) - { - // 检查是否是我们的自定义动物,并且它不是真正的机械体 - if (ShouldEnableWorkSystem(___pawn) && !___pawn.RaceProps.IsMechanoid) - { - // 模拟技能学习,避免访问 pawn.skills 导致 NullReferenceException - // 这里我们不实际增加经验值,只是模拟原版方法的行为 - // 避免了对 pawn.skills 的访问 - if (__instance.Building.def.CostListAdjusted(__instance.Building.Stuff).Count > 0) - { - // 可以选择在这里添加一些日志,以便调试 - // Log.Message($"Animal {___pawn.LabelShort} is deconstructing, simulating skill gain."); - } - return false; // 跳过原版方法 - } - return true; // 执行原版方法 - } - - private static bool ShouldEnableWorkSystem(Pawn pawn) - { - // 检查 ThingDef 中是否有 CompProperties_WorkForNonMechs 配置 - if (pawn.def.comps != null) - { - foreach (var compProperties in pawn.def.comps) - { - if (compProperties is CompProperties_WorkForNonMechs) - { - return true; - } - } - } - return false; - } - } -} \ No newline at end of file diff --git a/Source/ArachnaeSwarm/ThinkNode_ConditionalAnimalShouldDoGrowingWork.cs b/Source/ArachnaeSwarm/ThinkNode_ConditionalAnimalShouldDoGrowingWork.cs new file mode 100644 index 0000000..3170615 --- /dev/null +++ b/Source/ArachnaeSwarm/ThinkNode_ConditionalAnimalShouldDoGrowingWork.cs @@ -0,0 +1,43 @@ +using Verse; +using Verse.AI; +using RimWorld; + +namespace ArachnaeSwarm +{ + // 将 DefOf 类放在这里,以便在命名空间内共享 + [DefOf] + public static class ARA_TrainableDefOf + { + public static TrainableDef ARA_Sowing; + public static TrainableDef ARA_PlantCutting; + + static ARA_TrainableDefOf() + { + DefOfHelper.EnsureInitializedInCtor(typeof(ARA_TrainableDefOf)); + } + } + + // 这个新的条件节点将检查动物是否应该执行任何农业工作(播种或切割/收获) + public class ThinkNode_ConditionalAnimalShouldDoGrowingWork : ThinkNode_Conditional + { + protected override bool Satisfied(Pawn pawn) + { + // 首先,进行安全检查,确保 pawn.training 存在 + if (pawn.training == null) + { + return false; + } + + // 检查动物是否学会并被允许执行“播种”工作 + bool canSow = pawn.training.HasLearned(ARA_TrainableDefOf.ARA_Sowing) && + pawn.training.GetWanted(ARA_TrainableDefOf.ARA_Sowing); + + // 检查动物是否学会并被允许执行“植物切割”工作 + bool canCut = pawn.training.HasLearned(ARA_TrainableDefOf.ARA_PlantCutting) && + pawn.training.GetWanted(ARA_TrainableDefOf.ARA_PlantCutting); + + // 只要满足其中任何一个条件,就返回 true + return canSow || canCut; + } + } +} \ No newline at end of file diff --git a/Source/ArachnaeSwarm/ThinkNode_ConditionalAnimalShouldPlantCut.cs b/Source/ArachnaeSwarm/ThinkNode_ConditionalAnimalShouldPlantCut.cs deleted file mode 100644 index 4489b91..0000000 --- a/Source/ArachnaeSwarm/ThinkNode_ConditionalAnimalShouldPlantCut.cs +++ /dev/null @@ -1,21 +0,0 @@ -using Verse; -using Verse.AI; -using RimWorld; - -namespace ArachnaeSwarm -{ - public class ThinkNode_ConditionalAnimalShouldPlantCut : ThinkNode_Conditional - { - protected override bool Satisfied(Pawn pawn) - { - if (pawn.training == null) - { - return false; - } - - // 使用我们之前创建的静态 DefOf 类来安全地引用 Def - return pawn.training.HasLearned(ARA_TrainableDefOf.ARA_PlantCutting) && - pawn.training.GetWanted(ARA_TrainableDefOf.ARA_PlantCutting); - } - } -} \ No newline at end of file diff --git a/Source/ArachnaeSwarm/ThinkNode_ConditionalAnimalShouldSow.cs b/Source/ArachnaeSwarm/ThinkNode_ConditionalAnimalShouldSow.cs deleted file mode 100644 index da6319c..0000000 --- a/Source/ArachnaeSwarm/ThinkNode_ConditionalAnimalShouldSow.cs +++ /dev/null @@ -1,37 +0,0 @@ -using Verse; -using Verse.AI; -using RimWorld; - -namespace ArachnaeSwarm -{ - // 使用 [DefOf] 属性,让游戏在启动时自动为我们填充这些字段 - [DefOf] - public static class ARA_TrainableDefOf - { - // 确保这些字段名与你在 XML 中定义的 defName 完全一致 - public static TrainableDef ARA_Sowing; - public static TrainableDef ARA_PlantCutting; - - // 静态构造函数,确保 DefOf 被初始化 - static ARA_TrainableDefOf() - { - DefOfHelper.EnsureInitializedInCtor(typeof(ARA_TrainableDefOf)); - } - } - - public class ThinkNode_ConditionalAnimalShouldSow : ThinkNode_Conditional - { - protected override bool Satisfied(Pawn pawn) - { - // MCP 已证实:对于野生动物等情况,pawn.training 可能为 null,此检查是必要的。 - if (pawn.training == null) - { - return false; - } - - // 使用静态缓存的 Def,检查动物是否学会了该技能,并且玩家是否在“动物”标签页中勾选了允许 - return pawn.training.HasLearned(ARA_TrainableDefOf.ARA_Sowing) && - pawn.training.GetWanted(ARA_TrainableDefOf.ARA_Sowing); - } - } -} \ No newline at end of file diff --git a/Source/ArachnaeSwarm/TrainingSystem_Patcher.cs b/Source/ArachnaeSwarm/TrainingSystem_Patcher.cs new file mode 100644 index 0000000..6383318 --- /dev/null +++ b/Source/ArachnaeSwarm/TrainingSystem_Patcher.cs @@ -0,0 +1,48 @@ +using HarmonyLib; +using RimWorld; +using Verse; + +namespace ArachnaeSwarm +{ + // Patcher 1: 阻止训练退化 + [HarmonyPatch(typeof(Pawn_TrainingTracker), "TrainingTrackerTickRare")] + public static class Patch_TrainingTracker_TickRare + { + public static bool Prefix(Pawn_TrainingTracker __instance) + { + Pawn pawn = Traverse.Create(__instance).Field("pawn").GetValue(); + if (pawn == null) return true; + + var comp = pawn.GetComp(); + if (comp != null && comp.Props.disableAllSkillDecay) + { + return false; // 阻止原版方法运行 + } + return true; + } + } + + // Patcher 2: 阻止特定技能的衰减 + [HarmonyPatch(typeof(SkillRecord), "Interval")] + public static class Patch_SkillRecord_Interval + { + // 使用 __instance 来获取 SkillRecord 对象, __pawn 为 SkillRecord 内部的私有字段 + public static bool Prefix(SkillRecord __instance, Pawn ___pawn) + { + if (___pawn == null) return true; + + var comp = ___pawn.GetComp(); + if (comp == null || comp.Props.skillLevels.NullOrEmpty()) + { + return true; // 没有组件或配置,正常执行原版衰减 + } + + // 检查全局开关:如果设置了 disableAllSkillDecay 为 true,则阻止衰减 + if (comp.Props.disableAllSkillDecay) + { + return false; // 阻止原版 Interval 方法的执行 + } + return true; // 正常执行原版衰减 + } + } +} \ No newline at end of file diff --git a/Source/ArachnaeSwarm/obj/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs b/Source/ArachnaeSwarm/obj/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs deleted file mode 100644 index 15efebf..0000000 --- a/Source/ArachnaeSwarm/obj/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs +++ /dev/null @@ -1,4 +0,0 @@ -// -using System; -using System.Reflection; -[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] diff --git a/Source/ArachnaeSwarm/obj/Debug/ArachnaeSwarm.csproj.AssemblyReference.cache b/Source/ArachnaeSwarm/obj/Debug/ArachnaeSwarm.csproj.AssemblyReference.cache deleted file mode 100644 index 33b62db7d9822e26b0067feb5749542eb9e34e35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50550 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 Date: Wed, 3 Sep 2025 12:07:45 +0800 Subject: [PATCH 09/13] =?UTF-8?q?=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1.6/1.6/Assemblies/ArachnaeSwarm.dll | Bin 45056 -> 45056 bytes .../Defs/ThingDef_Races/ARA_RaceBaseSwarm.xml | 57 +++++------------- Source/ArachnaeSwarm/JobGiver_Grower.cs | 52 ++++++++-------- ...de_ConditionalAnimalShouldDoGrowingWork.cs | 9 +-- 4 files changed, 41 insertions(+), 77 deletions(-) diff --git a/1.6/1.6/Assemblies/ArachnaeSwarm.dll b/1.6/1.6/Assemblies/ArachnaeSwarm.dll index 944902615f6b8ee1562e6b11c63d64bbf1902e46..652d822e0e69f74aaf49cd80fe20594af9b164e4 100644 GIT binary patch literal 45056 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 literal 45056 zcmb@v31C~rwKqQZO1fGs%a&xzaqJ{^Hk8N?3EAur7H2mkWN|_gmO6^9Bqp}6BgrJL zaj+AhtOZ(1Y0DOtmc7kuc|gDN3N59j3xxvjYx;na?$FW)Eo~nyg#Yh%=4x>gy1egi z(A+s^&YU@O=FFKhGgr#0bFNb^rIZ_=4?a-pQ9Su~x}<+U8Afqv!dFA;EB+tUKWeP} zLH+t2U75PRw7or@?5XQW_V(J@x~-|YbboJMS8v^t)opb>c4ulvX=z}x!+On9rB)g) zwfvCv<6LX6sfl$Z#!RK|0mjnU8Q;dU4xiWXQL0?>rk0xshYU1^Qo!@irM6s3QvP3f zIv`Q_d--XlRx|S&`tH;tSokwk5Wo|lt1Te^ajs4&UlElL@QNaMMmDu43wX{Kkf2QZ zdQ|&BZ<&$Kq&rY7vb}~32kJh2ivCW=aLq`kx@{0rR;3&rJS0FqIbEqmdBDk(Q?K}= zY^L(4E$5)oZs8#Ke>ItC#;cSHsOhIV8PhccY24FMFh&ag-HZ)+fibJ9GS$EgK}~Km zK9+^bd=3L?#%qX&x&zbCnQ$aCg5jNF4xI(MDXyVanwu*=j^!trgX8hcdQffpbaSu- zrLiNX)VoI4LyuT*GwZ47Oqc3Gryx^UndV?AutQK9B!E!XAewhiX$(${7)L6BsPQJI zn@21dkd>K$cH*d)7+oG1#Qbq*>QPz}G2#>P44Cmrc-S!VfVF9eGEGOD(V3Rzn#DrHpYT5RklTX3kenff3pcBds`Mlz1D$Dh>Ji z;#0}_m3vTZ4xT_k;z%0G9bg&&&?k(lps%4;r7uAhT@(lBKsbC-i%u@$0L2@C z4a7>D!oVw+!>SR;F%i#^N8d{RRxfcQj%0iK?VLI){#n#bxqhh zZq9q85*n)sdr3JR%H&Q&$n z?8IqPnOrQySePO| zo-9qgx*%Gn((_H2fu00x$5Dm75F~k3gx%q?I84~lf_fG0`>QsU`mH1GXnDAN!O!0R z-~)#V=Xf+64%2+a3UfVDufqB(WmcFKGWXQW(_5f2{=E;qVo6YoOr;mpG6RLM35nc5pbhS7tAYo#Y7j?0AwARfbWkaAUR9;%Qk zO!ZigRgjs?b99t@D2fC^Os79~sT+`mr9z(g*#&8;M4G*jjnumB2-_xzmV`&*e3Tbj zn{l*kQkE0Tk+dK|zAAcN>Tf7lSQbUr3h6o}teNRo%`kjulJa3)wHoU5Q+xEN!*wGh zZ?L!sz^Oxxr8#Cz?}Lv+vLQm8nP4V#BD5@fuPUE0*ZlFF8f?$ zN}H}mKH`d>2O#QpG4~P#Xo|YS=go#^@hEg z$RTYLdv~#p zcYM^R5@Xcfv_M6qHJeZpiOuUYfMEdPrccvmtZ>*KWc$%bG=32?k#NKpA3}~Renq&V!Ax90 z)Ls@=hASJUD1sLgjD=$j!EnqT*5sJs(W-D2YBa(9tOL>>LE^~6X&8>gx8M<}uCn*x z866WIgNVW#j@bJFLY{CKoyN-SN1w-r$1XS*6UQ5^fjQM+L2}$s{1OsRA8*Ftt`qRx zrdp4>C3T+oiZO|`cZgVe#c{o@t%(y(Ppo@jacgL>)?GOv{#qeu!mA(~At0qam%vJVE(CLWH z+-m<~kD)9mhkMGfuoe*kwUZ-o>pFq{d zs0OS-wjKW@P;{o4j14=`7`YE(?FtNj3JC*#D~@4E(5b}XzYE3Oc$yN-0MBytAr}L|bGsYiZ|?*h*E@zh2pr;fkr|fyIGP%S!MVAE!A{O@jAQQ{+Ga#b+B>a(ib`lze?x7b~`~h-x#bMSu0K}BS+_j{S zx~JmUq_b-J?_m|}cDj~Ukq>#Pm-M_*D7Khhr%@PJF&_F8)K(F;oz9}ryogof4?&3d z7m>)g!YyFtz(!s*Cv*;RP-TvOeW)&%J#C1}GvfzIhG-PhJJIOB0W*D@8UM0V!YDwW zEUaNkE>4BjnfhE{H{^+G8(aqp30gUst--GV)cy=QSqbwZ!sLF?8pOD{Bc}Z@FqqXd zl+XV6Lg6G7!pm~nMzL$wH6{bOwkqmLKwwwJT7*b&y&f$?2V|(w5ARbzw%hf*qKg@|g`2Nb%hA`#bX8Hz<#n1`N<~0{NzUE*z&>ZKNM?H-v z0&~uqWU+_O7PrBmOwbFjq*Ieh$j5j>8fYacB=aLaC0<>8L&P1Zamysn;2| zItag2MLw>ExJ$1LbuPVJjB(l1K<+FW%pNhczk-pTq|&dVEmxzfB4N4gCsCT;#iu8G za!cbkfLF0#(@HesDtM3d8d7`{g)#dnr2Xiw$xR^_u1OASVVcIto3qU3cyX_84SoyN z8lw8CMRcUoi`a_7xeVpxxs34Rxy*OK@{TFhx~_vAn=ZHVM=-gTZp0vH4Z3U?AOcZ@ z)O9Ky1F2@0UV^NS0-Q>TPD_h3LaY~h=V5*SPJu2AhoVcUT zhNO)ui7Ox)eH_Lzw{CG*wVW92SYGh&fbUeNX*K<9E-|DOliF!NL%}e~YG6}XrWB$9 z%(3`)iFR1TF+CIZ_kal``e1|KM-K5`Ly1@HMNA@w&3xNG>e=sg&%Ak+7oB=Z&%D@N zRl*u;{HFZ_kpTWX{w#8hAHxns9f@H|6n0*E-!)bZeOm8J&N2)3ZN`5{1~OM(L%$Hq zv0u*tnI7w95Xa$Z^rq_oBoI##w4Y}&&Zzq0KSB;3816d3fC`5d&7T4rsDy<5SXyYR zGyQU|))@CYQ^#Lq;|=7aZTtn)(Njm9%qnb=R?vtssoY+>71_-@C*qiN(YZ7+87yusbJV)SK|4G9D`Ioj#q5>`NfPfYLTrfsLj6{hz=#;F#`u zJVjI;I(t-ANh0B(VHI+SD>R($n2rceFtS4Cj!9Gno{XP&;E9-xI{m*OE!GRI4=&Ks zs==o46Clu50>?2I-M#?`an%?s0$_BjcQUlVWGs-=(dF7l_=Jw;_4(u7gO*w{S_6x1*?L( zXZjqg@;O%JJHEz>tO{1s%<0S7&CX3&xM_$_4Vm%0waKx+Sk@lx$BJau4)^0Ut}D@x zxXj7oat>tUC>_iLMh`7d6yUmx$a#Ry$sEQ|QZKnFtrCb6Vm?}!GBfx#4}s@CF3+fR2N)VD-m*FzxQS8ApQzcIE%#vCaHhOi^tqG=K@zwM&d0Ts0DpGl9UsvhKd~Y zOHf(4kP==JTVMp#5JB3sF`coiY{I}Qoc8{jkOvLW>kj?~i7)K2Unf=qZWm7E-T+ip zSrLo>78#yq(70FP5HpVOG9i{(7xvk|Lumt|E_M(nUm7t+);dUMU9XeziT?pb>HA?A_8*b6v98G$+Q4ez zt}0EOVA)s!5veqkdU+gd4bBG__J(^JkBXHhNQV0)j{9oxt(WnGCqNxHBFfWU!U1b{ z#L^t*f&=da5{Ln~hAB{ub;`&+$2ths5|KUxPd)<$+(Bc3p2=+f+8ut%u|RnB!nHa8 zbNVtaxPJy3Brzkb7wTNVEcvHyc4m^jC0zl%(%@)up)>Io1Xg~IZmKY5#+<19x0HsaWwsC0rHNIzIr1ZiTdc5qunDp-_F$-SlEcwK+W}I+kFlIiD-5TFGWNnQ zK^X>s*HA%Z8}HM1Q0PnE@3W=<>FO-~qMr zA-=@Pa`Ib)q_MGW2;hi|6xDoFr7DiN7{}}jYnS27`!2A{Q~^u$LJFK=0CO zW_lGC7oHD5x@zD96F>Oi;)_diOXygj>>4JuNPOTi+rH6Mcws{|l z!OCrqXO(l=b1Sg{_p#?O>vdNCus1#dt~9?u!^Ep>xYA@v z91BkZilHnU(60u_lDSXjf@{bI0bD>Yz`Z@A+1x`m(}fL7>;$qn$s#GN|NdMlV+?)c z1KweWT3n0iL#;*}Zei*; zhc>xDsx%e{Z_N3oXE{8)B(@NBNCY}F{S0&{Z}6ml&K%YaL~-LxwVxPzti^#9THuX7SQawGy(PKRVy5uMqjZZ(xch!oB|1ZLD7n7Z+vfHlZW(Mw-r zD&r@Ee`X;PyovWuy_bg<`2v_QVGm#FJ0^#>_DWc4@pU|UJ3jO8<>9TpAWPBtTn;37 zFE0*p173MCFNl){7^f4N=`6jeeqqir9iRPepqxl6caT@&kDr2$z}w}tRjM&Q{SI4^ zrn$++9-;Z07(>`V@gRP2)F9HY>0vC5lpc2&OJx|NC3@&Gr$T~gFcu9ZHi0omldlsn z8V}?%gQtNgTp|}`_UWuphPMmK1icwsjxy&hxNwOMhxyhV?()Z|a0r+3d@C=Qdj$kH z^o^fBss~>h-2=CYC}cS;@t7{Oplw*9?gC%a!0S@lMi-%k%LZOTXc%u6A)V}El>6el zi)t)!YDB})hDo^^L^?H=GAqNWtBEhscOWOyuembIKoPLqjTIhQNjp@TI8A*Gm`zE<+xB zNd}GB#+4)jj04XCZR7WJ90+^Qt$$u|L}=)bnX5D%^(D^6dmz#_ zc1>Y_QQQ7p+dO$Wu~66#w(^S1YD&!55Q@vyypW@sz%&L|k@5hf^c{&6NvWLmd5>z& z$A<5yj*U7t_t+%>f8&Qvs|!5FBj=a zL7Z&KnjtqHjN2Zx&yf5FDopTLppAu z^J@Y<6%D7t;b+F%NOz?OV;%i|m#x-+Gan;iYlIkyJ9;iIW@ZE6AujcJjgdvT2uGAX zYS)FALJvZlc#$4cn=iz}7Tj{Kz8T|*^-9i}HnO%U>zH;>2)1B(RYP3aP_PM)#&T1_ z3cf?w@Ypw9)>(3unr zGVy)9dOTy0O2siq~&&4`wm2fd`HEp zU*cWrLIKuLESji@Pr{!FCAK&H7TH+f6&w!m-DC=bj5&A~r5ap`G!A0R4q?qwNp#s#b=T@RWV+H#z%BtSR@Td+k<{k z=~uoRCOlUMW0sg#3nqp3c~F_&2*QiO52U*|a|*TPrG72T7)O>@D{_5|1zyEFDEp|2 zm*ri;7EEcXhJV<7$j7Ham3C@rsT+ch^biqaj9VP`cly}O`4H%%IgsZQaJ3323CA7>~Bp@ypXN6>^hxE_`HRcXu-ef!%i`nM>~-kEhuUn3`Y!Z7PxQt5m|C!SZ`BNU!kY*- z*(ije-h&5*L)y<=34TM^5J7OAVt42sVt;dpO+>Iin8GZ~y(|xt!Mm1$S1@Cp68#MT z4`>>uYuW-vbK^CHdvGgMVRuj~ax#k(NMVEnhf$1ROR`7hjm~exjxakYf#%9$yAxc7 zFmN)d*dx6_X0Bqlu)9Gobjr>RaV#CgMXVH0u{y^Nw*S1?KB;9ik9SX^>mISL2KUT1 z)E(;tu@x0nvCMWdJDW{ZiE^s~ub$3XOR+dLMG)OC!jiy(v$4@N;~Y?2TT+}Ol?lum z=#&%dUPxx`nkuzk?8yHd!99j`gQj!b;3c z48^9SSEPYCB=M+Rt1EU!5ZoY zfi9~W>S103n%$Vu>|)d(+bPnYfLedhoodSWMeC1UE$ENJ;Wb3~r5hdnQJf(rqO+T+ zvl)D^(Hh|G^JcjQ`v8oYF-2#pW>@Rij_@_B z9pE~+3#E1%2|`tz_9HE@U1!QslqrW$xM#|M3?hA=BJCU{(s-9djML}28gRuk4?YmQ zj)L;;6kkN)3^xaD@W4Ay#RZIi&B4A8E7+wAz(Er_aFN$U1e7zaEV9#~gwcMJ1jq54 zUqPon)Ni`fe}j)+>skN9*80w-hd~FQ_YFK?qohT~9NdkJIoOYsFJ3!q{T?DQ|4Ef- z1{D!{tsg*+_4pjhAb~ZL3@+n>Tot+umOJ$VT**B zr!XIctIUUkXq^6pN|S&R`3sq+{$y@E3X17!QQH~VZyJzJe>e5QIWuO?m_2j$EHuP# zA$22tZwl^s_A0ews!}&F-kp8J8Aib)+H#r3GjC! zC|lHR!&%6mi4bYyggZ+7P__E2F`L07TYm{3n7kUm=P`U3lT_e?=>jckxEaqdJ`?b% z!>1M>_+qK=!4ttB?_=@zXB>C)&r*LWd9K>R)f>}`O75yIQx#*0f2d?bnWb8#G!a}E zu~c*%)6Np6Zy=9oy7U$7I(vO;xuTP=*D^oW%k+@6 z`}R2IPZ9ZdNv%!LTR{E0Nb-ju`QPhix>QO%<5_z8SYp2JrTpg!|DX7X`9dsZMU=bz z>%fP+#Jn!;J_!C1HDNOGzZ9OWr7Ybd8hB0e!4NUu68+RqWPbZ3rsJ!aeo^%BavAek zv|_0rRxHHbO_ONptM!!XT}j`O7CmUuQthIRsh|(2|Bz93`8gtI$v9qOvDW+2_t(pq z{~`2asT<2kGbPGeA(5d`Wa|_;zgt0kT3We6Fm`~LwKDp>)#S5Dbk!&twnf`tMhZ)= zCg*Enw2fbg{C^dF{!Tbl%INGCNzNWaKKII4JR<3l$<%hWa1KvlX^-G{R!Z+CGyT0_ zCQoANM4@?UGV`~UGd(*@%h?m6<-F)2CMXuNR_y8l8J8PmG`|*mB@k1;^L?lCkLt|H zwA*up{}JGKnqR_X4XC%Ir`tsS7UBOL(aBqA(Ngz_<`2tAJvE8F-Y&hnPqeWYvRUc` z8H?{pyC0Rhagl$mX#0Oe^GzauXMoZ^Au^vPmUgGq`fZT-OCVK5{X9VH8k$JX`($3f z40=nwK8bd+Sgh!WVhKN%{O`nCj?|DtH8=#+9+B-i!FPyl9~RqqT4Xp`WIjBW+)kWA zZD*wJFD7%ozau{3zs7S8-XOF7(=m?M-q1RirN#BuasT5f^1 z14`js$t%!1fpp|k@U~%r_LQe1ccVt7KpOzvi?>c=0xcesjvPXMg02THhXG9#=yHEL z@;csuoGj4W-gM+$#O1s;FIT0$bi^>mtC<2FL_Lo&5ocN~yAja6xOYBDpr_HE$C!e( zgJqwW*5hivKwqp%N8Sg=lLdMo?Nu7n@DmH9OrQ@2pydKZ0KJPltrY@&1(f$8weJ=hFNL{pPV zIa{?0^k`5+TZHliaA`H>s-!?wW#lqfbqI8U)N4|m0?kKR3cX7SmzRah$#}DrYv1qC z_YKA=s!J%h#L|%-<22PPPz#`Ij791qfj%lcm#SgqLXS>@y-ZWBYD6I17y(*~?`E>> z{|eNmt`ew9C^x8U1Uig`eVY1+x)Bg=kV}+$9x~smT=nH@EP|hDY8xSNX@PXpAmssp z-Vmru-C0DrQ{63PFG`uM?i1((f%?<~0^w#CTz0941agZkX>|~H*GD4FSZyD(HU=&A zACs7Wyt=*AQdduubli62$5-4_VyTnsZRFo{4I&=6#+4~G)cfVlZbN+*bq#d|(zV0A z*6z}^!+Vfg>b!b#YZ^zIStS>Neh3&toj0E8vo#~2N&A0pSZbH=O5~T-5RY&BdMs5j z;U?2k&xt%QddcVhGRkn8l>SUGr_@xTR(CzqzXm^!^tp-5&-Rh$XX#AlFhp7bozGprYo zj+JyCQs^p54qHO?==}t=_A>7-f$LG@`y|Tns<|gr@YpTDvCXQa^B@ABF0%0{qyi zcTMdEl)a_PaBX2>J?O4i_cRowzTt^P3S4b!XMb0GG?uWrUof>I;u&cJZUuil9hdRjG1 zx+;XoW}1f1nDmKIiF#3>5%p5dXF@?$-oP^5qf%9;A>X>n&xcACe~$%ReB<3OyGzyO zqbP51C}XAfgVJa$<}yd1r`0$}R;tF$5H9K~&|s-rDA4t4mG>a(@lCv3>mhZChS2x_ z2!+&Lx}I-;upaC5w>6~h^jUy@;Xsw)Jzm8BC+Zd+a!<3$)Pk8BI)L`d)gA}Br0iGl z+qVg%dt0vV83nyI3i_*tAj>yH<;pip^Zd2@JAkfsAdW*={Y@avGpgJtkunF((Ga*i z8;YtW0zIwBC8}bx3zQXVfN)=lp-Oe$ zT;Zb53N)KBb)7&X>bxn~FRFV4dRpzq46jn%+?qO)RjFZtp7wnu@GAplJf?!Ze8Rof zTc!4B$d`uZ$EX*bGIANCRx}m3j8SVxK^JNWy*(5fqxL({x82X8-c-xDfPbVH=#OJds?BrdNoC$>&IMO{TBR2lR!7Bk4<_9&~cLUa z69PS@9(TVGnxbYeD%6{*7LI~4qo6A_1Uda>Q`JoZX*s8=iX{auC#Z1(>DEtBGe<$) z0%;Ax)huPb5%pxKtSqkfI8Zn;wrsk(Zdrk6gSuIu5#JrPQ_33DZye}w=vll0G-tVR z@x8}2Obt6wN!5(9M)iGxF7y4Sb`GFJPT9vNKa00|f-7|E%jy@Ptj~c?opgHH4D|r6 zc_`T*;mc1{n^tPbA6rp2Q{66*_WHBc%(GbbwEC#4t!%bh;Xw5Iv(;BtvrLc5Z1wmk z=yiegdW5OCMsqR8t_{vnDS`CrG*|Tsq`Ayfd-ITiNdIPm4jbRVu57+~*?~Nh>H#&Z zBhL}_Swsi(RjWXU{qDM78S~Xz4H@&tvuu-7_M^I)fVMbgJ!8%Z z1r3RuP3j@1jB+-qN1d`ijky4n-m}T&ut7PSRGC1!^(KB*QOc;LX4T+8Y`t0iR73t{ zb(yke^=qe$dTCa_cgomav-%&W?BJLIP@cT8&|b4zEReSOX0=)%t)*tQNg(J&?MJ<2 zQP~33?UZdYYVkedM~li%R!=%*S>w90lhuC;q+3|1epW=eQ2o}S+@d~Rwov`ifgV;b zgicY$Cd#=VJJuIMr>Zi6v}C8LF-}>f`9kP46)!3~UCnaJ9y4w&J6*LDm9?ldoHEnA zwX8**<3Lw|a*?_qPif%f@^XRnxGz!PaUg1biF$D}CDZn~M7=GLw$CN%T@A^&!)2U9 z%ENw+!xH7wkU{%gqBc4Z$DPi_P$!29>2IUVKV~t-S8b90$<4G5=PjoCUOn?~*W@r7 zpG!X-CjQr;1SZClf%}A8u5JPIbR}s%f^*zl`T-7X^L2~bsvBQkZmLORg{Olr$3^4? zL1J!`T8q5QGd0!Cg4ruF>(b&pF(#t!T-{v0Q@DLY`dggxSlCp5F2kLUXkfIiwBGRh zD`>qqy&9(>hWfndYNF&12!Gw{;#A{{(}t31IMO%Q;|mC8iAXKy7PdWhr08Cn+Kd<(W8WsTKE>iW!2<$i6NqU= zTB)u;T7z9RG54yMFzXL0+FVe*U6(-qY|QS1$j`*N`j+Yi>Pe)FafZ&)$%1K+{2a+| zHZQB*rgkB<)QF_b!g;NvyO8!kMwSk!N`D4<|F}V<+-W?c{#<(n?DDeeyVNY#f${g@ zn<$r6e*@{Y;}fdc^={>NREz6e|FfXvD&Oj|%RI(2*dqswUB-A%z1n5Wtt>M(yY3rT zX|%egjPV$|)R6C4;OnC`#=DSbp>eP4Q1riygRWuhxRb6f|F1xQ=eRe(VR!T`<1yEb z6@L~EK696`UwED{xy&3;Uz!{k5^$n}&P;_-@nh4wYogXJl6sc25j{)T~B&B{0;+G=n?AX@<{z zvsrD##vd^2-Jc8I2MkMFjN3v_o3q?oD!*^G3Z~gjy|uXiT>BHV#a%Jsr)I009M&3) zkh|5?`e#upS~AWq9p`E_4ph~<4D@cQD`|WT=fB+;ui37wjNNAAcJ!2eU*_6ne7Sa` ztHszq{(M)L@qXDh(9j+>yJwBP*p+lQPrTc8k!p=Rj+CujBJy`jdWm{bI5TZAe37?| ztAU^8zC_*V{)TEb`f=j1*;ww`=<0I+$XMv!<^FliQul!SV00<)JELd1uP_>;8O<2;;B9CZCY@O z>&7i*wZL$PW_Y$#&b0iV8?Yl|@0I~i&W6lTyhsOI@=N}ZdZc=j753ceKHsV~?+<^( zQ*AyPPFs(;4~)MAJSUXjWF3MAZnNsm#`3$Y2V_Lvm0nbPuA1_&RqvS?egb&%pXIr~ z{#TfZ^L-wp-c{;(85}-U`g3cVSvUSo&;)D$fRwiJfVw{T2lQg~lr&QAdma$`{EFBo z=5?gj`xUXncSUmO4ZEmWo=KIuNAta}8@-_=-e&Z1rT2M*yQ*m>cT>*`w`tP5w+-%v z-Zr=gY7t$vc*fLU>0RrY@4MF9;t4QsaNpDFJ}>l$m-F{)!2f3AmENR>`l^TVZd|>ObEm;q@4hKG*Vk%x`p)oO;dv>t#`hV|pIjS! z-gVB?1G8LP>VF-WW!+U#UNXyi z*jHY1NKJ>Yd)wSUK2~D5cSgsRG+XD?oKQkcLrH_f=Vucyu@jPok}ZC9T$F)sG_GKmMCYAMku1_;Bn;C5KFU?>VBMg`%H@ zqKCK5t@PFItEP+(9(2VjTY~Jx^57wp`=~>rr8(e?72m})skl$7cHNJo3iX0?l} z?OJQ8``qAwN=8z_&5*%TON@YLICx0iR{gQyN^tmwN?I?tZU81!x-q!k;A~wl@|-8~ z>_V-(a9)2|^;d)EiEN*-Zi@Uec))rj^rv96$k2>0L71h@#*JQY>DB7nR;2Wh@yY5c zq^rxvmcDKr8atu1-h9*(FMZOyH#D!*gZ;>Aqzl#BQWNL&=OY~g#;2|`+K}F0Y$`ng z5z*HoGZ3X$l+VB~JB>qHqZT5aq?VR1#(B=B(#42|HkEcrzQf7SRyT!j$Gyk3pE(@FS3I9idk zL(=_{-YMzNC3WGK96>4RVo5tB-7o2#l73Ut)A2(hn@VrT&ZRBx?Xbs%w6KS+w+F!9nU0dk+ss=VePi= zvwmd#k2T$Up10Gx*L#!qY41zkZN5u=2YjFR{lZu6&-icm|Ha=QxG8XF;0J+s180`p zU-HwEir|c3dvIrPSMbi@PlLhI({Yk-Ai8y7WIeD0FHSjqIC;do-hiTrT`Pcz;kD{< zh<+ylI~CYzI0b8v$hj8LF*X$Ht=hX0-~VUmKBRBeK7`a;@nxiES3Zh#qWf{AV@tn@ z^sU-wkbW$vDW4V03rOSRevI_d0Mo0S(wC9{p8GJ;w`zYW=^IEtU;7qPRYrVS)w@W4 zSNj3dPfRAJW&%09GQm@>)Tbx-k?Q>B2{`<8@&y_bJ$7Mt;zRFE^wW#93i>c{V~Q_2 zs5s@vv~xian1}g*0eXBMlifNXw0JNF&Asj8`ov8`OAE zHmHe4J<`dbY*14{*`VUaB&5?p*{EiKvJu}xt3-Md?sgmDJ*$z<17)LXGEP9c0F?7o zCn)EsZJ?Z|EV+kwsI?Vg=@9x&s<-x}WzykNeCowHha zYIA%0Ni*ALs)dW~p1#)JOkb)atKTGBx+j}Xp1L(xzP#(BJ@%5WOmb^?s#DOcb!ta@ zJCJ?d$$`b)$xP-XL4xV5+01QEW!u-=*<|;c`oJ*NNw%5Ac7JbHm`bgqMbedy#vY$^ z?(zCGYu@p&^NDQBCezv0-j4pQ$!wS1OCg$wU(uD#Qc-JAoH@J8?oRb~q*#iwWnI0U zi@WViDwD;({L#DJL9b5_NT=8(2gM;-)@>)Vt5UuFtNYl3s0mCKCwqnZEPJ;@d}=Sb zZ_e5%J-V~=+h?hTU0Tf4sdJ%U&@{>8=w?y!;rd0b3~Qa$-`&mbZJDK7m-hDeq|y$w zB(-fx5g?)BW|?p4p!h`NblOfkdCGK>TGrp&vE?MSCfSw7LzvB03rAU4CoGJ-&Q5jA zR!ATMNEX|@+q$+dCBw|AAep1*!ZC_R(fnhno6uA<+Oa$PyHlrvYdVvf(bB3eOm_FD z+S}Ffr7dk0o_ zZB;#)4m;hA490UkX4UF+XA0Us1Fv|lwA1qJcAiuT@t|CenZ)b`_(1Zliu3hCW?(`B zIKrs5fee&CW3k=c4ZYD2XDmDbf+JJQy3nIeg|Rp**@MiA zWM*Y5nTBr>wvL~X{1TfkN5S1?lbFuy?Y3S0Nhn#Zw;f|@+tG!d2)B*NUgjuTOGihl zj{xeW`D7>7rF!fO9fBor1!;T0fqLz9PqMq~qYl`bIUA7X)Y=QPLcTTAX7efjV|g06 zthOBFFf4*ukA5b*bROEx=S7QYyDyc_cBL}yEnB;~;gj3?(n%Q7u6}Un+u5l)Y`eP? z{asH*LRN6XI4$c+b$6<+UJN{DO%}*hTH|CS9e=Db(5TL=>+0DE+w4?Jw{LGtcC_|F z0T}i(;RczfJ5-qz%}Up2fy!A%j#4A?5bZ|jc9NJ%ZcBC8$gWFv!q#NLXh~yT;Na-x zOnS23UIUx8WrR2{l;a;H-?kIBunv5HUu1U<(0Mzcc!$*(bhQ|!olRk(6dO=9Zzp?P zpO3C)cP#Dggnvk>ja_{y$*fN&G0QRzfYpzK(w)j`L}zMSvcEe!3b)d>cS=>qRx}$7 z`p&b+nNxmAvImn-oBn#c7($;Na0MLlwr%9x&H?P|?YH|g$CRxpn8z_x+c0fbr7{^d zwF(A6BcStd%M!CBbs_#mrM@2cf@HTwad6-sG|(wBu1ofUmIcUl+C8nk8Y3=OXW^xF zM$DCy9zB$9s+Qf%7O$Y|Qpt`T6hduGcJGu7s}+k^yiTcBMl7~OGHM-ShpwK~`hmXG z3J3!pFkC{*(sqx7X@lvbU`=Sq8OVnf6j{e;k|kJiw!=BX+C-X8N!I~q_fn&3aepRj z_iRexA2=h3snM~c9dki^3!WW2Q|WdpZ5`aI+PDM!;2x0VS0ChQHY<}`Q{9UYWaLVU zMs$WA+>~C5p%OjSFs!{;LsJUt-I6r=oNjmGw%nX1X>X>RG5Y7N?dhzH+g(ABEI4j3F&+BB+as@%r(v;$H_3; z$&cPHYC#!VIk{C>6t{6`A+TE1-__j-fmNHG&Mq3j0@s1ij|dKgggC4U>eam(T5e}; zojZCjB~@B8E1Xc;v99BVG6*@aE*&?@(Sc@>=j^dItT2l~$D^0GP*$$7w4DZ98o zi^W_c+U(uTa16SPB-?Ji>?9T3> zB~pk2v?{sB0d{DL!r1qLz7t{Y4y_&SG@J#hD7ajOz^3aM1s@ZGYBEfgmd*=~!!XzE z;vK1uogcz&G!1Pcvjb5DoC>ESs!52s0js|TIjDkXh7q~|jJqVvmN<(+Qzv#aHuj}0 z&=g`E@nuVFN70-_oZ~tSJ$^-J-7AVVu@Y&y6n53AZnYJ`Cj-20G18Tcsk9~cr!^q9 zn*+L~9AhOLm^Lg!y;*K<;53kEH`~(Pt(#@01uN~2-ejt6H->&jCor67jF}}EcOom8 z5xuLRbJI_NGZ7`zG^7J6!=PDDJ8Tdg<7e?Y+wQ?er3L1@T_QvVRHNHgZT&rp=LfXS zmcG93fz`d#o}&1xd*KNf=chV(+^{;m%ua8W1x{L9-3L0vE!y=eEH~@5kIP4;SYfw8 zi`ZPJdN~6r)F{}QnF@Zj_z(yCo35-ru8@|NC1tTwc3*p2|5i+M4LUIi)>vmpOvwxT zW3?@vN+DEomP*#fzE*5UxWd9TaMU@2I?K+s_4oC`7p5RPcaD@DyN(PV+O9BHVK2Qn zQ|anl)Q=3uk1Lr%6Y_*8j3jXW1f=+D?63qVKJURUFO$XQKng?)OAroVAKKQ(dYyV( zx>}z!v3nXX6QtlCojQ*C3na(GFR@3Fp%?U;aCy>TmYdBS(9SgmQedx}>fYA2qd&|2 zD2980PG4Lg17up&dRw)2rfgU*wx_MV+iWLTknE}yqP4VSSMqR4M^OS}kpZoo4#;H5 zv~y(3a9Du&%T8lpXt^xXr!&yUE@77D zVBr8r76E-IlU5(af{@EoO!~JRoC^xpr@OE;rJ+CU(9+7zA_hO&zphGk>{y&kr@M|V zYU$6~M;9LtS4@L-oqM~qoKxu>?XjKFf!-3pa{%>;0vFv%i zBtrvFbsmc=qQJ3C9?}+<-?6Pqa<5gi$UtQh@fIX6>~@%wLWv1b4epd)vvoVpn^G-^ z0n+(MtbK_M2$m~PIs1T{&h)2o?jdJ+Je+FnT?`v6)NyuGKta{Ak3u$gI!wy^ChnLc z#2Gm*m2BI2UnO2 zx!F@QIGK^kqXVac=_EFaTQfYC&E(X!q$`P$%D@9;Wb=|iM5xceGOD$A5s$j^w7Jle z&W5|vHUvFg9VwJ|V85Ee=4KnV)(B}c4D`9rDZ=Q@BqB&gAQ>DiB7}5yD;c#Uo!l*6 zc4_B!6y|NJrFB`?_8l0hR1Xdni(F&ju%Orj7Gd@ASr#^;*@ ztz{m<)XONIOy;kHWPKpd8g{ohw!6r%@7e>ki>o}>yYp!O~-5* z&QsW0hL==58F+coqoAGX3m4JDP{Y}() zfSLjvd)p4(xubV9FxM@q@g~+q2>Iw4+5c{ zKDobC`Ew2(C+NBo4PchZdX&Ya;7~3~Wp}3#6Ya2pfty0$=4{ZoY0BV|tVfj2)6LGV zesqw^Z|&t`;$UO}aPqn7EW_{gr6tQ@!3`R{HHHGywSy>ZPzv$asKY=h9F4&O*WI~# zD^1_g7~H?h?eU8AQQ7INe3Q zPYyPY*GKW)T^+@JJ$kir?!o@q+DENZ|Et=^tWbZ4OKxrADE%F>f1;x>3!dup4CsH^ z+5a_%V>iU zP968YT;3K=zfmr%oe}(E1V2YN zAO|22k`0YU zQmef7lr;iFjz9q?D%c{Rhsn+XZBjff>Do3xZ@P3(s-vF=gSj22l2exB#%DhWFFh>!kV?+kI?}cRDS-ojl~hEkJqzhqwLdj?`kDIc&E9uIR zOD80JS=yULIeUUN%sCy=IL@^-`CEio%v0N{pK8YYxGy^h^#wg=`^@L$stmxXj_O?BO0-uQh5zUni822Un$X zukftF1vFP9EKylL^y${po<8LHH$1W!uLJhrWxzIkl4>_z5nSUum*KTQmaW83h#(BX zKbTpk)&tjtmkB$O$9jqsdjp5Qt|+%v^`pFiITN*T$O8;{)gj-ny7Au(i13AfO@zg0 zt{4B=(!lYWpMeJ0i8KW56{-$Z-U<|1~+6fln8@Sgfq= zA`xz=P?kl$prAVRXB*(1c}1z3I$*R++d$ue8eM>UL8bgT1u7R*`2T}s$J1k-%IS^L z5}E}qa>%~;uc=}wI!s%ldOMJ&r2Djp?ZB**l1_C7o?E3EJy@DP346()yiFuGGTRMi~lymVqFI(L%!`_7) zj-k=Q9(6wYHhufvtuxovfhH+NOXFIC&o=3gF`)r8e>nfuv(zmA*c3H1ul>$L8)j17oujj=&*R&(lhGGjP@txtY-!2E<}6m3wd%JIdxM? zwUOTvK$MZ5P&*@Bl}Qbbl(xVR=TV0rPol+eJhrjl%gM6^(&@RS^+FBxOY1pbP5WVM ztetaplwU*m)e{eY%1SlczQ1SIad>&rg=+#t1EV>i7@;c&BfF_1e2T3>SX& zWy*(*OR;P!%6fx451bWQbKt5!r#LQ#XBix)@?`MRcJbVy*U+u+l+jefAFC7dq*-v_ ziVL|GP`nMsPXig4~T%J5~-ir^;@pqq**LeOv~rw73LK+X)e9#ye;LC$#-j z%2ocHVX2xEFbFhDZT6H=8~zMsOgP?3SeR_;%nz?y2WLWKr5n;c+b-?o)BoW0 zKyu?^N_2FHQfMm)F2%!~3sX9wjSriSD^QY~YVG(A!RU!yJowPuxK+>`4SPMLO2gez zzMNxMvx*%~F~t&a}%7wAP zlFB)R*CkMgp%|TD8p}EtgQeibUT;S^+sz0>-@v>o%UN$m!V2ZB!*@);b5a1`Imtzc zbaOfs)1^A>GVm*u%EL0Xoa2;+UXKp)dYt(}x6OE1N5NSv?0o`{4i43XoD*(^)E%h1 z6+PktrunMs4=Y#0w^2ph>8ybuwyYc` z_zVv+;V{9FWb2tmPC=3Bsf?U&gxq!bP8h&ifUQQzSEq=^&uP`E$YzWANEaThcz6XG zz6DQ!!?##8lLyGJGCMQG4VHBT~+4 zwPPaXhB+Qh&c*L_O2K&iHn@};5W<6h%4XyMr1QDFhB?C<@tLMC(nCJsex^am4oEs= z;x95h5*fZUGJJ(;x)nO@wjv|g@Jui~@_c1v_$8CrM%^);qMpxZQqMi%ks;FxK`$YXGD71p1S&lIU|6{$!;j&A zo$YD#l(B)c-MlkYAd_T~PoDw+&b!sE0RFL{obW>FJq=?=l*3sitZdR+cyl&HH z;y3kB`%n0BJ1YeJ<1eUO;eAF3Nc@k|5Fio(S5j`cjq>p-G+vpm0PF(eD=U@|6(Dt{q1mS(t(Bfl}RrvBHCV)ueqZ~Pgs3W61 z{229!uVp%rZa_MK`WOQUvB6u*QdE7Ma>L$)AI8-O7%hHl9MC>|OeTPX_((oqhYEPc z1o;o7C6JYl;_1&*dZEUsiW;WnlkSnf$6^cUi?F8xCC?)KkFS}sLHu7P=9*^}jFy|a z`<&4*TLsG|y|3WE=E)&qk+1%s7dU!(yL6t1=XCOE&%@xPu1 z)gY4s145hH%zA$+gTaxM;>C0nzxD*f zZ<D*i%AP_R0<7JNmm5w(9Vdz94Non?Ua#qFzEFX9Db9& zGU|ACs?f0mHU}NONqNICbNErTJ(pgR#69(*c!_2M+Gsq!cbNFqqgTWK4#_-#vFbgLO20^bc6xjq9 z1pkho{e<76`9KSsFeT7Uu&=|9xdza^96z`xbaG|X>o+57kma9KM)z4B6paau*4W)X z{LFADvhQv)<}IgasJ2q7ISHGBt&4ge#Jq5vs~1Dm85tP|tsylhc!QCVdYSRMORFNQ zXl0R+DNw~VCa2LzJuu;YkLkRgQd+&M96iwW?Ry+!NJ31%Roa~a3gO?c6j!YMFwK5s z3SHj5Cs_yoz$TkP2BNx^;R^=59`t4SYV?AGvhR5=GF5^}zB+u$IAJ92PU)cNjhZ zK?tpD8ZgktQpcxWuAd`ICqai8F|EJh%Ok^=gKAa|F|rg@WE5W4ivY?wdq-wPMplVF zmOA*6rT#h>3YLPKxU4rrFi_E`jD?B0gJ7zJE6g=i(qm>Wj~-!(1JzT&ihAD;D{pw; zpP>7F?}qoiPoscaV~{lb7=G_dv*m)m@9pq@4=A1BV_3%yyH5f?#1^FK&w04peT)Rr?IL&K6Fa&c zl#$`@`ye4z(u1j}wG+k9Sxc3o*fHkyM~0uH!f%I8Mh0YJ`Y;->h8~6}KhQWBHIwtYP?ezgL=%j9iL!sAy>$xisSShVo>>O#(`2#BoLYWE&yTd?S8f zz{k)FO63$gMdZIr(rcgvF2?(w!9Rb4#h5c`|19ly_sD&Pq}}t>BZz{6r{aV zqvM?#C)WkwD)%>s_n%T3+1~;kEQJnW@L2AUHzWI7VL{Z{m#`u;wm{_j89MA*M5Wl2 z0D^T&)6FpS{Tqb%D_H*+-2{Q!H{h%|!|!7)fJ|@d!E;O*&FMk;vG0+Oo_BWjoY$@} z;J(}ne{KVbp}aYv^|Rb%g_{vows2y7hRLJ41q>yMhUk#6e(Aa4JS761%aWxzX)bp% zBTI=Eg0;*sDj7MS$*vsf?Urm-d}y=+S@_2gvJ8%g??I*ubTaCV#5};{7NBdH`C2*X zp-d1s;TW(ZNfv!4po?hFY)PgY3vOogP=SfZ=^5#Y=xsuy7(h8DHp6hSD6~V;I$17t zz)H)8$DlvPBS;<+$Z`<@=@@!X#7;`{M({NJC*qr!EMyDi+@eO7NMnd#RAfEo4|(DL z|F6CCd2J$y;`nTgbUj!kh>D2pL7~z#BsSOxRw<@Mv9yArdMK2tL5gWoY>RkHp&tAX zJhae1!K-eCc6ba^dff3&dzM!{CLyZ+1>ZP@68B{v({H8r9MDd zP_Bix_Ehw;;|d#A`>uc5ar^G9lGF{Rq8d&RnFBjIV_`Xr`$=uzCQ!T`PjO}UE{m6;6;lSq(@?#9@i7}T`B2u)j z=)y@NUUL&*bV5lwR(^|_0sh1o{mkgq5h5c>3Kws~U1(8lQ5{!g-H zM9D9-QbA>+{x1=H0&TzpL4=Mb3mV+ugTWGr!IcjO-PJ@^LuqrbnEULM1>V6v#JJ^!v zuKO-d z=;8KLU~CVXZyKGK&GvK~7{+;nwSvFkEaO(8I?c8fpPBAizb6Kc@RsIB+<`DgrSf#~ zTM%mo4h0+_4Tb#IBzsxuD9I0|&J55YYR2@r-f9U(>wQr)n`T+062GoeN4lB8s{Zk` zcCK-FzjEDSMr=nPP!8GaqPxfOxX4 zqEUX%|M;l~W;&QVcP{2R2C6l(I&na)k~YsFVwH$g5?kqQ6s}k)fk`A$-!yr;M6nW| z`tTwDi6#U37^9kMC>ZLcLEPkI}t~jB{iX4 zf)?A0fxeWH;wOi5b$pNo#*J5;O0nExyrhJ0Qs0bmC24zFFZ_4-qhI4FdhOc ftTVbT6KVgc97T`AQH{VCzb|8%C*N`S|3=_9^q-f{ diff --git a/1.6/1.6/Defs/ThingDef_Races/ARA_RaceBaseSwarm.xml b/1.6/1.6/Defs/ThingDef_Races/ARA_RaceBaseSwarm.xml index fbb66f2..9c9c0d9 100644 --- a/1.6/1.6/Defs/ThingDef_Races/ARA_RaceBaseSwarm.xml +++ b/1.6/1.6/Defs/ThingDef_Races/ARA_RaceBaseSwarm.xml @@ -14,36 +14,7 @@ 0.3 1.1 - -
  • - -
  • ARA_Sowing
  • -
  • ARA_PlantCutting
  • - - -
  • - - -
  • - Plants - 10 - true -
  • - - - -
  • - ARA_Sowing - Growing -
  • -
  • - ARA_PlantCutting - PlantCutting -
  • -
    - -
  • - +
  • @@ -104,19 +75,19 @@ -
  • - -
  • - Plants - 10 -
  • - - -
  • ARA_Sowing
  • -
    - true - -
    +
  • + +
  • + Plants + 10 +
  • + + +
  • ARA_Sowing
  • +
    + true + +
  • AnimalInsect
  • diff --git a/Source/ArachnaeSwarm/JobGiver_Grower.cs b/Source/ArachnaeSwarm/JobGiver_Grower.cs index 2c10f81..2447445 100644 --- a/Source/ArachnaeSwarm/JobGiver_Grower.cs +++ b/Source/ArachnaeSwarm/JobGiver_Grower.cs @@ -5,39 +5,24 @@ using RimWorld; namespace ArachnaeSwarm { - // 确保 WorkGiverDefOf 被正确初始化 - [DefOf] - public static class WorkGiverDefOf - { - public static WorkGiverDef Harvest; - public static WorkGiverDef GrowerSow; - - static WorkGiverDefOf() - { - DefOfHelper.EnsureInitializedInCtor(typeof(WorkGiverDefOf)); - } - } - public class JobGiver_Grower : ThinkNode_JobGiver { - private static WorkGiver_GrowerHarvest _workGiverHarvest; - private static WorkGiver_GrowerSow _workGiverSow; - - static JobGiver_Grower() - { - // 确保在访问 WorkGiverDefOf 之前,它已经被初始化 - // 尽管 [DefOf] 会自动处理,但显式调用可以避免某些加载时序问题 - DefOfHelper.EnsureInitializedInCtor(typeof(WorkGiverDefOf)); - _workGiverHarvest = WorkGiverDefOf.Harvest.Worker as WorkGiver_GrowerHarvest; - _workGiverSow = WorkGiverDefOf.GrowerSow.Worker as WorkGiver_GrowerSow; - } + private WorkGiver_GrowerHarvest _workGiverHarvest; + private WorkGiver_GrowerSow _workGiverSow; protected override Job TryGiveJob(Pawn pawn) { - if (_workGiverHarvest == null || _workGiverSow == null) + // 懒加载 WorkGiver 实例,确保 DefOf 已被初始化 + if (_workGiverHarvest == null) { - Log.ErrorOnce("JobGiver_Grower could not find vanilla Grower WorkGivers.", 123457); - return null; + _workGiverHarvest = WorkGiverDefOf.GrowerHarvest.Worker as WorkGiver_GrowerHarvest; + _workGiverSow = WorkGiverDefOf.GrowerSow.Worker as WorkGiver_GrowerSow; + + if (_workGiverHarvest == null || _workGiverSow == null) + { + Log.ErrorOnce("JobGiver_Grower: Failed to get WorkGiver_GrowerHarvest or WorkGiver_GrowerSow. DefOfs might not be initialized or DefNames are incorrect.", 123457); + return null; + } } // 1. 优先收获 @@ -96,4 +81,17 @@ namespace ArachnaeSwarm return bestCell; } } +} + +// 确保 WorkGiverDefOf 被正确初始化,放在命名空间顶层 +[DefOf] +public static class WorkGiverDefOf +{ + public static WorkGiverDef GrowerHarvest; + public static WorkGiverDef GrowerSow; + + static WorkGiverDefOf() + { + DefOfHelper.EnsureInitializedInCtor(typeof(WorkGiverDefOf)); + } } \ No newline at end of file diff --git a/Source/ArachnaeSwarm/ThinkNode_ConditionalAnimalShouldDoGrowingWork.cs b/Source/ArachnaeSwarm/ThinkNode_ConditionalAnimalShouldDoGrowingWork.cs index 3170615..c577380 100644 --- a/Source/ArachnaeSwarm/ThinkNode_ConditionalAnimalShouldDoGrowingWork.cs +++ b/Source/ArachnaeSwarm/ThinkNode_ConditionalAnimalShouldDoGrowingWork.cs @@ -9,7 +9,6 @@ namespace ArachnaeSwarm public static class ARA_TrainableDefOf { public static TrainableDef ARA_Sowing; - public static TrainableDef ARA_PlantCutting; static ARA_TrainableDefOf() { @@ -32,12 +31,8 @@ namespace ArachnaeSwarm bool canSow = pawn.training.HasLearned(ARA_TrainableDefOf.ARA_Sowing) && pawn.training.GetWanted(ARA_TrainableDefOf.ARA_Sowing); - // 检查动物是否学会并被允许执行“植物切割”工作 - bool canCut = pawn.training.HasLearned(ARA_TrainableDefOf.ARA_PlantCutting) && - pawn.training.GetWanted(ARA_TrainableDefOf.ARA_PlantCutting); - - // 只要满足其中任何一个条件,就返回 true - return canSow || canCut; + // 现在只需要检查播种技能,因为切割功能已合并 + return canSow; } } } \ No newline at end of file From aca5fa287d457e35abac698fec711602e0acb49f Mon Sep 17 00:00:00 2001 From: "ProjectKoi-Kalo\\Kalo" Date: Wed, 3 Sep 2025 12:27:38 +0800 Subject: [PATCH 10/13] =?UTF-8?q?=E4=BF=AE=E7=A7=8D=E6=A4=8D=E4=BC=A0?= =?UTF-8?q?=E9=80=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1.6/1.6/Assemblies/ArachnaeSwarm.dll | Bin 45056 -> 49152 bytes Source/ArachnaeSwarm/ArachnaeSwarm.csproj | 13 +- Source/ArachnaeSwarm/JobGiver_Grower.cs | 31 ++- Source/ArachnaeSwarm/WorkGiver_ArachnaeSow.cs | 218 ++++++++++++++++++ 4 files changed, 243 insertions(+), 19 deletions(-) create mode 100644 Source/ArachnaeSwarm/WorkGiver_ArachnaeSow.cs diff --git a/1.6/1.6/Assemblies/ArachnaeSwarm.dll b/1.6/1.6/Assemblies/ArachnaeSwarm.dll index 652d822e0e69f74aaf49cd80fe20594af9b164e4..d270c71c8cacc052faabecc6135bd825feb8bc3c 100644 GIT binary patch delta 22120 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 M^!<{9 delta 18063 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 diff --git a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj index fa0e51d..97942aa 100644 --- a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj +++ b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj @@ -86,20 +86,17 @@ + + + + + - - - - - - - - diff --git a/Source/ArachnaeSwarm/JobGiver_Grower.cs b/Source/ArachnaeSwarm/JobGiver_Grower.cs index 2447445..29e70f5 100644 --- a/Source/ArachnaeSwarm/JobGiver_Grower.cs +++ b/Source/ArachnaeSwarm/JobGiver_Grower.cs @@ -8,7 +8,7 @@ namespace ArachnaeSwarm public class JobGiver_Grower : ThinkNode_JobGiver { private WorkGiver_GrowerHarvest _workGiverHarvest; - private WorkGiver_GrowerSow _workGiverSow; + private WorkGiver_ArachnaeSow _workGiverArachnaeSow; // 修改为我们的新 WorkGiver protected override Job TryGiveJob(Pawn pawn) { @@ -16,11 +16,11 @@ namespace ArachnaeSwarm if (_workGiverHarvest == null) { _workGiverHarvest = WorkGiverDefOf.GrowerHarvest.Worker as WorkGiver_GrowerHarvest; - _workGiverSow = WorkGiverDefOf.GrowerSow.Worker as WorkGiver_GrowerSow; + _workGiverArachnaeSow = new WorkGiver_ArachnaeSow(); // 直接实例化我们的 WorkGiver - if (_workGiverHarvest == null || _workGiverSow == null) + if (_workGiverHarvest == null || _workGiverArachnaeSow == null) { - Log.ErrorOnce("JobGiver_Grower: Failed to get WorkGiver_GrowerHarvest or WorkGiver_GrowerSow. DefOfs might not be initialized or DefNames are incorrect.", 123457); + Log.ErrorOnce("JobGiver_Grower: Failed to get WorkGiver_GrowerHarvest or WorkGiver_ArachnaeSow. DefOfs might not be initialized or WorkGiver_ArachnaeSow could not be instantiated.", 123457); return null; } } @@ -29,14 +29,16 @@ namespace ArachnaeSwarm Thing bestHarvestable = FindClosestThing(pawn, _workGiverHarvest); if (bestHarvestable != null) { - return _workGiverHarvest.JobOnThing(pawn, bestHarvestable); + // 调用 JobOnCell 以利用 WorkGiver_GrowerHarvest 的多目标打包逻辑 + return _workGiverHarvest.JobOnCell(pawn, bestHarvestable.Position); } // 2. 其次播种 - IntVec3 bestSowCell = FindClosestSowableCell(pawn, _workGiverSow); - if (bestSowCell.IsValid) + (IntVec3 bestSowCell, ThingDef plantToSow) = FindClosestSowableCellAndPlant(pawn, _workGiverArachnaeSow); // 使用我们的新 WorkGiver + if (bestSowCell.IsValid && plantToSow != null) { - return _workGiverSow.JobOnCell(pawn, bestSowCell); + // 现在直接调用 WorkGiver_ArachnaeSow 的 JobOnCell,它会处理 Job 的创建和 plantDefToSow 的设置 + return _workGiverArachnaeSow.JobOnCell(pawn, bestSowCell); } return null; @@ -55,30 +57,37 @@ namespace ArachnaeSwarm ); } - private IntVec3 FindClosestSowableCell(Pawn pawn, WorkGiver_Scanner scanner) + private (IntVec3, ThingDef) FindClosestSowableCellAndPlant(Pawn pawn, WorkGiver_ArachnaeSow scanner) // 修改为我们的新 WorkGiver 类型 { IntVec3 bestCell = IntVec3.Invalid; + ThingDef bestPlantToSow = null; float bestDistSq = float.MaxValue; foreach (Zone zone in pawn.Map.zoneManager.AllZones) { if (zone is Zone_Growing growingZone) { + ThingDef wantedPlant = growingZone.GetPlantDefToGrow(); + if (wantedPlant == null) continue; + foreach (IntVec3 cell in growingZone.Cells) { float distSq = pawn.Position.DistanceToSquared(cell); if (distSq < bestDistSq && pawn.CanReach(cell, PathEndMode.ClosestTouch, Danger.Deadly)) { - if (scanner.HasJobOnCell(pawn, cell)) + // 这里不再需要 WorkGiver_Grower.wantedPlantDef 的复杂处理 + // 因为 WorkGiver_ArachnaeSow.JobOnCell 会直接使用它计算出的 wantedPlantDef + if (scanner.HasJobOnCell(pawn, cell)) // HasJobOnCell 内部会根据 wantedPlant 计算 { bestDistSq = distSq; bestCell = cell; + bestPlantToSow = wantedPlant; // 确保返回正确的 plantDef } } } } } - return bestCell; + return (bestCell, bestPlantToSow); } } } diff --git a/Source/ArachnaeSwarm/WorkGiver_ArachnaeSow.cs b/Source/ArachnaeSwarm/WorkGiver_ArachnaeSow.cs new file mode 100644 index 0000000..ca6c4a3 --- /dev/null +++ b/Source/ArachnaeSwarm/WorkGiver_ArachnaeSow.cs @@ -0,0 +1,218 @@ +using System.Collections.Generic; +using Verse; +using Verse.AI; +using RimWorld; + +namespace ArachnaeSwarm +{ + public class WorkGiver_ArachnaeSow : WorkGiver_Grower + { + protected static string CantSowCavePlantBecauseOfLightTrans; + protected static string CantSowCavePlantBecauseUnroofedTrans; + + public override PathEndMode PathEndMode => PathEndMode.ClosestTouch; + + public static void ResetStaticData() + { + CantSowCavePlantBecauseOfLightTrans = "CantSowCavePlantBecauseOfLight".Translate(); + CantSowCavePlantBecauseUnroofedTrans = "CantSowCavePlantBecauseUnroofed".Translate(); + } + + protected override bool ExtraRequirements(IPlantToGrowSettable settable, Pawn pawn) + { + if (!settable.CanAcceptSowNow()) + { + return false; + } + IntVec3 c; + if (settable is Zone_Growing zone_Growing) + { + if (!zone_Growing.allowSow) + { + return false; + } + c = zone_Growing.Cells[0]; + } + else + { + c = ((Thing)settable).Position; + } + ThingDef wantedPlantDef = WorkGiver_Grower.CalculateWantedPlantDef(c, pawn.Map); + if (wantedPlantDef == null) + { + return false; + } + return true; + } + + public override Job JobOnCell(Pawn pawn, IntVec3 c, bool forced = false) + { + Map map = pawn.Map; + if (c.GetVacuum(pawn.Map) >= 0.5f) + { + return null; + } + + // 直接计算 wantedPlantDef,不再依赖静态字段 + ThingDef wantedPlantDefLocal = WorkGiver_Grower.CalculateWantedPlantDef(c, map); + if (wantedPlantDefLocal == null) + { + return null; + } + + if (!PlantUtility.GrowthSeasonNow(c, map, wantedPlantDefLocal)) + { + return null; + } + List thingList = c.GetThingList(map); + Zone_Growing zone_Growing = c.GetZone(map) as Zone_Growing; + bool flag = false; + for (int i = 0; i < thingList.Count; i++) + { + Thing thing = thingList[i]; + if (thing.def == wantedPlantDef) + { + return null; + } + if ((thing is Blueprint || thing is Frame) && thing.Faction == pawn.Faction) + { + flag = true; + } + } + if (flag) + { + Thing edifice = c.GetEdifice(map); + if (edifice == null || edifice.def.fertility < 0f) + { + return null; + } + } + if (wantedPlantDefLocal.plant.diesToLight) + { + if (!c.Roofed(map) && !map.GameConditionManager.IsAlwaysDarkOutside) + { + JobFailReason.Is(CantSowCavePlantBecauseUnroofedTrans); + return null; + } + if (map.glowGrid.GroundGlowAt(c, ignoreCavePlants: true) > 0f) + { + JobFailReason.Is(CantSowCavePlantBecauseOfLightTrans); + return null; + } + } + if (wantedPlantDefLocal.plant.interferesWithRoof && c.Roofed(pawn.Map)) + { + return null; + } + Plant plant = c.GetPlant(map); + if (plant != null && plant.def.plant.blockAdjacentSow) + { + if (!pawn.CanReserve(plant, 1, -1, null, forced) || plant.IsForbidden(pawn)) + { + return null; + } + if (zone_Growing != null && !zone_Growing.allowCut) + { + return null; + } + if (!forced && plant.TryGetComp(out var comp) && comp.PreventCutting) + { + return null; + } + if (!PlantUtility.PawnWillingToCutPlant_Job(plant, pawn)) + { + return null; + } + return JobMaker.MakeJob(JobDefOf.CutPlant, plant); + } + Thing thing2 = PlantUtility.AdjacentSowBlocker(wantedPlantDefLocal, c, map); + if (thing2 != null) + { + if (thing2 is Plant plant2 && pawn.CanReserveAndReach(plant2, PathEndMode.Touch, Danger.Deadly, 1, -1, null, forced) && !plant2.IsForbidden(pawn)) + { + IPlantToGrowSettable plantToGrowSettable = plant2.Position.GetPlantToGrowSettable(plant2.Map); + if (plantToGrowSettable == null || plantToGrowSettable.GetPlantDefToGrow() != plant2.def) + { + Zone_Growing zone_Growing2 = c.GetZone(map) as Zone_Growing; + Zone_Growing zone_Growing3 = plant2.Position.GetZone(map) as Zone_Growing; + if ((zone_Growing2 != null && !zone_Growing2.allowCut) || (zone_Growing3 != null && !zone_Growing3.allowCut && plant2.def == zone_Growing3.GetPlantDefToGrow())) + { + return null; + } + } + if (!forced && thing2.TryGetComp(out CompPlantPreventCutting comp2) && comp2.PreventCutting) + { + return null; + } + if (PlantUtility.TreeMarkedForExtraction(plant2)) + { + return null; + } + if (!PlantUtility.PawnWillingToCutPlant_Job(plant2, pawn)) + { + return null; + } + return JobMaker.MakeJob(JobDefOf.CutPlant, plant2); + } + if (thing2.def.EverHaulable) + { + return HaulAIUtility.HaulAsideJobFor(pawn, thing2); + } + return null; + } + if (wantedPlantDefLocal.plant.sowMinSkill > 0 && ((pawn.skills != null && pawn.skills.GetSkill(SkillDefOf.Plants).Level < wantedPlantDefLocal.plant.sowMinSkill) || (pawn.IsColonyMech && pawn.RaceProps.mechFixedSkillLevel < wantedPlantDefLocal.plant.sowMinSkill))) + { + JobFailReason.Is("UnderAllowedSkill".Translate(wantedPlantDefLocal.plant.sowMinSkill), def.label); + return null; + } + for (int j = 0; j < thingList.Count; j++) + { + Thing thing3 = thingList[j]; + if (!thing3.def.BlocksPlanting()) + { + continue; + } + if (!pawn.CanReserve(thing3, 1, -1, null, forced)) + { + return null; + } + if (thing3.def.category == ThingCategory.Plant) + { + if (thing3.IsForbidden(pawn)) + { + return null; + } + if (zone_Growing != null && !zone_Growing.allowCut) + { + return null; + } + if (!forced && plant.TryGetComp(out var comp3) && comp3.PreventCutting) + { + return null; + } + if (!PlantUtility.PawnWillingToCutPlant_Job(thing3, pawn)) + { + return null; + } + if (PlantUtility.TreeMarkedForExtraction(thing3)) + { + return null; + } + return JobMaker.MakeJob(JobDefOf.CutPlant, thing3); + } + if (thing3.def.EverHaulable) + { + return HaulAIUtility.HaulAsideJobFor(pawn, thing3); + } + return null; + } + if (!wantedPlantDefLocal.CanNowPlantAt(c, map) || !PlantUtility.GrowthSeasonNow(c, map, wantedPlantDefLocal) || !pawn.CanReserve(c, 1, -1, null, forced)) + { + return null; + } + Job job = JobMaker.MakeJob(JobDefOf.Sow, c); + job.plantDefToSow = wantedPlantDefLocal; + return job; + } + } +} \ No newline at end of file From 2d4d171eb92dce968a81ac146f3b77a00c34a0b2 Mon Sep 17 00:00:00 2001 From: "ProjectKoi-Kalo\\Kalo" Date: Wed, 3 Sep 2025 12:45:40 +0800 Subject: [PATCH 11/13] =?UTF-8?q?=E6=9A=82=E5=AD=98=E4=BF=AE=E6=94=B6?= =?UTF-8?q?=E8=8E=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1.6/1.6/Assemblies/ArachnaeSwarm.dll | Bin 49152 -> 49152 bytes Source/ArachnaeSwarm/JobGiver_Grower.cs | 57 +++++++++++++++--------- 2 files changed, 35 insertions(+), 22 deletions(-) diff --git a/1.6/1.6/Assemblies/ArachnaeSwarm.dll b/1.6/1.6/Assemblies/ArachnaeSwarm.dll index d270c71c8cacc052faabecc6135bd825feb8bc3c..bdd2907b92d869dad6aca5028d962491b488d120 100644 GIT binary patch delta 15545 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 V*MIPzs`5dfz2-0fCOWDe{|g_Zw1fZv delta 15600 zcma)j3w%`7wf@@YoH_G;oSDfaA&;5KbMivMJD33BX~ZhXyMhuVDlbC_X~h^OLj**z z8jpx?p@@ni1%ei?TBRx%)KXEbrD`kO`k+-R#a3wr@3;0D1n#}R-~S&n>+Em6_S$Q& zz0cWaLT9Ji*{R-roA!kBg-5#ARQJ<*y?Hr_!{Z$e31s}W;ty2 zcGhY33UXyx?Cc1BG7~;<3aB=BjDALc3hr9{V1y$Xk*F^cNdy4g6=W}`oIZAn2pUR7 z=$Mun5V*qbg73diCOxD!b06(NFq=b6!XVzkuOQB#n#ceMX=G?^Q%zBlITvnRA-iD@ zpAjL4;i$9?UI9fiY|WW$I|Hsl&WdS4XJRHdU2xCCH(ZG<$mfULhTG9UtO6rlu52Di zA{&wl5eaz=Ph}oy5JsANnW>Ti`8kjb>Hq!r-~Z7cRL?}>L^;ha*wKf&y*1Z7R8k@G z?kOFd{3${x=CP^G`7nu`5gvp_5pTt8wQVZq(T#xBkY;F=#bj@fS~?+{VY9Sq?K1pG za|{v}Rrp9<(g$WTb{FZI%uyl^DG!|IS9;eny%ppv&!==I;~HWCHy5G8Tr7aOL%^S`Jhd(3>l8ZLS1Crg`QvjEu?*S~djHh7(ob z%W?f(Lru2#2GlYm%@^TXz_oHl2}O(u>(^YU|7+-Dc4WVOL>;**eP?sX9dk#SMrL|s z_dyvERYM@>F=W`R;H7zAv!|?7^fNyw>m~Y||12vL1I<`@cGe)MBj!+^k(c)KCzWW~ zU~@uwui6^+g}LQY$v5(A76`;+=xtY_5<*cUT3MhP(ZpYo?X2v~jIb>+1O}B}BdR9) znNOA%Brj$MaU+gQ#+z#ajHrz1jF5TC3>6xMmDh6EKg?vP$cS3&{XAZ=QB>(PirV|L z{{o}9GRG*EpemU5XcRZ|N|f2J5SgJ8qomSlUQ&^B$w068{}dW6p@7)3NO6oOE~ zNTj)sNv@hWn~^f3EG=092{Q6bMRt-4s(Bb2mK)`j0a6V;F`S`u@Hl93@s7kbJ!kch zM5?b;+fO4!NS3@V8^JyVlaV0jsrD^an@53F*-LF6jcfau3*~1tb7W;^v7AqKofymH zD10YIf++2mu+cEaRc5lXz|PS|nj6fgDhK!DcKf9uy)fH-j6OA+xb%!FOcj`+zDD2l zXtAcrS?PAR_cudTTqbo@*)z^2Wq>gtt@dkaZ6$G_F)+>D0`9WGaA;J?x=8#D(I6@J zN^Lp!R{91RgDSm9UsYnbxudGwJq|XNQBB99H$SUNh|A1C?{MEAu_rtBPcoe41xn&_ zV8UJ!>Z8zQa9N5Gkdn9p?8WbRXi@X{o+-T_687G8tm6L(E40y{c z!mTKQz^sja3M5V?v4GcRE!I%;RC7X~D=Mae?b0iA-kybOPh>-V@rURlTGTuplFs4K zT*gFc{;~OHpLn1DL;s)W>DRM96X?T!)01Xyb#C?lw~@LAw@1-@l{vRM=l|-e$a^ld z5!@9MtE(lm&7IW+ISaukuF5P~hJk8l^k?|?I0KOscP=zfRA-Id3Wf{!-9->1r;7oX z-FTr5W>;^$TH3Ir`5H7!ELGfae<7vj_`Z1;ZA<&Y69at7T({*Rez(1{w>{Aav#LUS zVm7XoIripj&4>FIi8=W0anP8l_{+@nWiS6wE28Qrd;c>J#z;s{^KoroU=HtB;FisWz|A+B3;XpNcRiXRTZJn#F~@4*23;QNGngJ#h;U;w zT6d&F#<(>K3cZ~h=`!h!$G2N#b%u8>{&~1rZa7}c8WHc`WEzz5CCy@&} zr;kdQTk2~q=%l%RV6(duI^K#(JanbZUV|#U%Ym!jw4Qtt=9Pm6dsrjnsF)ITK;^zc z14Nhk)}W}RxB-feGm(V(?Vw4qW@PBR;(wNtXcaO`ny)bz3?6Ycd-GI`4JwHg_e}cY zomf@Q_A#uo0<1MFQNxPGNZbS;a#1?l$3j6i6GJhc1gam;OmHIu-iA07j>A(^5nBl_ zi$8={S=j%p&{vvMYf8l`Gg*^J-Ud}F->O79u(@kW>uTVR(cDbj&LUFY#`dSkov8y$ z!d3p`=$Y2%5LL0#f#9@awF8fV8p>Ry>DVmGWNy{O9c-<%<7SRKzk(Yvb~z_0nH|i5 zU=1!+0kdRCG~-S*hyDE5zMq&&79(ZgW&^nYhcmv39n& z$2?d&+-E{vkF?&4OQd&%OWju!WuZ9|8O2h5#AFAhEkcCT=_ z0AW%%oEd3-$P~lMvmXX~$P_&8Dhb>{P>r|D#E8yhRGOoP4Ubg*@bp`rue9T-Rx9t- z+HF2KtOA|w9d;?GF?>?)qj1tO3sMa68eB5Vl?>TXS|2l0!*gWk9qXZ`v|r2ejt%D4 z;T0IwA3*Oi_4+a5=jM;<^D;L=M}|1CT5W$EAggyV8fL0KT(b$V`3Vs033vbjyIHTw~F$5LiSPfM+e8fY=2*~6ln(PBHkc3^Aa+_JMw z*B|GdH6bM|_0o23qH(UO|4*gVv*AWu ze{?8`=gl=EbCWU!GOS8Zx*IGE6e{Y0qvCo%er`Ss`MCkBi7vMC1C8jJepyO8=TBy` zpBw8tiRB7@vph5T`qx2F!*wZPD4{C+% zxTeFVAlfl};`rp^gGE44!Fis@hffS2qK**rIMHu=4&~_dm86qBPv!V23uZd4^0WkW zDv*55dmtIo>CWf@&^iy(`(p=iR{hlbyxT?lz58?*o%S(ZmHWI~r!Hlo=At4ew@12J zbF0ejxzgQ8Dc$E|&U$pI(>+f1IlI>@`8q9uRHv2BSMo7cne4xJ#`Er^i(bY>r@;!l zJL7yW=AwI~I2+x#D4~tbbkPF)*i4-+&0w9e+I)2w&B@^j-C40S2??m#a#XoeC_qG68x9U0aJY0#vx z*`hGhY>X1;<0#V(JJW92@nbP=|3kKKmR9qTITy{5q5Mu}^rXhUTrQ=_9%(Qtmst%C z9>MQJY|!RpP7^W_r0&ws!5<rTgl$1>vUKKeVZI>++hC4 z;3H3VwtZB3{&}1^XOaQF+?2IX57I(|yZM70*=TT3ERj#cF3Odud#;GX`dZRYq|Qqi zrB2t#&c4ZHKfjQ3|1M_TMWwRKZ)LVV)7kbpYt{{JUyRJ@v?GvY)nA6$I9S3o-_LZi z9N+Q?x386*-7GnmxS8{TgIzS|Fm04+`~)@RqEm7r>LAsrBZoa-oyB$YupGu;H4(ynJf`c&fn4c(N`kvIeT2e=l zIWL3yDCOs>Dwd!25MgZjTS>v?yCRyjK}|4lF9){ZGCirH5U)^7|*B~<8A8GeAaw5!qktY%Ny@(Nd<4sB0vF8LtY-* z7TSefl97T>fC@0xWt3D%B|LW0D_({g{;{yW_;{!WyR}WC*+2`)%kQor`;Gf}=n-6l z5*;y)hn__{BGIpaw&VVhDbc82$3sUbi((Re3oplj3MHE6IvzSfxk$&!$UY+`sj?p4iQhYNuv|pCojD@!+ z=QAJfBgIUU(b(T``CUeTmretVzCpW>mO_<3q5d0h@UIJw(FC2=k9q}t0Xm`cp#HsY zLgxpdI!!I&Zr+Tt4&DL#1>FP=+Hs~Q@|=F1M!3EbI{n)bM0;)?^8-Gw4XdbNlLBcH z(dl%xgXw<;IEX?iULZNM@(zJ>eG$_?dNbkT&0=o9+dq?S$%@vpbkkN0M$vC*`4d} zjdAiT?d_NWgh5G zg+m#Z*8D@}(d46t2+wx=SJSsKWO3=SWn?EV&O=TItNoCb}W^2-B+(9?m zUx+n+U0T`cUEL$v5ch;Rb z2jF4F1+pHXB+*{_NpuBN-;lx-y(w1UcJQvH>bNxej$fsZ)9AQAj(fvjCE81;^52I{ zixYlU(*0rF)2LITz0?+D^p->^+M03HuhH8@thtwNQBMjRO)3Vs6!0+S*G4A8^q6e4 zQKA$L7oYoWv{RzJv?+fXO7wGyUZX$c9rxSm+p~6N-GrPZXT(m|m9VcAg8vp8t!dPm z5!LO~DbZelr!NZBP4 z?WL6n%}dpI@yEe@gk*VXyhPpfg1tBF?vjYhA&CV>_gfI7zc}EdU6!F^hBpq`2Nt3# zCu@G2M$3XL>^=(MI%PAu8{8&d!`P zF)R6K^rXn38zkFGSO#sglxVYSd?14s4Ui^O>K>y+=y8csR8pqnA>~Dh_R>Bq=1l4w zc+Pny-7C>v$DQtz0x~`$BVX@nSKBjbjfEWJl1OwGeV!Jwn=G0!_?(+8YPta3ZXt|q zN+65YrBRmc5bPe4XfN?3WYLRh#M6~U1MrRB*#(nLmq^5Ao%}}0rUiJdz_EQ}d(oal z3+gQ74__6?qm>d_vlpeiEsXgX}lv)LNi94GfYsEM0*{_>~{qcbc00q(SN81 z{0X{OqSt75bS-3AquFjRJrs&N%W1{9b6%?GZi()rQzefEs*?2i4{%eUH;ugPoN6Cx zmWa2etypijNMwzv58a(cyct!~?=4MwErZe5X;g+Uq^s%BkIwn5rjI2`IegKbfoe)t zUe3alnz(N}@;BuY6l6Nm6zJ>Ei8U$h^x zooRGs$!`Pw=&SLv2YLqEdVhL&qJ{pD`F>yk{W&S2wWSWGC6igWmrV6&U@)yoBfbL+ zrf;XP%&G)Do=-g=RY_#sn+DUUG}3cF^w!X3iL5)-5ZZB`-Np3lsmZf$1fF|8mck?A zA>21=DK?E|M})H^4z!5hM59X9?v&_=^B)B#MJ=thkoY9VvWL^MR}1?9J)V}` z*z1cxEuBoG5ji6v`}cIdrKZPJOWKdQ3u}b66p*Nk9>s%8E#35kOaR?0kriki9ZDk( zw2t=8U@umnb@X2n9dRx#{5nuaf3=Vdw2uA`g#M2>Inp}%E-n0LuTxMRHv?z_Z`=L~LwX|~%DpZW2RAC|6;ZW+EmT`YWsg_X^UF_)PfNC7umiEGjYTX;2!yLE{4>XmlF6fkx8A^Xx{^jI=C686Ox$3(k{` zrnacW|LRZakV zJ#!jBGoZ!o2S9UZyKL{Ktyt-Mh*!9Wjuuv+t;Lyh6x9=^#+)H^5OgG7?6b6pIZ3?X zXV71Y8x?kX0`xknkxnN_x|%+5E~M#dWv@2W?W&x1YLWaF>WZe&=F`Su{Dr_>Gz$Eu zsZqTuz70Fzs+@hG4e<(^t8ULcKrL#8>ku^gZn#vvBj6Ru!#FkvMM^Z=;&|8bWh7Iq zR;R`C#8S1Smsh07?mPs3Pq;wDM!?Q1-}y6 zT3!4qC9aLN&sNH`&)f@?YH*e+HE4G#hvm_xUb`c>N@)OH2M*_~M)3KtMvT)oD`n!f z*j8nNw#55Oa9BD)yx@OVY1FbZ4=d9pXRanQrzICfKT}#XTfrB~QjJ|S3Vw86K=GnO z)S_{sri-z@a&@{`k=69DpBp2_+o0+BS8AKJxfxf2pOG<5dqBJ#o&$Q6b;OdQMcTda zz%}u-|91G{fo<2W3_pYR>!IWu>KZy+TtU0FH*>aY-P$A@)BIj9Xd6UBI8IBoN!ovE zd$jqH-)IYD5REc{DK#haL#>5p8p9wC$MIS$wIjQSB_91xI%0 ze6)WRZ?>I)yLMYjOmsYGJ0kc5XV~rtZnT{eA4OlbJuXLlO#6xZPmpp22xU?9JDX7W z$R-p%stLtb;MJ4Wwm)k@z1nsv9@L%69Yxu?Q211PLWo{P`YEwHPzDa4->Pj{nRR-N zZ5z&OJidwGvuh(wxuCLT`xw2D)1=qizSQRFWlG=Bd|R0^ER@ubX;;O&;qx|QlYUGz z`M2oRN##CcyS_!vic{fnG}tDW{aT-Z(fkH{?x4~3MA1ns$UP3PXi%@V9fOONzOVEe zAEi}*jJ%*88mIUQ<(iT~yJ7tlk#HLW0eWxr&rwsInNb(e^>a z8q+BIDe+VP1p8c!a=QJ9;B#1wG7d>QBG_GxG!qIRo`k}OrU`TxV|-d`?=bHThq&^D^EK{ujmT?A3Dr0zXf56mj_JyA$5h8|+x6j@j{Ua5+HA*Lavb$Cpv~G>(Hk9e(GJi- z+ZClt(OwctI*!o|ft8M9${gDrpqoLLO8rAJuOEWqbbnYLe~wYF{8t@EY*&=+a~zTZ z{aFTd*!Fzrh-0-9##gR?mR)`*rC&(tF=a~ll;aD@pG)s&WjL3r>+Cts4GN!WzNXui z!JuC%wcz}&sKF`p)7e)zzmw&et&eujOFHKYp}*nm7Mn7E>x}EWat}E*!5fQ5@O@#o z@y{%ss4T=*vs-zmq`zx{ z++_ABrT#r>Ft!d0)2DB0%f)>gP)bfr*$2B1Y#v9abeMj^L_iDuzIz-24vVrZECPf#zAJFq5<-10!`-H8@ ze=}^~4J-rwOKBIp4UFA}j^8ht=_nJMOUl(fR>kNayVtun>&aj1PvTPH{Scez0Q1%1B3rGC|J+lpWh65;d-m%cc|9Ix?eg?b zJNl@&Td$>j-mTP2qi=fZ)m<55w0d=Gyj(TZ2Ym-Ur>HI-_Fjg$-$w`anf6}ZThK1> zrbGqam>cR4XQj7ZeGKoF>(y&<>#A29virO0)t}0CKeSuWSF+Z7SYMSh60|OUIp}HI zRBwwonmN-eRKEMw%3>TP^D#=6TejN6_d0EI*=Fw%^+4n;FUFDa4)pm5D)5xRR!r+< zyM_3OS+Dx=R<>5~eXm~S2bLrHZQ7?v?`rxe^p*D*g20<{ah1*O!~UNW^i6_`eRM*P zXi;$f?mgf3x9l-K>g^4VxOy$?Ey4*L{5TzvxC z0gi&_yia@%x>tMvdcXMCSBfv>CWL#Fn>HK0@zA~lG=~m?7SbP#kyJq+`$ppV@?+n% zvVCp3-H)n58~G&ddnJi4%8G&?OYz4v4y@t$!f1Xlrm*oWWhDI~xL&reRi6Q;OJ%cb zwH}%j>H_^!Xrzrbua&e*(v6b7Dygcov{2HKl3pumm!uo@B#U2_;J+lDWoJ$dXSUCS zvjW_n6&MG)UeZ@2jTy`tF6k^uJ0)E&X)GwElCGEZ6-hsqltL_xNjf|i!FFFl$mecyBw1ZWNiIi$yl*5|IP?6OjjclZb-eZ0?^oET_@=N9U)`qwc@B z2YP0C_IQ5gz0a%oGJOMmb!L2i=-T5rmEv&s!_NWVNqj%Z2QZx;Dk>Rk2`<8c^nd=~ zJ9+%@SK!h>if=9D%Z2_@=DPW%p*X&CF2#YUlm_545T8NjZ{}ZBI$w#n+ws|`JZtlc zt?n0;iJm=Zzl*C=?eU%#6FnEJ?dBB=9x|sa^qYTP@OEI#+#BbNT+rOw)VgHS4fu<# zo@W=nVh^9sxw5J8+8Y{YFX)-y_NmRB)xNUulE&6cn`d8fqcotg%}biC)_J~q{?fip z?RhS_+U1$FxbY`Vi(8wBc2<8y8G% zUOZoVyRxaJt><@lFVvLIl-aSacTd~e_kDp^pZ)gTZM`2J^UK=L-+6Du<$cW=k1r9M z&4Z6u_kKhK1GbnVadJ%Wqol2Re?=#7d>?Kb;t8WGxKi&3z1zl{{1 zFPGb?{pN~ICE9)?^&9gSoAPGEXPflEmkA=6I(YVCEES%N3y9H~^7(?P_kyXz3Vyiz zVCtjvC73!AOnqX3BOW7lEF;+YkpiyS`-wdKrR8N$6!}l-q#}-7Jtl;aI&CJOh=~2> zeNU8>czsUNeGYc3;QwbC%d>sPaxZ@IjEPn@E}-VoC+bC&S@dL~K0woh%j?V^Jy|c- zns+_fN1QTWc``2QdyYOiMuWFtmv?gZ~YtD8bG>4mN8sH*CJtSPG~p z#_|qDal}M$`3m#9%@y`Ljpg0JyDpZ%b6XXWqUgUR$Nu z5K*cM(_t(>%mE#76M|cdhS9khe-`5K*zC|4z!SOr7-tI?D5l!X&$iUMzH|qKK>C;e z!>oFCKoa9HI-d(p<^ir%6rSbfr!eEf=WxeV_S*)z;>s{mlNG6{>LJ2MIP5Ul2YVUH zX@l%W7wW<2vKd`Y9K}G3n_sf1z zKb;R?Ak*dVOtX4xMs+#_O@{`C)MYqhvXG%-x2k8lR$n?rfN>E~hi5 zD%N8oJ#ellJTa+-+)w9zhgCwsHWyYO*n0x`BxkY(|IGz{gOe@2 zFgaw1n`M@44o7f#mE~xzrC`~2vOOQ6%-epEb@7j6g?k;U9vq;>;2#OTufAYqJeSh&Wf^R~GCFpV2iF&U14$ zs5sK@@0+_?)C91_6GyB)e!-8OFw3Ge(z8d>$s zRVfWVH2=P1x!%EReT8{*&$O)61hhNfa>1InQ)HYSr5-Uq>DkiHg>49R*A`4oFk+a6 zv+J9u<~AN~s>#8wWY2 YUAuaG|M4$X=^WH!{OWI_yN~_90h7sOIsgCw diff --git a/Source/ArachnaeSwarm/JobGiver_Grower.cs b/Source/ArachnaeSwarm/JobGiver_Grower.cs index 29e70f5..9f22bb2 100644 --- a/Source/ArachnaeSwarm/JobGiver_Grower.cs +++ b/Source/ArachnaeSwarm/JobGiver_Grower.cs @@ -9,7 +9,7 @@ namespace ArachnaeSwarm { private WorkGiver_GrowerHarvest _workGiverHarvest; private WorkGiver_ArachnaeSow _workGiverArachnaeSow; // 修改为我们的新 WorkGiver - + protected override Job TryGiveJob(Pawn pawn) { // 懒加载 WorkGiver 实例,确保 DefOf 已被初始化 @@ -17,22 +17,21 @@ namespace ArachnaeSwarm { _workGiverHarvest = WorkGiverDefOf.GrowerHarvest.Worker as WorkGiver_GrowerHarvest; _workGiverArachnaeSow = new WorkGiver_ArachnaeSow(); // 直接实例化我们的 WorkGiver - + if (_workGiverHarvest == null || _workGiverArachnaeSow == null) { Log.ErrorOnce("JobGiver_Grower: Failed to get WorkGiver_GrowerHarvest or WorkGiver_ArachnaeSow. DefOfs might not be initialized or WorkGiver_ArachnaeSow could not be instantiated.", 123457); return null; } } - - // 1. 优先收获 - Thing bestHarvestable = FindClosestThing(pawn, _workGiverHarvest); - if (bestHarvestable != null) + + // 1. 优先收获 - 使用基于 Cell 的新方法 + IntVec3 bestHarvestCell = FindClosestHarvestableCell(pawn); + if (bestHarvestCell.IsValid) { - // 调用 JobOnCell 以利用 WorkGiver_GrowerHarvest 的多目标打包逻辑 - return _workGiverHarvest.JobOnCell(pawn, bestHarvestable.Position); + return _workGiverHarvest.JobOnCell(pawn, bestHarvestCell); } - + // 2. 其次播种 (IntVec3 bestSowCell, ThingDef plantToSow) = FindClosestSowableCellAndPlant(pawn, _workGiverArachnaeSow); // 使用我们的新 WorkGiver if (bestSowCell.IsValid && plantToSow != null) @@ -43,20 +42,35 @@ namespace ArachnaeSwarm return null; } - - private Thing FindClosestThing(Pawn pawn, WorkGiver_Scanner scanner) + + private IntVec3 FindClosestHarvestableCell(Pawn pawn) { - return GenClosest.ClosestThingReachable( - pawn.Position, - pawn.Map, - scanner.PotentialWorkThingRequest, - PathEndMode.Touch, - TraverseParms.For(pawn), - 9999f, - t => scanner.HasJobOnThing(pawn, t) - ); - } + IntVec3 bestCell = IntVec3.Invalid; + float bestDistSq = float.MaxValue; + foreach (Zone zone in pawn.Map.zoneManager.AllZones) + { + if (zone is Zone_Growing growingZone) + { + // 遍历区域中的所有单元格 + foreach (IntVec3 cell in growingZone.Cells) + { + float distSq = pawn.Position.DistanceToSquared(cell); + if (distSq < bestDistSq && pawn.CanReach(cell, PathEndMode.ClosestTouch, Danger.Deadly)) + { + // 使用 HasJobOnCell 来判断是否可以收获 + if (_workGiverHarvest.HasJobOnCell(pawn, cell)) + { + bestDistSq = distSq; + bestCell = cell; + } + } + } + } + } + return bestCell; + } + private (IntVec3, ThingDef) FindClosestSowableCellAndPlant(Pawn pawn, WorkGiver_ArachnaeSow scanner) // 修改为我们的新 WorkGiver 类型 { IntVec3 bestCell = IntVec3.Invalid; @@ -97,7 +111,6 @@ namespace ArachnaeSwarm public static class WorkGiverDefOf { public static WorkGiverDef GrowerHarvest; - public static WorkGiverDef GrowerSow; static WorkGiverDefOf() { From 9a8b90be827c6fb43227ff9ede116f314232985d Mon Sep 17 00:00:00 2001 From: "ProjectKoi-Kalo\\Kalo" Date: Wed, 3 Sep 2025 12:50:35 +0800 Subject: [PATCH 12/13] =?UTF-8?q?=E4=BF=AE=E5=89=B2=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1.6/1.6/Assemblies/ArachnaeSwarm.dll | Bin 49152 -> 49664 bytes Source/ArachnaeSwarm/JobGiver_Grower.cs | 63 ++++++++++++++---------- 2 files changed, 38 insertions(+), 25 deletions(-) diff --git a/1.6/1.6/Assemblies/ArachnaeSwarm.dll b/1.6/1.6/Assemblies/ArachnaeSwarm.dll index bdd2907b92d869dad6aca5028d962491b488d120..a96127847152940b932f96111a83023f09ecd896 100644 GIT binary patch delta 18565 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 P7}RO}@}HukkNy7vp8WVk delta 18135 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 z t != null && !t.IsForbidden(pawn) && scanner.HasJobOnThing(pawn, t) && pawn.CanReach(t, PathEndMode.Touch, Danger.Deadly) + ); + } + private IntVec3 FindClosestHarvestableCell(Pawn pawn) { IntVec3 bestCell = IntVec3.Invalid; @@ -52,13 +69,11 @@ namespace ArachnaeSwarm { if (zone is Zone_Growing growingZone) { - // 遍历区域中的所有单元格 foreach (IntVec3 cell in growingZone.Cells) { float distSq = pawn.Position.DistanceToSquared(cell); if (distSq < bestDistSq && pawn.CanReach(cell, PathEndMode.ClosestTouch, Danger.Deadly)) { - // 使用 HasJobOnCell 来判断是否可以收获 if (_workGiverHarvest.HasJobOnCell(pawn, cell)) { bestDistSq = distSq; @@ -70,8 +85,8 @@ namespace ArachnaeSwarm } return bestCell; } - - private (IntVec3, ThingDef) FindClosestSowableCellAndPlant(Pawn pawn, WorkGiver_ArachnaeSow scanner) // 修改为我们的新 WorkGiver 类型 + + private (IntVec3, ThingDef) FindClosestSowableCellAndPlant(Pawn pawn, WorkGiver_ArachnaeSow scanner) { IntVec3 bestCell = IntVec3.Invalid; ThingDef bestPlantToSow = null; @@ -81,7 +96,7 @@ namespace ArachnaeSwarm { if (zone is Zone_Growing growingZone) { - ThingDef wantedPlant = growingZone.GetPlantDefToGrow(); + ThingDef wantedPlant = growingZone.GetPlantDefToGrow(); if (wantedPlant == null) continue; foreach (IntVec3 cell in growingZone.Cells) @@ -89,13 +104,11 @@ namespace ArachnaeSwarm float distSq = pawn.Position.DistanceToSquared(cell); if (distSq < bestDistSq && pawn.CanReach(cell, PathEndMode.ClosestTouch, Danger.Deadly)) { - // 这里不再需要 WorkGiver_Grower.wantedPlantDef 的复杂处理 - // 因为 WorkGiver_ArachnaeSow.JobOnCell 会直接使用它计算出的 wantedPlantDef - if (scanner.HasJobOnCell(pawn, cell)) // HasJobOnCell 内部会根据 wantedPlant 计算 + if (scanner.HasJobOnCell(pawn, cell)) { bestDistSq = distSq; bestCell = cell; - bestPlantToSow = wantedPlant; // 确保返回正确的 plantDef + bestPlantToSow = wantedPlant; } } } @@ -106,12 +119,12 @@ namespace ArachnaeSwarm } } -// 确保 WorkGiverDefOf 被正确初始化,放在命名空间顶层 [DefOf] public static class WorkGiverDefOf { public static WorkGiverDef GrowerHarvest; - + public static WorkGiverDef PlantsCut; + static WorkGiverDefOf() { DefOfHelper.EnsureInitializedInCtor(typeof(WorkGiverDefOf)); From a98b4d2612c0d792277588c1764f5119b84a35d4 Mon Sep 17 00:00:00 2001 From: "ProjectKoi-Kalo\\Kalo" Date: Wed, 3 Sep 2025 13:26:48 +0800 Subject: [PATCH 13/13] =?UTF-8?q?=E4=BF=AE=E5=8F=8D=E5=A4=8D=E5=89=B2?= =?UTF-8?q?=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1.6/1.6/Assemblies/ArachnaeSwarm.dll | Bin 49664 -> 49664 bytes Source/ArachnaeSwarm/JobGiver_Grower.cs | 96 +++++++++----- Source/ArachnaeSwarm/WorkGiver_ArachnaeSow.cs | 125 ++++++++++-------- 3 files changed, 128 insertions(+), 93 deletions(-) diff --git a/1.6/1.6/Assemblies/ArachnaeSwarm.dll b/1.6/1.6/Assemblies/ArachnaeSwarm.dll index a96127847152940b932f96111a83023f09ecd896..4060780bf00819fbdcc334fdc21206627b7f81c7 100644 GIT binary patch literal 49664 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 S@3Ve;{}+YuOFaKi68JCGIkwOM diff --git a/Source/ArachnaeSwarm/JobGiver_Grower.cs b/Source/ArachnaeSwarm/JobGiver_Grower.cs index babf782..0e42089 100644 --- a/Source/ArachnaeSwarm/JobGiver_Grower.cs +++ b/Source/ArachnaeSwarm/JobGiver_Grower.cs @@ -13,13 +13,14 @@ namespace ArachnaeSwarm protected override Job TryGiveJob(Pawn pawn) { + // 懒加载 WorkGiver 实例,确保 DefOf 已被初始化 if (_workGiverHarvest == null) { - _workGiverHarvest = WorkGiverDefOf.GrowerHarvest.Worker as WorkGiver_GrowerHarvest; - _workGiverPlantsCut = WorkGiverDefOf.PlantsCut.Worker as WorkGiver_Scanner; + _workGiverHarvest = DefDatabase.GetNamed("GrowerHarvest").Worker as WorkGiver_GrowerHarvest; + _workGiverPlantsCut = DefDatabase.GetNamed("PlantsCut").Worker as WorkGiver_Scanner; _workGiverArachnaeSow = new WorkGiver_ArachnaeSow(); - if (_workGiverHarvest == null || _workGiverPlantsCut == null) + if (_workGiverHarvest == null || _workGiverPlantsCut == null || _workGiverArachnaeSow == null) { Log.ErrorOnce("JobGiver_Grower: Failed to get a required WorkGiver. DefOfs might not be initialized.", 123458); return null; @@ -30,21 +31,29 @@ namespace ArachnaeSwarm IntVec3 bestHarvestCell = FindClosestHarvestableCell(pawn); if (bestHarvestCell.IsValid) { - return _workGiverHarvest.JobOnCell(pawn, bestHarvestCell); + Job harvestJob = _workGiverHarvest.JobOnCell(pawn, bestHarvestCell); + if (harvestJob != null) + { + return harvestJob; + } } // 2. 其次处理手动指定的砍伐/收获任务 Thing bestCuttable = FindClosestWorkableThing(pawn, _workGiverPlantsCut); if (bestCuttable != null) { - return _workGiverPlantsCut.JobOnThing(pawn, bestCuttable); + Job cutJob = _workGiverPlantsCut.JobOnThing(pawn, bestCuttable); + if (cutJob != null) + { + return cutJob; + } } - // 3. 最后播种(自动,并清理障碍) - (IntVec3 bestSowCell, ThingDef plantToSow) = FindClosestSowableCellAndPlant(pawn, _workGiverArachnaeSow); - if (bestSowCell.IsValid && plantToSow != null) + // 3. 最后处理播种或清理障碍(由 WorkGiver_ArachnaeSow 处理) + Job sowOrClearJob = FindClosestSowableOrClearJob(pawn, _workGiverArachnaeSow); + if (sowOrClearJob != null) { - return _workGiverArachnaeSow.JobOnCell(pawn, bestSowCell); + return sowOrClearJob; } return null; @@ -53,9 +62,9 @@ namespace ArachnaeSwarm private Thing FindClosestWorkableThing(Pawn pawn, WorkGiver_Scanner scanner) { return GenClosest.ClosestThing_Global( - pawn.Position, - scanner.PotentialWorkThingsGlobal(pawn), - maxDistance: 9999f, + pawn.Position, + scanner.PotentialWorkThingsGlobal(pawn), + maxDistance: 9999f, validator: t => t != null && !t.IsForbidden(pawn) && scanner.HasJobOnThing(pawn, t) && pawn.CanReach(t, PathEndMode.Touch, Danger.Deadly) ); } @@ -86,47 +95,64 @@ namespace ArachnaeSwarm return bestCell; } - private (IntVec3, ThingDef) FindClosestSowableCellAndPlant(Pawn pawn, WorkGiver_ArachnaeSow scanner) + // 修改后的方法:寻找最近的播种或清理 Job + private Job FindClosestSowableOrClearJob(Pawn pawn, WorkGiver_ArachnaeSow scanner) { - IntVec3 bestCell = IntVec3.Invalid; - ThingDef bestPlantToSow = null; - float bestDistSq = float.MaxValue; + IntVec3 bestClearCell = IntVec3.Invalid; + Job bestClearJob = null; + float bestClearDistSq = float.MaxValue; + + IntVec3 bestSowCell = IntVec3.Invalid; + Job bestSowJob = null; + float bestSowDistSq = float.MaxValue; foreach (Zone zone in pawn.Map.zoneManager.AllZones) { if (zone is Zone_Growing growingZone) { - ThingDef wantedPlant = growingZone.GetPlantDefToGrow(); + ThingDef wantedPlant = growingZone.GetPlantDefToGrow(); if (wantedPlant == null) continue; foreach (IntVec3 cell in growingZone.Cells) { float distSq = pawn.Position.DistanceToSquared(cell); - if (distSq < bestDistSq && pawn.CanReach(cell, PathEndMode.ClosestTouch, Danger.Deadly)) + if (pawn.CanReach(cell, PathEndMode.ClosestTouch, Danger.Deadly)) { - if (scanner.HasJobOnCell(pawn, cell)) + Job potentialJob = scanner.JobOnCell(pawn, cell); + if (potentialJob != null) { - bestDistSq = distSq; - bestCell = cell; - bestPlantToSow = wantedPlant; + if (potentialJob.def == JobDefOf.CutPlant || potentialJob.def == JobDefOf.HaulToContainer || potentialJob.def == JobDefOf.HaulToCell) + { + if (distSq < bestClearDistSq) + { + bestClearDistSq = distSq; + bestClearJob = potentialJob; + } + } + else if (potentialJob.def == JobDefOf.Sow) + { + if (distSq < bestSowDistSq) + { + bestSowDistSq = distSq; + bestSowJob = potentialJob; + } + } } } } } } - return (bestCell, bestPlantToSow); + // 优先返回清理 Job + if (bestClearJob != null) + { + return bestClearJob; + } + // 其次返回播种 Job + if (bestSowJob != null) + { + return bestSowJob; + } + return null; } } -} - -[DefOf] -public static class WorkGiverDefOf -{ - public static WorkGiverDef GrowerHarvest; - public static WorkGiverDef PlantsCut; - - static WorkGiverDefOf() - { - DefOfHelper.EnsureInitializedInCtor(typeof(WorkGiverDefOf)); - } } \ No newline at end of file diff --git a/Source/ArachnaeSwarm/WorkGiver_ArachnaeSow.cs b/Source/ArachnaeSwarm/WorkGiver_ArachnaeSow.cs index ca6c4a3..6ff01b2 100644 --- a/Source/ArachnaeSwarm/WorkGiver_ArachnaeSow.cs +++ b/Source/ArachnaeSwarm/WorkGiver_ArachnaeSow.cs @@ -52,8 +52,8 @@ namespace ArachnaeSwarm { return null; } - - // 直接计算 wantedPlantDef,不再依赖静态字段 + + // 直接计算 wantedPlantDef ThingDef wantedPlantDefLocal = WorkGiver_Grower.CalculateWantedPlantDef(c, map); if (wantedPlantDefLocal == null) { @@ -105,56 +105,65 @@ namespace ArachnaeSwarm return null; } Plant plant = c.GetPlant(map); - if (plant != null && plant.def.plant.blockAdjacentSow) + if (plant != null) // 只要地块上有植物 { - if (!pawn.CanReserve(plant, 1, -1, null, forced) || plant.IsForbidden(pawn)) + // 如果地块上的植物不是我们想要种植的植物,就割除 + if (plant.def != wantedPlantDefLocal) + { + if (!pawn.CanReserve(plant, 1, -1, null, forced) || plant.IsForbidden(pawn)) + { + return null; + } + if (zone_Growing != null && !zone_Growing.allowCut) + { + return null; + } + if (!forced && plant.TryGetComp(out var comp) && comp.PreventCutting) + { + return null; + } + return JobMaker.MakeJob(JobDefOf.CutPlant, plant); + } + // 如果地块上的植物是我们想要种植的植物,并且它阻碍了相邻播种,则不割除 + // 因为它已经是我们想要种植的植物了 + if (plant.def.plant.blockAdjacentSow) { return null; } - if (zone_Growing != null && !zone_Growing.allowCut) - { - return null; - } - if (!forced && plant.TryGetComp(out var comp) && comp.PreventCutting) - { - return null; - } - if (!PlantUtility.PawnWillingToCutPlant_Job(plant, pawn)) - { - return null; - } - return JobMaker.MakeJob(JobDefOf.CutPlant, plant); } Thing thing2 = PlantUtility.AdjacentSowBlocker(wantedPlantDefLocal, c, map); if (thing2 != null) { - if (thing2 is Plant plant2 && pawn.CanReserveAndReach(plant2, PathEndMode.Touch, Danger.Deadly, 1, -1, null, forced) && !plant2.IsForbidden(pawn)) + if (thing2 is Plant plant2) { - IPlantToGrowSettable plantToGrowSettable = plant2.Position.GetPlantToGrowSettable(plant2.Map); - if (plantToGrowSettable == null || plantToGrowSettable.GetPlantDefToGrow() != plant2.def) + // 如果阻碍播种的是植物,并且不是我们想要种植的植物,就割除 + if (plant2.def != wantedPlantDefLocal) { - Zone_Growing zone_Growing2 = c.GetZone(map) as Zone_Growing; - Zone_Growing zone_Growing3 = plant2.Position.GetZone(map) as Zone_Growing; - if ((zone_Growing2 != null && !zone_Growing2.allowCut) || (zone_Growing3 != null && !zone_Growing3.allowCut && plant2.def == zone_Growing3.GetPlantDefToGrow())) + if (pawn.CanReserveAndReach(plant2, PathEndMode.Touch, Danger.Deadly, 1, -1, null, forced) && !plant2.IsForbidden(pawn)) { - return null; + IPlantToGrowSettable plantToGrowSettable = plant2.Position.GetPlantToGrowSettable(plant2.Map); + if (plantToGrowSettable == null || plantToGrowSettable.GetPlantDefToGrow() != plant2.def) + { + Zone_Growing zone_Growing2 = c.GetZone(map) as Zone_Growing; + Zone_Growing zone_Growing3 = c.GetZone(map) as Zone_Growing; + if ((zone_Growing2 != null && !zone_Growing2.allowCut) || (zone_Growing3 != null && !zone_Growing3.allowCut && plant2.def == zone_Growing3.GetPlantDefToGrow())) + { + return null; + } + } + if (!forced && thing2.TryGetComp(out CompPlantPreventCutting comp2) && comp2.PreventCutting) + { + return null; + } + if (PlantUtility.TreeMarkedForExtraction(plant2)) + { + return null; + } + return JobMaker.MakeJob(JobDefOf.CutPlant, plant2); } } - if (!forced && thing2.TryGetComp(out CompPlantPreventCutting comp2) && comp2.PreventCutting) - { - return null; - } - if (PlantUtility.TreeMarkedForExtraction(plant2)) - { - return null; - } - if (!PlantUtility.PawnWillingToCutPlant_Job(plant2, pawn)) - { - return null; - } - return JobMaker.MakeJob(JobDefOf.CutPlant, plant2); } - if (thing2.def.EverHaulable) + else if (thing2.def.EverHaulable) { return HaulAIUtility.HaulAsideJobFor(pawn, thing2); } @@ -178,29 +187,29 @@ namespace ArachnaeSwarm } if (thing3.def.category == ThingCategory.Plant) { - if (thing3.IsForbidden(pawn)) + // 如果阻碍播种的是植物,并且不是我们想要种植的植物,就割除 + if (thing3.def != wantedPlantDefLocal) { - return null; + if (thing3.IsForbidden(pawn)) + { + return null; + } + if (zone_Growing != null && !zone_Growing.allowCut) + { + return null; + } + if (!forced && thing3.TryGetComp(out var comp3) && comp3.PreventCutting) + { + return null; + } + if (PlantUtility.TreeMarkedForExtraction(thing3)) + { + return null; + } + return JobMaker.MakeJob(JobDefOf.CutPlant, thing3); } - if (zone_Growing != null && !zone_Growing.allowCut) - { - return null; - } - if (!forced && plant.TryGetComp(out var comp3) && comp3.PreventCutting) - { - return null; - } - if (!PlantUtility.PawnWillingToCutPlant_Job(thing3, pawn)) - { - return null; - } - if (PlantUtility.TreeMarkedForExtraction(thing3)) - { - return null; - } - return JobMaker.MakeJob(JobDefOf.CutPlant, thing3); } - if (thing3.def.EverHaulable) + else if (thing3.def.EverHaulable) { return HaulAIUtility.HaulAsideJobFor(pawn, thing3); }