好像这一版终于行了 修充电床
This commit is contained in:
Binary file not shown.
@@ -30,11 +30,4 @@
|
||||
<casualInterruptible>false</casualInterruptible>
|
||||
</JobDef>
|
||||
|
||||
<JobDef>
|
||||
<defName>WULA_LayDownToCharge</defName>
|
||||
<driverClass>WulaFallenEmpire.JobDriver_WulaLayDownToCharge</driverClass>
|
||||
<reportString>正在充电</reportString>
|
||||
<casualInterruptible>false</casualInterruptible>
|
||||
</JobDef>
|
||||
|
||||
</Defs>
|
||||
@@ -265,21 +265,30 @@
|
||||
<emergency>true</emergency>
|
||||
</li>
|
||||
|
||||
<!-- Get Wula energy (only if starving) -->
|
||||
<li Class="ThinkNode_ConditionalNeedPercentageAbove">
|
||||
<need>WULA_Energy</need>
|
||||
<threshold>0.5</threshold> <!-- 能量低于10%时触发 -->
|
||||
<invert>true</invert>
|
||||
<!-- Satisfy Needs -->
|
||||
<li Class="ThinkNode_Tagger">
|
||||
<tagToGive>SatisfyingNeeds</tagToGive>
|
||||
<subNodes>
|
||||
<li Class="ThinkNode_Tagger">
|
||||
<tagToGive>SatisfyingNeeds</tagToGive>
|
||||
<li Class="ThinkNode_PrioritySorter">
|
||||
<subNodes>
|
||||
<li Class="JobGiver_Autofeed" MayRequire="Ludeon.RimWorld.Biotech" />
|
||||
<li Class="WulaFallenEmpire.JobGiver_WulaGetEnergy">
|
||||
<leaveJoinableLordIfIssuesJob>true</leaveJoinableLordIfIssuesJob>
|
||||
<minEnergyLevelPercentage>0.3</minEnergyLevelPercentage>
|
||||
<maxEnergyLevelPercentage>0.9</maxEnergyLevelPercentage>
|
||||
<maxEnergyLevelPercentage>1.0</maxEnergyLevelPercentage>
|
||||
<emergencyPriority>9.5</emergencyPriority>
|
||||
</li>
|
||||
<li Class="JobGiver_SatisfyChemicalNeed"/>
|
||||
<li Class="JobGiver_SatifyChemicalDependency" MayRequire="Ludeon.RimWorld.Biotech" />
|
||||
<li Class="JobGiver_GetHemogen" MayRequire="Ludeon.RimWorld.Biotech" />
|
||||
<li Class="JobGiver_GetDeathrest" MayRequire="Ludeon.RimWorld.Biotech" />
|
||||
<li Class="ThinkNode_Priority_GetJoy">
|
||||
<subNodes>
|
||||
<li Class="JobGiver_GetJoy"/>
|
||||
<li Class="JobGiver_GetJoyInBed"/>
|
||||
</subNodes>
|
||||
</li>
|
||||
<li Class="JobGiver_Meditate"/>
|
||||
</subNodes>
|
||||
</li>
|
||||
</subNodes>
|
||||
|
||||
@@ -24,7 +24,6 @@ namespace WulaFallenEmpire
|
||||
public override void CompTick()
|
||||
{
|
||||
base.CompTick();
|
||||
Log.Message("[CompChargingBed] CompTick running.");
|
||||
|
||||
var bed = (Building_Bed)parent;
|
||||
var powerComp = parent.GetComp<CompPowerTrader>();
|
||||
@@ -74,6 +73,7 @@ namespace WulaFallenEmpire
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void StopCharging(Pawn pawn)
|
||||
{
|
||||
var hediff = pawn.health.hediffSet.GetFirstHediffOfDef(Props.hediffDef);
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
using RimWorld;
|
||||
using System.Collections.Generic;
|
||||
using Verse;
|
||||
using Verse.AI;
|
||||
|
||||
namespace WulaFallenEmpire
|
||||
{
|
||||
public class JobDriver_WulaLayDownToCharge : JobDriver
|
||||
{
|
||||
public override bool TryMakePreToilReservations(bool errorOnFailed)
|
||||
{
|
||||
return pawn.Reserve(job.targetA, job, 1, -1, null, errorOnFailed);
|
||||
}
|
||||
|
||||
protected override IEnumerable<Toil> MakeNewToils()
|
||||
{
|
||||
yield return Toils_Bed.GotoBed(TargetIndex.A);
|
||||
|
||||
Toil layDownAndCharge = Toils_LayDown.LayDown(TargetIndex.A, true, false, false, false);
|
||||
layDownAndCharge.tickAction = delegate
|
||||
{
|
||||
var bed = (Building_Bed)job.targetA.Thing;
|
||||
var powerComp = bed.GetComp<CompPowerTrader>();
|
||||
|
||||
if (powerComp is { PowerOn: false })
|
||||
{
|
||||
EndJobWith(JobCondition.Incompletable);
|
||||
return;
|
||||
}
|
||||
|
||||
var energyNeed = pawn.needs.TryGetNeed<Need_WulaEnergy>();
|
||||
if (energyNeed != null && energyNeed.CurLevelPercentage >= 1f)
|
||||
{
|
||||
EndJobWith(JobCondition.Succeeded);
|
||||
}
|
||||
};
|
||||
|
||||
yield return layDownAndCharge;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -8,38 +8,72 @@ namespace WulaFallenEmpire
|
||||
public class JobGiver_WulaGetEnergy : ThinkNode_JobGiver
|
||||
{
|
||||
public float minEnergyLevelPercentage = 0.3f;
|
||||
public float maxEnergyLevelPercentage = 0.9f;
|
||||
public float maxEnergyLevelPercentage = 1.0f;
|
||||
|
||||
public float emergencyPriority = 9.5f;
|
||||
|
||||
public override float GetPriority(Pawn pawn)
|
||||
{
|
||||
var energyNeed = pawn.needs.TryGetNeed<Need_WulaEnergy>();
|
||||
if (energyNeed == null || energyNeed.CurLevelPercentage >= minEnergyLevelPercentage)
|
||||
if (energyNeed == null)
|
||||
{
|
||||
return 0f;
|
||||
}
|
||||
return 9.5f;
|
||||
|
||||
// 如果能量已充满,则不需要充电
|
||||
if (energyNeed.CurLevel >= energyNeed.MaxLevel)
|
||||
{
|
||||
return 0f;
|
||||
}
|
||||
|
||||
// 如果Pawn正在执行充电Job,并且能量尚未充满,则保持高优先级
|
||||
if ((pawn.CurJobDef == JobDefOf.LayDown ||
|
||||
pawn.CurJobDef == DefDatabase<JobDef>.GetNamed("WULA_IngestWulaEnergy")) &&
|
||||
energyNeed.CurLevel < energyNeed.MaxLevel)
|
||||
{
|
||||
return emergencyPriority; // 保持高优先级,直到充满
|
||||
}
|
||||
|
||||
// 如果能量低于阈值,则需要充电
|
||||
if (energyNeed.CurLevelPercentage < minEnergyLevelPercentage)
|
||||
{
|
||||
return emergencyPriority;
|
||||
}
|
||||
|
||||
return 0f; // 否则,不需要充电,返回0
|
||||
}
|
||||
|
||||
protected override Job TryGiveJob(Pawn pawn)
|
||||
{
|
||||
Log.Message($"[JobGiver_WulaGetEnergy] TryGiveJob called for {pawn.Name.ToStringShort}.");
|
||||
var energyNeed = pawn.needs.TryGetNeed<Need_WulaEnergy>();
|
||||
if (energyNeed == null || energyNeed.CurLevelPercentage >= maxEnergyLevelPercentage)
|
||||
if (energyNeed == null)
|
||||
{
|
||||
Log.Message($"[JobGiver_WulaGetEnergy] TryGiveJob for {pawn.Name.ToStringShort}: EnergyNeed is null. Returning null.");
|
||||
return null;
|
||||
}
|
||||
|
||||
if (energyNeed.CurLevelPercentage >= maxEnergyLevelPercentage)
|
||||
{
|
||||
Log.Message($"[JobGiver_WulaGetEnergy] TryGiveJob for {pawn.Name.ToStringShort}: CurLevelPercentage ({energyNeed.CurLevelPercentage:F3}) >= maxEnergyLevelPercentage ({maxEnergyLevelPercentage:F3}). Returning null.");
|
||||
return null;
|
||||
}
|
||||
|
||||
if (!TryFindBestEnergySourceFor(pawn, out var energySource))
|
||||
{
|
||||
Log.Message($"[JobGiver_WulaGetEnergy] TryGiveJob for {pawn.Name.ToStringShort}: No best energy source found. Returning null.");
|
||||
return null;
|
||||
}
|
||||
|
||||
if (energySource is Building_Bed)
|
||||
{
|
||||
return JobMaker.MakeJob(DefDatabase<JobDef>.GetNamed("WULA_LayDownToCharge"), energySource);
|
||||
Log.Message($"[JobGiver_WulaGetEnergy] TryGiveJob for {pawn.Name.ToStringShort}: Assigning LayDown job to {energySource.Label}.");
|
||||
return JobMaker.MakeJob(JobDefOf.LayDown, energySource);
|
||||
}
|
||||
|
||||
var job = JobMaker.MakeJob(DefDatabase<JobDef>.GetNamed("WULA_IngestWulaEnergy"), energySource);
|
||||
job.count = 1;
|
||||
Log.Message($"[JobGiver_WulaGetEnergy] TryGiveJob for {pawn.Name.ToStringShort}: Assigning WULA_IngestWulaEnergy job to {energySource.Label}.");
|
||||
return job;
|
||||
}
|
||||
|
||||
|
||||
13
Source/WulaFallenEmpire/StartupLogger.cs
Normal file
13
Source/WulaFallenEmpire/StartupLogger.cs
Normal file
@@ -0,0 +1,13 @@
|
||||
using Verse;
|
||||
|
||||
namespace WulaFallenEmpire
|
||||
{
|
||||
[StaticConstructorOnStartup]
|
||||
public static class StartupLogger
|
||||
{
|
||||
static StartupLogger()
|
||||
{
|
||||
Log.Message("WulaFallenEmpire Mod DLL, version 1.0.2, has been loaded.");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -104,7 +104,6 @@
|
||||
<Compile Include="JobDriver_EnterMaintenancePod.cs" />
|
||||
<Compile Include="JobDriver_HaulToMaintenancePod.cs" />
|
||||
<Compile Include="JobDriver_IngestWulaEnergy.cs" />
|
||||
<Compile Include="JobDriver_WulaLayDownToCharge.cs" />
|
||||
<Compile Include="JobGiver_WulaGetEnergy.cs" />
|
||||
<Compile Include="JobGiver_WulaPackEnergy.cs" />
|
||||
<Compile Include="Job_Maintenance.cs" />
|
||||
@@ -151,6 +150,7 @@
|
||||
<Compile Include="HediffComp_DamageResponse.cs" />
|
||||
<Compile Include="JobDefOf_WULA.cs" />
|
||||
<Compile Include="ThingDefOf_WULA.cs" />
|
||||
<Compile Include="StartupLogger.cs" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- 自定义清理任务,删除obj文件夹中的临时文件 -->
|
||||
|
||||
Reference in New Issue
Block a user