From 9acd5aac1eab8a2f02aa2c9b3ac179bdb77c237d Mon Sep 17 00:00:00 2001 From: "ProjectKoi-Kalo\\Kalo" Date: Tue, 2 Sep 2025 16:36:03 +0800 Subject: [PATCH] =?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