This commit is contained in:
2026-02-25 17:30:59 +08:00
parent 0509f26c3c
commit fff40b0edb
70 changed files with 3951 additions and 1219 deletions

View File

@@ -0,0 +1,82 @@
// File: JobDriver_CarryToMech.cs (修复count问题)
using System.Collections.Generic;
using RimWorld;
using Verse;
using Verse.AI;
namespace WulaFallenEmpire
{
public class JobDriver_CarryToMech : JobDriver
{
private const TargetIndex TakeeIndex = TargetIndex.A;
private const TargetIndex MechIndex = TargetIndex.B;
protected Pawn Takee => (Pawn)job.GetTarget(TakeeIndex).Thing;
protected Wulamechunit Mech => (Wulamechunit)job.GetTarget(MechIndex).Thing;
protected CompMechPilotHolder MechComp => Mech?.TryGetComp<CompMechPilotHolder>();
public override bool TryMakePreToilReservations(bool errorOnFailed)
{
// 确保job.count是有效的至少为1
if (job.count <= 0)
{
job.count = 1;
}
// 保留目标和机甲明确指定数量为1
return pawn.Reserve(Takee, job, 1, -1, null, errorOnFailed)
&& pawn.Reserve(Mech, job, 1, -1, null, errorOnFailed);
}
protected override IEnumerable<Toil> MakeNewToils()
{
// 确保job.count是有效的
if (job.count <= 0)
{
job.count = 1;
}
// 标准失败条件
this.FailOnDestroyedOrNull(TakeeIndex);
this.FailOnDestroyedOrNull(MechIndex);
this.FailOn(() => MechComp == null);
this.FailOn(() => !Takee.Downed); // 确保被搬运者是Downed状态
// 1. 前往要被搬运的殖民者
yield return Toils_Goto.GotoThing(TakeeIndex, PathEndMode.ClosestTouch)
.FailOnDespawnedNullOrForbidden(TakeeIndex)
.FailOnDespawnedNullOrForbidden(MechIndex)
.FailOnSomeonePhysicallyInteracting(TakeeIndex);
// 2. 开始搬运殖民者 - 使用原版的StartCarryThing方法
yield return Toils_Haul.StartCarryThing(TakeeIndex, false, true, false);
// 3. 携带殖民者前往机甲
yield return Toils_Goto.GotoThing(MechIndex, PathEndMode.Touch);
// 4. 将殖民者放入机甲
yield return new Toil
{
initAction = () =>
{
if (MechComp != null && Takee != null && MechComp.CanAddPilot(Takee))
{
// 放下殖民者
if (pawn.carryTracker.CarriedThing == Takee)
{
pawn.carryTracker.TryDropCarriedThing(pawn.Position, ThingPlaceMode.Near, out Thing droppedThing);
}
// 将殖民者添加到机甲
MechComp.AddPilot(Takee);
}
else
{
Log.Warning($"[WULA] 无法将殖民者添加到机甲");
}
},
defaultCompleteMode = ToilCompleteMode.Instant
};
}
}
}