暂存3
This commit is contained in:
Binary file not shown.
@@ -9,59 +9,36 @@ namespace WulaFallenEmpire
|
|||||||
{
|
{
|
||||||
public float minEnergyLevelPercentage = 0.3f;
|
public float minEnergyLevelPercentage = 0.3f;
|
||||||
public float maxEnergyLevelPercentage = 0.9f;
|
public float maxEnergyLevelPercentage = 0.9f;
|
||||||
public float emergencyPriority = 9.5f;
|
|
||||||
|
|
||||||
public override float GetPriority(Pawn pawn)
|
public override float GetPriority(Pawn pawn)
|
||||||
{
|
{
|
||||||
if (pawn.health.hediffSet.HasHediff(DefDatabase<HediffDef>.GetNamed("WULA_ChargingHediff")))
|
var energyNeed = pawn.needs.TryGetNeed<Need_WulaEnergy>();
|
||||||
{
|
if (energyNeed == null || energyNeed.CurLevelPercentage >= minEnergyLevelPercentage)
|
||||||
Log.Message($"[JobGiver_WulaGetEnergy] {pawn.Name.ToStringShort} already has charging hediff. Priority 0.");
|
|
||||||
return 0f;
|
|
||||||
}
|
|
||||||
|
|
||||||
Need_WulaEnergy energyNeed = pawn.needs.TryGetNeed<Need_WulaEnergy>();
|
|
||||||
if (energyNeed == null)
|
|
||||||
{
|
{
|
||||||
return 0f;
|
return 0f;
|
||||||
}
|
}
|
||||||
|
return 9.5f;
|
||||||
if (energyNeed.CurLevelPercentage < minEnergyLevelPercentage)
|
|
||||||
{
|
|
||||||
return emergencyPriority;
|
|
||||||
}
|
|
||||||
return 0f;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override Job TryGiveJob(Pawn pawn)
|
protected override Job TryGiveJob(Pawn pawn)
|
||||||
{
|
{
|
||||||
Log.Message($"[JobGiver_WulaGetEnergy] Trying to give job to {pawn.Name.ToStringShort}.");
|
var energyNeed = pawn.needs.TryGetNeed<Need_WulaEnergy>();
|
||||||
|
|
||||||
if (pawn.health.hediffSet.HasHediff(DefDatabase<HediffDef>.GetNamed("WULA_ChargingHediff")))
|
|
||||||
{
|
|
||||||
Log.Message($"[JobGiver_WulaGetEnergy] {pawn.Name.ToStringShort} already has charging hediff. Job cancelled.");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
Need_WulaEnergy energyNeed = pawn.needs.TryGetNeed<Need_WulaEnergy>();
|
|
||||||
if (energyNeed == null || energyNeed.CurLevelPercentage >= maxEnergyLevelPercentage)
|
if (energyNeed == null || energyNeed.CurLevelPercentage >= maxEnergyLevelPercentage)
|
||||||
{
|
{
|
||||||
Log.Message($"[JobGiver_WulaGetEnergy] Energy level for {pawn.Name.ToStringShort} is sufficient. Job cancelled.");
|
|
||||||
return null;
|
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;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (energySource is Building_Bed)
|
if (energySource is Building_Bed)
|
||||||
{
|
{
|
||||||
Log.Message($"[JobGiver_WulaGetEnergy] Found bed for {pawn.Name.ToStringShort}. Creating WULA_LayDownToCharge job.");
|
|
||||||
return JobMaker.MakeJob(DefDatabase<JobDef>.GetNamed("WULA_LayDownToCharge"), energySource);
|
return JobMaker.MakeJob(DefDatabase<JobDef>.GetNamed("WULA_LayDownToCharge"), energySource);
|
||||||
}
|
}
|
||||||
|
|
||||||
Job job = JobMaker.MakeJob(DefDatabase<JobDef>.GetNamed("WULA_IngestWulaEnergy"), energySource);
|
var job = JobMaker.MakeJob(DefDatabase<JobDef>.GetNamed("WULA_IngestWulaEnergy"), energySource);
|
||||||
job.count = 1;
|
job.count = 1;
|
||||||
return job;
|
return job;
|
||||||
}
|
}
|
||||||
@@ -109,20 +86,16 @@ namespace WulaFallenEmpire
|
|||||||
9999f,
|
9999f,
|
||||||
b =>
|
b =>
|
||||||
{
|
{
|
||||||
Building_Bed bed_internal = b as Building_Bed;
|
if (!(b is Building_Bed bed_internal)) return false;
|
||||||
if (bed_internal == null) return false;
|
|
||||||
|
|
||||||
var chargingComp = bed_internal.GetComp<CompChargingBed>();
|
|
||||||
if (chargingComp == null) return false;
|
|
||||||
|
|
||||||
|
if (bed_internal.GetComp<CompChargingBed>() == null) return false;
|
||||||
|
|
||||||
var powerComp = bed_internal.GetComp<CompPowerTrader>();
|
var powerComp = bed_internal.GetComp<CompPowerTrader>();
|
||||||
return !bed_internal.IsForbidden(pawn) &&
|
|
||||||
pawn.CanReserve(bed_internal) &&
|
// 使用 pawn.CanReserve 是最可靠的方法,它包含了对 ملكية، حظر، منطقة، الخ 的所有检查。
|
||||||
!bed_internal.Medical &&
|
return powerComp != null &&
|
||||||
!bed_internal.IsBurning() &&
|
|
||||||
powerComp != null &&
|
|
||||||
powerComp.PowerOn &&
|
powerComp.PowerOn &&
|
||||||
!bed_internal.CurOccupants.Any();
|
pawn.CanReserve(bed_internal);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
return bed;
|
return bed;
|
||||||
|
|||||||
Reference in New Issue
Block a user