From 3a3c30087a5188970fbd6e13dd8d172c100aabcb Mon Sep 17 00:00:00 2001 From: "ProjectKoi-Kalo\\Kalo" Date: Fri, 5 Sep 2025 13:35:41 +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 70656 -> 73728 bytes .../Defs/HediffDefs/ARA_Hediffs_HiveMind.xml | 24 +++-- 1.6/1.6/Defs/PawnKindDef/ARA_PawnKinds.xml | 50 ++++++++--- .../Defs/ThingDef_Races/ARA_RaceBaseSwarm.xml | 23 +++++ 1.6/1.6/Defs/ThinkTreeDefs/ARA_ThinkTrees.xml | 7 ++ 1.6/1.6/Defs/TrainableDefs/ARA_Cleaning.xml | 22 +++++ .../JobClean/ARA_TrainableDefOf_Cleaning.cs | 16 ++++ .../JobClean/JobGiver_Cleaner.cs | 50 +++++++++++ ...e_ConditionalAnimalShouldDoCleaningWork.cs | 21 +++++ .../JobClean/WorkGiver_ArachnaeClean.cs | 82 ++++++++++++++++++ Source/ArachnaeSwarm/ArachnaeSwarm.csproj | 6 ++ 11 files changed, 284 insertions(+), 17 deletions(-) create mode 100644 1.6/1.6/Defs/TrainableDefs/ARA_Cleaning.xml create mode 100644 Source/ArachnaeSwarm/ARA_TrainingWork/JobClean/ARA_TrainableDefOf_Cleaning.cs create mode 100644 Source/ArachnaeSwarm/ARA_TrainingWork/JobClean/JobGiver_Cleaner.cs create mode 100644 Source/ArachnaeSwarm/ARA_TrainingWork/JobClean/ThinkNode_ConditionalAnimalShouldDoCleaningWork.cs create mode 100644 Source/ArachnaeSwarm/ARA_TrainingWork/JobClean/WorkGiver_ArachnaeClean.cs diff --git a/1.6/1.6/Assemblies/ArachnaeSwarm.dll b/1.6/1.6/Assemblies/ArachnaeSwarm.dll index 83a59e0f667e1df40f9d162d7bc594059ab954c2..e6f889496fe31a2e860f541242499072b0d4672a 100644 GIT binary patch delta 23999 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 UXo-d5ze@MG-0B;(p~(7w0Qx{C?f?J) delta 21138 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 BA$b4* diff --git a/1.6/1.6/Defs/HediffDefs/ARA_Hediffs_HiveMind.xml b/1.6/1.6/Defs/HediffDefs/ARA_Hediffs_HiveMind.xml index 81ca1f7..f6af277 100644 --- a/1.6/1.6/Defs/HediffDefs/ARA_Hediffs_HiveMind.xml +++ b/1.6/1.6/Defs/HediffDefs/ARA_Hediffs_HiveMind.xml @@ -2,12 +2,12 @@ ARA_HiveMindMaster - + 虫群意识的中心节点, 作为主脑统御整个阿拉克涅虫群. ArachnaeSwarm.Hediff_HiveMindMaster (0.8, 0.3, 0.8) false - true + false 100
  • @@ -31,12 +31,12 @@ ARA_HiveMindDrone - - 阿拉克涅工蜂通过心灵与阿拉克涅女皇种相链接。如果女皇死亡,工蜂也将停止生命活动。 + + 阿拉克涅督虫通过心灵与阿拉克涅女皇种相链接。如果女皇死亡,督虫也将停止生命活动。 ArachnaeSwarm.Hediff_HiveMindDrone (0.6, 0.4, 0.8) false - true + false
  • 6400 @@ -65,4 +65,18 @@
  • + + + ARA_HiveMindWorker + + 阿拉克涅辅虫通过心灵与阿拉克涅督虫种相链接。如果督虫死亡,辅虫也将停止生命活动。 + HediffWithComps + (0.6, 0.4, 0.8) + false + false + + + + +
    \ No newline at end of file diff --git a/1.6/1.6/Defs/PawnKindDef/ARA_PawnKinds.xml b/1.6/1.6/Defs/PawnKindDef/ARA_PawnKinds.xml index 07f9872..1bf30e4 100644 --- a/1.6/1.6/Defs/PawnKindDef/ARA_PawnKinds.xml +++ b/1.6/1.6/Defs/PawnKindDef/ARA_PawnKinds.xml @@ -40,12 +40,12 @@ - -
  • - ARA_Creep - 2.0 -
  • -
    + +
  • + ARA_Creep + 2.0 +
  • +
    ARA_ArachnaeQueen @@ -101,12 +101,12 @@ - -
  • - ARA_Creep - 2.0 -
  • -
    + +
  • + ARA_Creep + 2.0 +
  • +
    ArachnaeNode_Race_Myrmecocystus @@ -182,6 +182,9 @@ 8.0 + +
  • ARA_HiveMindWorker
  • +
    ArachnaeBase_Race_Slavey @@ -271,4 +274,27 @@ + + + ArachnaeBase_Race_Maid + + ArachnaeBase_Race_Maid + +
  • + + Things/Pawn/Animal/Spelopede/Spelopede + 1 + (156,148,125) + + (0.4, 0.5, 0.37) + (0,0,-0.15) + + + + Things/Pawn/Animal/Spelopede/Dessicated_Spelopede + 1 + +
  • +
    +
    \ No newline at end of file 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 130db61..dd9ee0e 100644 --- a/1.6/1.6/Defs/ThingDef_Races/ARA_RaceBaseSwarm.xml +++ b/1.6/1.6/Defs/ThingDef_Races/ARA_RaceBaseSwarm.xml @@ -183,4 +183,27 @@ + + + ArachnaeBase_Race_Maid + + 阿拉克涅辅虫之一,智力低下,可以执行清洁工作,注定在度过短暂的时光后死亡。 + + +
  • ARA_Cleaning
  • +
    +
    + +
  • + +
  • + ARA_Cleaning + true + true +
  • + + true + +
    +
    \ No newline at end of file diff --git a/1.6/1.6/Defs/ThinkTreeDefs/ARA_ThinkTrees.xml b/1.6/1.6/Defs/ThinkTreeDefs/ARA_ThinkTrees.xml index 3218afc..5b65f4d 100644 --- a/1.6/1.6/Defs/ThinkTreeDefs/ARA_ThinkTrees.xml +++ b/1.6/1.6/Defs/ThinkTreeDefs/ARA_ThinkTrees.xml @@ -332,6 +332,13 @@
  • + + +
  • + +
  • + +
  • diff --git a/1.6/1.6/Defs/TrainableDefs/ARA_Cleaning.xml b/1.6/1.6/Defs/TrainableDefs/ARA_Cleaning.xml new file mode 100644 index 0000000..8ed9fcc --- /dev/null +++ b/1.6/1.6/Defs/TrainableDefs/ARA_Cleaning.xml @@ -0,0 +1,22 @@ + + + + + ARA_Cleaning + + 允许该生物执行清洁任务。 + + true + + + 5 + Advanced + + + 3 + + + 100 + + + \ No newline at end of file diff --git a/Source/ArachnaeSwarm/ARA_TrainingWork/JobClean/ARA_TrainableDefOf_Cleaning.cs b/Source/ArachnaeSwarm/ARA_TrainingWork/JobClean/ARA_TrainableDefOf_Cleaning.cs new file mode 100644 index 0000000..1ec09fe --- /dev/null +++ b/Source/ArachnaeSwarm/ARA_TrainingWork/JobClean/ARA_TrainableDefOf_Cleaning.cs @@ -0,0 +1,16 @@ +using Verse; +using RimWorld; + +namespace ArachnaeSwarm +{ + [DefOf] + public static class ARA_TrainableDefOf_Cleaning + { + public static TrainableDef ARA_Cleaning; + + static ARA_TrainableDefOf_Cleaning() + { + DefOfHelper.EnsureInitializedInCtor(typeof(ARA_TrainableDefOf_Cleaning)); + } + } +} \ No newline at end of file diff --git a/Source/ArachnaeSwarm/ARA_TrainingWork/JobClean/JobGiver_Cleaner.cs b/Source/ArachnaeSwarm/ARA_TrainingWork/JobClean/JobGiver_Cleaner.cs new file mode 100644 index 0000000..f99aedb --- /dev/null +++ b/Source/ArachnaeSwarm/ARA_TrainingWork/JobClean/JobGiver_Cleaner.cs @@ -0,0 +1,50 @@ +using Verse; +using Verse.AI; +using RimWorld; + +namespace ArachnaeSwarm +{ + public class JobGiver_Cleaner : ThinkNode_JobGiver + { + private WorkGiver_ArachnaeClean _workGiver; + + public override void ResolveReferences() + { + base.ResolveReferences(); + // We instantiate our custom WorkGiver here. + // It doesn't need a Def because it's not a standard game WorkGiver. + _workGiver = new WorkGiver_ArachnaeClean(); + } + + protected override Job TryGiveJob(Pawn pawn) + { + if (_workGiver == null) + { + Log.ErrorOnce("JobGiver_Cleaner's WorkGiver is null. ResolveReferences was not called.", 91354); + return null; + } + + // The WorkGiver will handle both filth and snow. + // We just need to find the closest potential job. + // The logic is simplified here; the real work is in the WorkGiver. + + // Find the closest filth to clean + Thing closestFilth = _workGiver.FindClosestFilth(pawn); + if (closestFilth != null) + { + Job filthJob = _workGiver.JobOnThing(pawn, closestFilth); + if (filthJob != null) return filthJob; + } + + // If no filth, find the closest snow/sand to clear + IntVec3 closestSnowCell = _workGiver.FindClosestSnow(pawn); + if (closestSnowCell.IsValid) + { + Job snowJob = _workGiver.JobOnCell(pawn, closestSnowCell); + if (snowJob != null) return snowJob; + } + + return null; + } + } +} \ No newline at end of file diff --git a/Source/ArachnaeSwarm/ARA_TrainingWork/JobClean/ThinkNode_ConditionalAnimalShouldDoCleaningWork.cs b/Source/ArachnaeSwarm/ARA_TrainingWork/JobClean/ThinkNode_ConditionalAnimalShouldDoCleaningWork.cs new file mode 100644 index 0000000..b94475a --- /dev/null +++ b/Source/ArachnaeSwarm/ARA_TrainingWork/JobClean/ThinkNode_ConditionalAnimalShouldDoCleaningWork.cs @@ -0,0 +1,21 @@ +using Verse; +using Verse.AI; +using RimWorld; + +namespace ArachnaeSwarm +{ + public class ThinkNode_ConditionalAnimalShouldDoCleaningWork : ThinkNode_Conditional + { + protected override bool Satisfied(Pawn pawn) + { + if (pawn.training == null) + { + return false; + } + + // Check if the animal has learned and is set to perform "Cleaning" + return pawn.training.HasLearned(ARA_TrainableDefOf_Cleaning.ARA_Cleaning) && + pawn.training.GetWanted(ARA_TrainableDefOf_Cleaning.ARA_Cleaning); + } + } +} \ No newline at end of file diff --git a/Source/ArachnaeSwarm/ARA_TrainingWork/JobClean/WorkGiver_ArachnaeClean.cs b/Source/ArachnaeSwarm/ARA_TrainingWork/JobClean/WorkGiver_ArachnaeClean.cs new file mode 100644 index 0000000..ddfb1c6 --- /dev/null +++ b/Source/ArachnaeSwarm/ARA_TrainingWork/JobClean/WorkGiver_ArachnaeClean.cs @@ -0,0 +1,82 @@ +using System.Collections.Generic; +using Verse; +using Verse.AI; +using RimWorld; + +namespace ArachnaeSwarm +{ + public class WorkGiver_ArachnaeClean : WorkGiver_Scanner + { + private const int MinTicksSinceThickened = 600; + + public override PathEndMode PathEndMode => PathEndMode.Touch; + + // --- Filth Cleaning Logic --- + + public Thing FindClosestFilth(Pawn pawn) + { + return GenClosest.ClosestThing_Global( + pawn.Position, + pawn.Map.listerFilthInHomeArea.FilthInHomeArea, + maxDistance: 9999f, + validator: t => HasJobOnThing(pawn, t) + ); + } + + public override bool HasJobOnThing(Pawn pawn, Thing t, bool forced = false) + { + if (!(t is Filth filth)) return false; + if (!filth.Map.areaManager.Home[filth.Position]) return false; + if (filth.Fogged() || !pawn.CanReserve(t, 1, -1, null, forced)) return false; + if (filth.TicksSinceThickened < MinTicksSinceThickened) return false; + return true; + } + + public override Job JobOnThing(Pawn pawn, Thing t, bool forced = false) + { + Job job = JobMaker.MakeJob(JobDefOf.Clean); + job.AddQueuedTarget(TargetIndex.A, t); + + // Simplified multi-clean logic from original WorkGiver_CleanFilth + int num = 15; + for (int i = 0; i < 100; i++) + { + IntVec3 c = t.Position + GenRadial.RadialPattern[i]; + if (c.InBounds(pawn.Map)) + { + List thingList = c.GetThingList(pawn.Map); + foreach(var thing in thingList) + { + if (thing != t && HasJobOnThing(pawn, thing, forced)) + { + job.AddQueuedTarget(TargetIndex.A, thing); + } + } + } + if (job.GetTargetQueue(TargetIndex.A).Count >= num) break; + } + return job; + } + + // --- Snow Clearing Logic --- + + public IntVec3 FindClosestSnow(Pawn pawn) + { + return CellFinder.RandomClosewalkCellNear(pawn.Position, pawn.Map, 100, + c => HasJobOnCell(pawn, c) && pawn.CanReach(c, PathEndMode.Touch, Danger.Deadly)); + } + + public override bool HasJobOnCell(Pawn pawn, IntVec3 c, bool forced = false) + { + if (pawn.Map.snowGrid.GetDepth(c) < 0.2f) return false; + if (!pawn.Map.areaManager.SnowOrSandClear[c]) return false; // Must be in the clear zone + if (!pawn.CanReserve(c, 1, -1, null, forced)) return false; + return true; + } + + public override Job JobOnCell(Pawn pawn, IntVec3 c, bool forced = false) + { + return JobMaker.MakeJob(JobDefOf.ClearSnow, c); + } + } +} \ No newline at end of file diff --git a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj index 32f2be4..4532ea1 100644 --- a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj +++ b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj @@ -118,6 +118,12 @@ + + + + + +