diff --git a/1.6/1.6/Assemblies/WulaFallenEmpire.dll b/1.6/1.6/Assemblies/WulaFallenEmpire.dll index b354fac0..66e90f5e 100644 Binary files a/1.6/1.6/Assemblies/WulaFallenEmpire.dll and b/1.6/1.6/Assemblies/WulaFallenEmpire.dll differ diff --git a/Source/WulaFallenEmpire/JobGiver_WulaGetEnergy.cs b/Source/WulaFallenEmpire/JobGiver_WulaGetEnergy.cs index 3f2839eb..ae67ad36 100644 --- a/Source/WulaFallenEmpire/JobGiver_WulaGetEnergy.cs +++ b/Source/WulaFallenEmpire/JobGiver_WulaGetEnergy.cs @@ -9,59 +9,36 @@ namespace WulaFallenEmpire { public float minEnergyLevelPercentage = 0.3f; public float maxEnergyLevelPercentage = 0.9f; - public float emergencyPriority = 9.5f; public override float GetPriority(Pawn pawn) { - if (pawn.health.hediffSet.HasHediff(DefDatabase.GetNamed("WULA_ChargingHediff"))) - { - Log.Message($"[JobGiver_WulaGetEnergy] {pawn.Name.ToStringShort} already has charging hediff. Priority 0."); - return 0f; - } - - Need_WulaEnergy energyNeed = pawn.needs.TryGetNeed(); - if (energyNeed == null) + var energyNeed = pawn.needs.TryGetNeed(); + if (energyNeed == null || energyNeed.CurLevelPercentage >= minEnergyLevelPercentage) { return 0f; } - - if (energyNeed.CurLevelPercentage < minEnergyLevelPercentage) - { - return emergencyPriority; - } - return 0f; + return 9.5f; } protected override Job TryGiveJob(Pawn pawn) { - Log.Message($"[JobGiver_WulaGetEnergy] Trying to give job to {pawn.Name.ToStringShort}."); - - if (pawn.health.hediffSet.HasHediff(DefDatabase.GetNamed("WULA_ChargingHediff"))) - { - Log.Message($"[JobGiver_WulaGetEnergy] {pawn.Name.ToStringShort} already has charging hediff. Job cancelled."); - return null; - } - - Need_WulaEnergy energyNeed = pawn.needs.TryGetNeed(); + var energyNeed = pawn.needs.TryGetNeed(); if (energyNeed == null || energyNeed.CurLevelPercentage >= maxEnergyLevelPercentage) { - Log.Message($"[JobGiver_WulaGetEnergy] Energy level for {pawn.Name.ToStringShort} is sufficient. Job cancelled."); return null; } - if (!TryFindBestEnergySourceFor(pawn, out Thing energySource)) + if (!TryFindBestEnergySourceFor(pawn, out var energySource)) { - Log.Message($"[JobGiver_WulaGetEnergy] No energy source found for {pawn.Name.ToStringShort}. Job cancelled."); return null; } if (energySource is Building_Bed) { - Log.Message($"[JobGiver_WulaGetEnergy] Found bed for {pawn.Name.ToStringShort}. Creating WULA_LayDownToCharge job."); return JobMaker.MakeJob(DefDatabase.GetNamed("WULA_LayDownToCharge"), energySource); } - Job job = JobMaker.MakeJob(DefDatabase.GetNamed("WULA_IngestWulaEnergy"), energySource); + var job = JobMaker.MakeJob(DefDatabase.GetNamed("WULA_IngestWulaEnergy"), energySource); job.count = 1; return job; } @@ -109,20 +86,16 @@ namespace WulaFallenEmpire 9999f, b => { - Building_Bed bed_internal = b as Building_Bed; - if (bed_internal == null) return false; - - var chargingComp = bed_internal.GetComp(); - if (chargingComp == null) return false; + if (!(b is Building_Bed bed_internal)) return false; + if (bed_internal.GetComp() == null) return false; + var powerComp = bed_internal.GetComp(); - return !bed_internal.IsForbidden(pawn) && - pawn.CanReserve(bed_internal) && - !bed_internal.Medical && - !bed_internal.IsBurning() && - powerComp != null && + + // 使用 pawn.CanReserve 是最可靠的方法,它包含了对 ملكية، حظر، منطقة، الخ 的所有检查。 + return powerComp != null && powerComp.PowerOn && - !bed_internal.CurOccupants.Any(); + pawn.CanReserve(bed_internal); } ); return bed;