好像这一版终于行了 修充电床
This commit is contained in:
Binary file not shown.
@@ -30,11 +30,4 @@
|
|||||||
<casualInterruptible>false</casualInterruptible>
|
<casualInterruptible>false</casualInterruptible>
|
||||||
</JobDef>
|
</JobDef>
|
||||||
|
|
||||||
<JobDef>
|
|
||||||
<defName>WULA_LayDownToCharge</defName>
|
|
||||||
<driverClass>WulaFallenEmpire.JobDriver_WulaLayDownToCharge</driverClass>
|
|
||||||
<reportString>正在充电</reportString>
|
|
||||||
<casualInterruptible>false</casualInterruptible>
|
|
||||||
</JobDef>
|
|
||||||
|
|
||||||
</Defs>
|
</Defs>
|
||||||
@@ -265,21 +265,30 @@
|
|||||||
<emergency>true</emergency>
|
<emergency>true</emergency>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<!-- Get Wula energy (only if starving) -->
|
<!-- Satisfy Needs -->
|
||||||
<li Class="ThinkNode_ConditionalNeedPercentageAbove">
|
<li Class="ThinkNode_Tagger">
|
||||||
<need>WULA_Energy</need>
|
<tagToGive>SatisfyingNeeds</tagToGive>
|
||||||
<threshold>0.5</threshold> <!-- 能量低于10%时触发 -->
|
|
||||||
<invert>true</invert>
|
|
||||||
<subNodes>
|
<subNodes>
|
||||||
<li Class="ThinkNode_Tagger">
|
<li Class="ThinkNode_PrioritySorter">
|
||||||
<tagToGive>SatisfyingNeeds</tagToGive>
|
|
||||||
<subNodes>
|
<subNodes>
|
||||||
|
<li Class="JobGiver_Autofeed" MayRequire="Ludeon.RimWorld.Biotech" />
|
||||||
<li Class="WulaFallenEmpire.JobGiver_WulaGetEnergy">
|
<li Class="WulaFallenEmpire.JobGiver_WulaGetEnergy">
|
||||||
<leaveJoinableLordIfIssuesJob>true</leaveJoinableLordIfIssuesJob>
|
<leaveJoinableLordIfIssuesJob>true</leaveJoinableLordIfIssuesJob>
|
||||||
<minEnergyLevelPercentage>0.3</minEnergyLevelPercentage>
|
<minEnergyLevelPercentage>0.3</minEnergyLevelPercentage>
|
||||||
<maxEnergyLevelPercentage>0.9</maxEnergyLevelPercentage>
|
<maxEnergyLevelPercentage>1.0</maxEnergyLevelPercentage>
|
||||||
<emergencyPriority>9.5</emergencyPriority>
|
<emergencyPriority>9.5</emergencyPriority>
|
||||||
</li>
|
</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>
|
</subNodes>
|
||||||
</li>
|
</li>
|
||||||
</subNodes>
|
</subNodes>
|
||||||
|
|||||||
@@ -24,7 +24,6 @@ namespace WulaFallenEmpire
|
|||||||
public override void CompTick()
|
public override void CompTick()
|
||||||
{
|
{
|
||||||
base.CompTick();
|
base.CompTick();
|
||||||
Log.Message("[CompChargingBed] CompTick running.");
|
|
||||||
|
|
||||||
var bed = (Building_Bed)parent;
|
var bed = (Building_Bed)parent;
|
||||||
var powerComp = parent.GetComp<CompPowerTrader>();
|
var powerComp = parent.GetComp<CompPowerTrader>();
|
||||||
@@ -74,6 +73,7 @@ namespace WulaFallenEmpire
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void StopCharging(Pawn pawn)
|
private void StopCharging(Pawn pawn)
|
||||||
{
|
{
|
||||||
var hediff = pawn.health.hediffSet.GetFirstHediffOfDef(Props.hediffDef);
|
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 class JobGiver_WulaGetEnergy : ThinkNode_JobGiver
|
||||||
{
|
{
|
||||||
public float minEnergyLevelPercentage = 0.3f;
|
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)
|
public override float GetPriority(Pawn pawn)
|
||||||
{
|
{
|
||||||
var energyNeed = pawn.needs.TryGetNeed<Need_WulaEnergy>();
|
var energyNeed = pawn.needs.TryGetNeed<Need_WulaEnergy>();
|
||||||
if (energyNeed == null || energyNeed.CurLevelPercentage >= minEnergyLevelPercentage)
|
if (energyNeed == null)
|
||||||
{
|
{
|
||||||
return 0f;
|
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)
|
protected override Job TryGiveJob(Pawn pawn)
|
||||||
{
|
{
|
||||||
|
Log.Message($"[JobGiver_WulaGetEnergy] TryGiveJob called for {pawn.Name.ToStringShort}.");
|
||||||
var energyNeed = pawn.needs.TryGetNeed<Need_WulaEnergy>();
|
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;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!TryFindBestEnergySourceFor(pawn, out var energySource))
|
if (!TryFindBestEnergySourceFor(pawn, out var energySource))
|
||||||
{
|
{
|
||||||
|
Log.Message($"[JobGiver_WulaGetEnergy] TryGiveJob for {pawn.Name.ToStringShort}: No best energy source found. Returning null.");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (energySource is Building_Bed)
|
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);
|
var job = JobMaker.MakeJob(DefDatabase<JobDef>.GetNamed("WULA_IngestWulaEnergy"), energySource);
|
||||||
job.count = 1;
|
job.count = 1;
|
||||||
|
Log.Message($"[JobGiver_WulaGetEnergy] TryGiveJob for {pawn.Name.ToStringShort}: Assigning WULA_IngestWulaEnergy job to {energySource.Label}.");
|
||||||
return job;
|
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_EnterMaintenancePod.cs" />
|
||||||
<Compile Include="JobDriver_HaulToMaintenancePod.cs" />
|
<Compile Include="JobDriver_HaulToMaintenancePod.cs" />
|
||||||
<Compile Include="JobDriver_IngestWulaEnergy.cs" />
|
<Compile Include="JobDriver_IngestWulaEnergy.cs" />
|
||||||
<Compile Include="JobDriver_WulaLayDownToCharge.cs" />
|
|
||||||
<Compile Include="JobGiver_WulaGetEnergy.cs" />
|
<Compile Include="JobGiver_WulaGetEnergy.cs" />
|
||||||
<Compile Include="JobGiver_WulaPackEnergy.cs" />
|
<Compile Include="JobGiver_WulaPackEnergy.cs" />
|
||||||
<Compile Include="Job_Maintenance.cs" />
|
<Compile Include="Job_Maintenance.cs" />
|
||||||
@@ -151,6 +150,7 @@
|
|||||||
<Compile Include="HediffComp_DamageResponse.cs" />
|
<Compile Include="HediffComp_DamageResponse.cs" />
|
||||||
<Compile Include="JobDefOf_WULA.cs" />
|
<Compile Include="JobDefOf_WULA.cs" />
|
||||||
<Compile Include="ThingDefOf_WULA.cs" />
|
<Compile Include="ThingDefOf_WULA.cs" />
|
||||||
|
<Compile Include="StartupLogger.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
<!-- 自定义清理任务,删除obj文件夹中的临时文件 -->
|
<!-- 自定义清理任务,删除obj文件夹中的临时文件 -->
|
||||||
|
|||||||
Reference in New Issue
Block a user