diff --git a/1.6/Assemblies/WulaFallenEmpire.dll b/1.6/Assemblies/WulaFallenEmpire.dll index 83cc57b4..496d2b40 100644 Binary files a/1.6/Assemblies/WulaFallenEmpire.dll and b/1.6/Assemblies/WulaFallenEmpire.dll differ diff --git a/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/.suo b/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/.suo index fb8809b8..688a4b7c 100644 Binary files a/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/.suo and b/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/.suo differ diff --git a/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/DocumentLayout.json b/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/DocumentLayout.json index 49f5745a..94916b87 100644 --- a/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/DocumentLayout.json +++ b/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/DocumentLayout.json @@ -90,7 +90,7 @@ "RelativeDocumentMoniker": "CompApparelInterceptor.cs", "ToolTip": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\CompApparelInterceptor.cs", "RelativeToolTip": "CompApparelInterceptor.cs", - "ViewState": "AQIAAAAAAAAAAAAAAAAAAFMBAAAMAAAA", + "ViewState": "AQIAAAAAAAAAAAAAAAAAAFQBAAAMAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2025-07-23T10:03:31.989Z", "EditorCaption": "" diff --git a/Source/WulaFallenEmpire/CompApparelInterceptor.cs b/Source/WulaFallenEmpire/CompApparelInterceptor.cs index c4395323..21a9222b 100644 --- a/Source/WulaFallenEmpire/CompApparelInterceptor.cs +++ b/Source/WulaFallenEmpire/CompApparelInterceptor.cs @@ -52,7 +52,7 @@ namespace WulaFallenEmpire [StaticConstructorOnStartup] public class CompApparelInterceptor : ThingComp { - // ״̬ + // 状态变量 private int lastInterceptTicks = -999999; private int startedChargingTick = -1; private bool shutDown; @@ -62,17 +62,17 @@ namespace WulaFallenEmpire private int ticksToReset; private int activatedTick = -999999; - // ӾЧ + // 视觉效果变量 private float lastInterceptAngle; private bool drawInterceptCone; - // ̬Դ + // 静态资源 private static readonly Material ForceFieldMat = MaterialPool.MatFrom("Other/ForceField", ShaderDatabase.MoteGlow); private static readonly Material ForceFieldConeMat = MaterialPool.MatFrom("Other/ForceFieldCone", ShaderDatabase.MoteGlow); private static readonly MaterialPropertyBlock MatPropertyBlock = new MaterialPropertyBlock(); private static readonly Color InactiveColor = new Color(0.2f, 0.2f, 0.2f); - // + // 属性 public CompProperties_ApparelInterceptor Props => (CompProperties_ApparelInterceptor)props; private Pawn PawnOwner => (parent as Apparel)?.Wearer; @@ -320,6 +320,7 @@ namespace WulaFallenEmpire } } + [StaticConstructorOnStartup] public class Gizmo_EnergyShieldStatus : Gizmo { public CompApparelInterceptor shield; @@ -355,4 +356,4 @@ namespace WulaFallenEmpire return new GizmoResult(GizmoState.Clear); } } -} \ No newline at end of file +} diff --git a/Source/WulaFallenEmpire/WorkGiver_FeedWulaPatient.cs b/Source/WulaFallenEmpire/WorkGiver_FeedWulaPatient.cs index d7cf0668..d764eafe 100644 --- a/Source/WulaFallenEmpire/WorkGiver_FeedWulaPatient.cs +++ b/Source/WulaFallenEmpire/WorkGiver_FeedWulaPatient.cs @@ -45,7 +45,7 @@ namespace WulaFallenEmpire return false; } - if (!pawn.CanReserve(patient, 1, -1, null, forced)) + if (!pawn.CanReserveAndReach(patient, PathEndMode.Touch, Danger.Deadly, 1, -1, null, forced)) { return false; } diff --git a/Source/WulaFallenEmpire/WorkGiver_Warden_DeliverEnergy.cs b/Source/WulaFallenEmpire/WorkGiver_Warden_DeliverEnergy.cs index 1fe1bb8e..fd15a043 100644 --- a/Source/WulaFallenEmpire/WorkGiver_Warden_DeliverEnergy.cs +++ b/Source/WulaFallenEmpire/WorkGiver_Warden_DeliverEnergy.cs @@ -51,7 +51,7 @@ namespace WulaFallenEmpire return false; } - if (!pawn.CanReserve(prisoner, 1, -1, null, forced)) + if (!pawn.CanReserveAndReach(prisoner, PathEndMode.Touch, Danger.Deadly, 1, -1, null, forced)) { return false; } diff --git a/Source/WulaFallenEmpire/WorkGiver_Warden_FeedWula.cs b/Source/WulaFallenEmpire/WorkGiver_Warden_FeedWula.cs index dc069ff3..94985d34 100644 --- a/Source/WulaFallenEmpire/WorkGiver_Warden_FeedWula.cs +++ b/Source/WulaFallenEmpire/WorkGiver_Warden_FeedWula.cs @@ -5,41 +5,55 @@ using System.Linq; namespace WulaFallenEmpire { - public class WorkGiver_Warden_FeedWula : WorkGiver_Warden + public class WorkGiver_Warden_FeedWula : WorkGiver_Scanner { - public override Job JobOnThing(Pawn pawn, Thing t, bool forced = false) + public override ThingRequest PotentialWorkThingRequest => ThingRequest.ForGroup(ThingRequestGroup.Pawn); + + public override PathEndMode PathEndMode => PathEndMode.ClosestTouch; + + public override Danger MaxPathDanger(Pawn pawn) => Danger.Deadly; + + public override bool HasJobOnThing(Pawn pawn, Thing t, bool forced = false) { - if (!(t is Pawn prisoner) || !ShouldFeed(pawn, prisoner)) - { - return null; - } + if (!(t is Pawn prisoner) || pawn == prisoner) + return false; + + if (!ShouldFeed(pawn, prisoner)) + return false; Need_WulaEnergy energyNeed = prisoner.needs.TryGetNeed(); var extension = def.GetModExtension(); if (energyNeed == null || energyNeed.CurLevelPercentage >= extension.feedThreshold) - { - return null; - } + return false; if (prisoner.health.hediffSet.HasHediff(DefDatabase.GetNamed("WULA_ChargingHediff"))) - { - return null; - } + return false; - // The prisoner must be in bed to be fed by a warden. If the job is not forced, they must also be unable to move. if (!prisoner.InBed() || (!forced && prisoner.health.capacities.CapableOf(PawnCapacityDefOf.Moving))) + return false; + + if (!pawn.CanReserveAndReach(prisoner, PathEndMode.Touch, Danger.Deadly, 1, -1, null, forced)) + return false; + + if (!TryFindBestEnergySourceFor(pawn, prisoner, out _, out _)) { - return null; + JobFailReason.Is("NoWulaEnergyToFeed".Translate(prisoner.LabelShort, prisoner)); + return false; } - if (!TryFindBestEnergySourceFor(pawn, prisoner, out Thing energySource, out _)) - { - return null; - } + return true; + } - Job job = JobMaker.MakeJob(DefDatabase.GetNamed("WULA_FeedWulaPatient"), energySource, prisoner); - job.count = 1; - return job; + public override Job JobOnThing(Pawn pawn, Thing t, bool forced = false) + { + Pawn prisoner = (Pawn)t; + if (TryFindBestEnergySourceFor(pawn, prisoner, out Thing energySource, out _)) + { + Job job = JobMaker.MakeJob(DefDatabase.GetNamed("WULA_FeedWulaPatient"), energySource, prisoner); + job.count = 1; + return job; + } + return null; } private bool ShouldFeed(Pawn warden, Pawn prisoner)