Files
WulaFallenEmpireRW/Source/WulaFallenEmpire/WorkGiver_EnterMaintenancePod.cs
ProjectKoi-Kalo\Kalo fa442bd7fd 暂存feat(maintenance): 添加维护舱及相关需求机制
为乌拉族引入了新的“机体维护”需求,通过`WULA_Maintenance_Neglect`健康状况(Hediff)体现。该状况会随时间推移而恶化,影响角色能力。

新增建筑“维护舱”(`WULA_MaintenancePod`),乌拉族成员可进入其中进行维护,以清除“维护疏忽”的负面效果。维护过程需要消耗电力和零部件,所需零部件数量与负面效果的严重程度相关。

实现了配套的自动化工作逻辑:
- 当维护需求达到阈值时,角色会自动进入维护舱。
- 当维护舱缺少零部件时,搬运工会自动为其装填。

此外,事件系统中增加了一个新的条件 `Condition_FactionExists`。
2025-08-08 19:31:29 +08:00

62 lines
2.2 KiB
C#

using RimWorld;
using System;
using System.Collections.Generic;
using System.Linq;
using Verse;
using Verse.AI;
namespace WulaFallenEmpire
{
public class WorkGiver_EnterMaintenancePod : WorkGiver_Scanner
{
public override ThingRequest PotentialWorkThingRequest => ThingRequest.ForDef(ThingDef.Named("WULA_MaintenancePod"));
public override PathEndMode PathEndMode => PathEndMode.InteractionCell;
// This method now checks the severity of the hediff.
public override bool ShouldSkip(Pawn pawn, bool forced = false)
{
var podDef = ThingDef.Named("WULA_MaintenancePod");
var podProps = podDef.GetCompProperties<CompProperties_MaintenancePod>();
if (podProps?.hediffToRemove == null) return true;
Hediff hediff = pawn.health.hediffSet.GetFirstHediffOfDef(podProps.hediffToRemove);
// Skip if no hediff or if severity is below the configured threshold.
if (hediff == null || hediff.Severity < podProps.minSeverityToMaintain)
{
return true;
}
return false;
}
public override bool HasJobOnThing(Pawn pawn, Thing t, bool forced = false)
{
if (!(t is Building building) || !building.Spawned || building.IsForbidden(pawn) || !pawn.CanReserve(building, 1, -1, null, forced))
{
return false;
}
var podComp = building.GetComp<CompMaintenancePod>();
if (podComp == null || podComp.State != MaintenancePodState.Idle || !podComp.PowerOn)
{
return false;
}
float requiredComponents = podComp.RequiredComponents(pawn);
if (podComp.storedComponents < requiredComponents)
{
JobFailReason.Is("WULA_MaintenancePod_NotEnoughComponents".Translate(requiredComponents.ToString("F0")));
return false;
}
return true;
}
public override Job JobOnThing(Pawn pawn, Thing t, bool forced = false)
{
return JobMaker.MakeJob(JobDefOf.WULA_EnterMaintenancePod, t);
}
}
}