修修修
This commit is contained in:
Binary file not shown.
@@ -3,20 +3,12 @@
|
||||
"WorkspaceRootPath": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\",
|
||||
"Documents": [
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|e:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\pawn_comps\\ara_compskillexperiencegiver\\compskillexperiencegiver.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:pawn_comps\\ara_compskillexperiencegiver\\compskillexperiencegiver.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
"AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\jobdriver_carryprisonertonutrientvat.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:jobdriver_carryprisonertonutrientvat.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|e:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\pawn_comps\\ara_compskillexperiencegiver\\compproperties_skillexperiencegiver.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:pawn_comps\\ara_compskillexperiencegiver\\compproperties_skillexperiencegiver.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|e:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\hediffs\\moharhediffs\\hediffcomp_spawner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:hediffs\\moharhediffs\\hediffcomp_spawner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|e:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\stat\\statworker_incubationinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:stat\\statworker_incubationinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
"AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|e:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\building_comps\\ara_nutrientvat\\building_nutrientvat.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:building_comps\\ara_nutrientvat\\building_nutrientvat.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
}
|
||||
],
|
||||
"DocumentGroupContainers": [
|
||||
@@ -35,53 +27,27 @@
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 0,
|
||||
"Title": "CompSkillExperienceGiver.cs",
|
||||
"DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_CompSkillExperienceGiver\\CompSkillExperienceGiver.cs",
|
||||
"RelativeDocumentMoniker": "Pawn_Comps\\ARA_CompSkillExperienceGiver\\CompSkillExperienceGiver.cs",
|
||||
"ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_CompSkillExperienceGiver\\CompSkillExperienceGiver.cs",
|
||||
"RelativeToolTip": "Pawn_Comps\\ARA_CompSkillExperienceGiver\\CompSkillExperienceGiver.cs",
|
||||
"ViewState": "AgIAAEQAAAAAAAAAAAAgwHkAAAAVAAAAAAAAAA==",
|
||||
"Title": "JobDriver_CarryPrisonerToNutrientVat.cs",
|
||||
"DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\JobDriver_CarryPrisonerToNutrientVat.cs",
|
||||
"RelativeDocumentMoniker": "JobDriver_CarryPrisonerToNutrientVat.cs",
|
||||
"ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\JobDriver_CarryPrisonerToNutrientVat.cs",
|
||||
"RelativeToolTip": "JobDriver_CarryPrisonerToNutrientVat.cs",
|
||||
"ViewState": "AgIAAAAAAAAAAAAAAAAAABwAAAAYAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2025-10-01T06:00:46.388Z",
|
||||
"WhenOpened": "2025-10-01T07:37:06.309Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 1,
|
||||
"Title": "CompProperties_SkillExperienceGiver.cs",
|
||||
"DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_CompSkillExperienceGiver\\CompProperties_SkillExperienceGiver.cs",
|
||||
"RelativeDocumentMoniker": "Pawn_Comps\\ARA_CompSkillExperienceGiver\\CompProperties_SkillExperienceGiver.cs",
|
||||
"ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_CompSkillExperienceGiver\\CompProperties_SkillExperienceGiver.cs*",
|
||||
"RelativeToolTip": "Pawn_Comps\\ARA_CompSkillExperienceGiver\\CompProperties_SkillExperienceGiver.cs*",
|
||||
"ViewState": "AgIAAAAAAAAAAAAAAAAAACAAAAAIAAAAAAAAAA==",
|
||||
"Title": "Building_NutrientVat.cs",
|
||||
"DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_NutrientVat\\Building_NutrientVat.cs",
|
||||
"RelativeDocumentMoniker": "Building_Comps\\ARA_NutrientVat\\Building_NutrientVat.cs",
|
||||
"ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_NutrientVat\\Building_NutrientVat.cs",
|
||||
"RelativeToolTip": "Building_Comps\\ARA_NutrientVat\\Building_NutrientVat.cs",
|
||||
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAkAAAAXAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2025-10-01T06:00:42.508Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 2,
|
||||
"Title": "HediffComp_Spawner.cs",
|
||||
"DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\MoharHediffs\\HediffComp_Spawner.cs",
|
||||
"RelativeDocumentMoniker": "Hediffs\\MoharHediffs\\HediffComp_Spawner.cs",
|
||||
"ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\MoharHediffs\\HediffComp_Spawner.cs",
|
||||
"RelativeToolTip": "Hediffs\\MoharHediffs\\HediffComp_Spawner.cs",
|
||||
"ViewState": "AgIAAKABAAAAAAAAAAAUwLkBAAARAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2025-09-30T23:28:37.585Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 3,
|
||||
"Title": "StatWorker_IncubationInfo.cs",
|
||||
"DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Stat\\StatWorker_IncubationInfo.cs",
|
||||
"RelativeDocumentMoniker": "Stat\\StatWorker_IncubationInfo.cs",
|
||||
"ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Stat\\StatWorker_IncubationInfo.cs",
|
||||
"RelativeToolTip": "Stat\\StatWorker_IncubationInfo.cs",
|
||||
"ViewState": "AgIAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2025-09-30T08:38:06.014Z",
|
||||
"WhenOpened": "2025-10-01T07:14:25.565Z",
|
||||
"EditorCaption": ""
|
||||
}
|
||||
]
|
||||
|
||||
@@ -170,6 +170,7 @@
|
||||
<Compile Include="Hediffs\WULA_HediffDamgeShield\DRMDamageShield.cs" />
|
||||
<Compile Include="Hediffs\WULA_HediffDamgeShield\Hediff_DamageShield.cs" />
|
||||
<Compile Include="Hediff_DynamicInterceptor.cs" />
|
||||
<Compile Include="JobDriver_CarryPrisonerToNutrientVat.cs" />
|
||||
<Compile Include="Pawn_Comps\ARA_CompSkillExperienceGiver\CompProperties_SkillExperienceGiver.cs" />
|
||||
<Compile Include="Pawn_Comps\ARA_CompSkillExperienceGiver\CompSkillExperienceGiver.cs" />
|
||||
<Compile Include="Stat\StatWorker_IncubationInfo.cs" />
|
||||
|
||||
@@ -243,11 +243,18 @@ namespace ArachnaeSwarm
|
||||
return "PawnBiostarving".Translate(pawn.Named("PAWN"));
|
||||
}
|
||||
//修改点:禁止置入虫群成员
|
||||
if (pawn.health.hediffSet.HasHediff(ARA_HediffDefOf.ARA_HiveMindMaster) || pawn.health.hediffSet.HasHediff(ARA_HediffDefOf.ARA_HiveMindDrone) ||pawn.health.hediffSet.HasHediff(ARA_HediffDefOf.ARA_HiveMindWorker))
|
||||
if (pawn.health.hediffSet.HasHediff(ARA_HediffDefOf.ARA_HiveMindMaster) || pawn.health.hediffSet.HasHediff(ARA_HediffDefOf.ARA_HiveMindDrone) || pawn.health.hediffSet.HasHediff(ARA_HediffDefOf.ARA_HiveMindWorker))
|
||||
{
|
||||
return "PawnIsHiveMember".Translate(pawn.Named("PAWN"));
|
||||
}
|
||||
return pawn.IsColonist && !pawn.IsQuestLodger();
|
||||
|
||||
//修改点:允许殖民者、囚犯和奴隶
|
||||
bool isColonist = pawn.IsColonist;
|
||||
bool isPrisoner = pawn.IsPrisonerOfColony;
|
||||
bool isSlave = pawn.IsSlaveOfColony;
|
||||
|
||||
// 允许殖民者、囚犯或奴隶,但不能是任务寄宿者
|
||||
return (isColonist || isPrisoner || isSlave) && !pawn.IsQuestLodger();
|
||||
}
|
||||
|
||||
public override void TryAcceptPawn(Pawn pawn)
|
||||
@@ -305,53 +312,26 @@ namespace ArachnaeSwarm
|
||||
{
|
||||
// You can add sound effects here if you want, e.g., SoundDefOf.GrowthVat_Open.PlayOneShot(SoundInfo.InMap(this));
|
||||
}
|
||||
|
||||
public override IEnumerable<Gizmo> GetGizmos()
|
||||
{
|
||||
// Keep base gizmos
|
||||
// 原有的基础Gizmos
|
||||
foreach (Gizmo gizmo in base.GetGizmos())
|
||||
{
|
||||
yield return gizmo;
|
||||
}
|
||||
//修改点:删除了弹出功能
|
||||
|
||||
// 修改点:删除了弹出功能
|
||||
if (base.Working)
|
||||
{
|
||||
//yield return new Command_Action
|
||||
//{
|
||||
// defaultLabel = "CommandCancelGrowth".Translate(), // Label can be changed
|
||||
// defaultDesc = "CommandCancelGrowthDesc".Translate(), // Desc can be changed
|
||||
// icon = ContentFinder<Texture2D>.Get("UI/Designators/Cancel"),
|
||||
// action = () =>
|
||||
// {
|
||||
// Finish();
|
||||
// innerContainer.TryDropAll(InteractionCell, base.Map, ThingPlaceMode.Near);
|
||||
// }
|
||||
//};
|
||||
// 原有的工作状态下的Gizmos
|
||||
}
|
||||
else
|
||||
{
|
||||
//if (selectedPawn != null)
|
||||
//{
|
||||
// yield return new Command_Action
|
||||
// {
|
||||
// defaultLabel = "CommandCancelLoad".Translate(),
|
||||
// defaultDesc = "CommandCancelLoadDesc".Translate(),
|
||||
// icon = ContentFinder<Texture2D>.Get("UI/Designators/Cancel"),
|
||||
// action = () =>
|
||||
// {
|
||||
// if (selectedPawn?.CurJobDef == JobDefOf.EnterBuilding)
|
||||
// {
|
||||
// selectedPawn.jobs.EndCurrentJob(JobCondition.InterruptForced);
|
||||
// }
|
||||
// OnStop();
|
||||
// }
|
||||
// };
|
||||
//}
|
||||
|
||||
// 原有的选择殖民者的操作
|
||||
var command_Action = new Command_Action
|
||||
{
|
||||
defaultLabel = "InsertPerson".Translate() + "...",
|
||||
defaultDesc = "InsertPersonGrowthVatDesc".Translate(), // Desc can be changed
|
||||
defaultDesc = "InsertPersonGrowthVatDesc".Translate(),
|
||||
icon = Building_GrowthVat.InsertPawnIcon.Texture,
|
||||
action = () =>
|
||||
{
|
||||
@@ -375,6 +355,49 @@ namespace ArachnaeSwarm
|
||||
command_Action.Disable("NoViablePawns".Translate());
|
||||
}
|
||||
yield return command_Action;
|
||||
|
||||
// 新增:指派搬运囚犯/奴隶的操作
|
||||
var command_CarryPrisoner = new Command_Action
|
||||
{
|
||||
defaultLabel = "AssignCarryPrisoner".Translate() + "...",
|
||||
defaultDesc = "AssignCarryPrisonerDesc".Translate(),
|
||||
icon = ContentFinder<Texture2D>.Get("UI/Commands/Attack"),
|
||||
action = () =>
|
||||
{
|
||||
List<FloatMenuOption> list = new List<FloatMenuOption>();
|
||||
|
||||
// 获取所有可接受的囚犯和奴隶
|
||||
foreach (Pawn p in base.Map.mapPawns.AllPawnsSpawned)
|
||||
{
|
||||
if ((bool)CanAcceptPawn(p) && (p.IsPrisonerOfColony || p.IsSlaveOfColony))
|
||||
{
|
||||
list.Add(new FloatMenuOption(
|
||||
p.LabelCap + " (" + (p.IsPrisonerOfColony ? "Prisoner" : "Slave") + ")",
|
||||
() => AssignCarrierForPrisoner(p),
|
||||
p,
|
||||
Color.white
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
if (!list.Any())
|
||||
{
|
||||
list.Add(new FloatMenuOption("NoPrisonersOrSlaves".Translate(), null));
|
||||
}
|
||||
Find.WindowStack.Add(new FloatMenu(list));
|
||||
}
|
||||
};
|
||||
|
||||
// 检查是否有可用的囚犯/奴隶
|
||||
bool hasPrisonersOrSlaves = base.Map.mapPawns.AllPawnsSpawned
|
||||
.Any(p => (bool)CanAcceptPawn(p) && (p.IsPrisonerOfColony || p.IsSlaveOfColony));
|
||||
|
||||
if (!hasPrisonersOrSlaves)
|
||||
{
|
||||
command_CarryPrisoner.Disable("NoPrisonersOrSlaves".Translate());
|
||||
}
|
||||
|
||||
yield return command_CarryPrisoner;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -443,5 +466,78 @@ namespace ArachnaeSwarm
|
||||
TopGraphic.Draw(DrawPos + Altitudes.AltIncVect * 2f, base.Rotation, this);
|
||||
}
|
||||
}
|
||||
public Job CreateCarryJobForPrisoner(Pawn prisoner, Pawn carrier)
|
||||
{
|
||||
if (prisoner == null || carrier == null)
|
||||
return null;
|
||||
if (!CanAcceptPawn(prisoner).Accepted)
|
||||
return null;
|
||||
// 创建搬运工作定义
|
||||
JobDef carryJobDef = DefDatabase<JobDef>.GetNamed("ARA_CarryPrisonerToNutrientVat");
|
||||
if (carryJobDef == null)
|
||||
return null;
|
||||
Job job = JobMaker.MakeJob(carryJobDef, prisoner, this);
|
||||
job.count = 1;
|
||||
return job;
|
||||
}
|
||||
public IEnumerable<Pawn> GetAvailableCarriers()
|
||||
{
|
||||
foreach (Pawn pawn in base.Map.mapPawns.AllPawnsSpawned)
|
||||
{
|
||||
// 检查是否是虫群成员(拥有ARA_HiveMindDrone)
|
||||
if (pawn.health.hediffSet.HasHediff(ARA_HediffDefOf.ARA_HiveMindDrone) ||
|
||||
pawn.health.hediffSet.HasHediff(ARA_HediffDefOf.ARA_HiveMindWorker) ||
|
||||
pawn.health.hediffSet.HasHediff(ARA_HediffDefOf.ARA_HiveMindMaster))
|
||||
{
|
||||
// 检查是否能够工作且不是囚犯
|
||||
if (pawn.workSettings != null && pawn.workSettings.WorkIsActive(WorkTypeDefOf.Hauling) &&
|
||||
!pawn.Downed && !pawn.IsPrisoner && pawn.CanReach(this, PathEndMode.InteractionCell, Danger.Some))
|
||||
{
|
||||
yield return pawn;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
public void AssignCarrierForPrisoner(Pawn prisoner)
|
||||
{
|
||||
if (prisoner == null)
|
||||
return;
|
||||
// 获取可用的搬运者
|
||||
var availableCarriers = GetAvailableCarriers().ToList();
|
||||
|
||||
if (!availableCarriers.Any())
|
||||
{
|
||||
Messages.Message("NoAvailableHiveCarriers".Translate(), MessageTypeDefOf.RejectInput);
|
||||
return;
|
||||
}
|
||||
// 创建浮动菜单选择搬运者
|
||||
List<FloatMenuOption> options = new List<FloatMenuOption>();
|
||||
|
||||
foreach (Pawn carrier in availableCarriers)
|
||||
{
|
||||
options.Add(new FloatMenuOption(
|
||||
carrier.LabelCap,
|
||||
() =>
|
||||
{
|
||||
Job carryJob = CreateCarryJobForPrisoner(prisoner, carrier);
|
||||
if (carryJob != null)
|
||||
{
|
||||
carrier.jobs.TryTakeOrderedJob(carryJob, JobTag.MiscWork);
|
||||
Messages.Message("CarrierAssigned".Translate(carrier.LabelShort, prisoner.LabelShort), MessageTypeDefOf.NeutralEvent);
|
||||
}
|
||||
},
|
||||
carrier,
|
||||
Color.white
|
||||
));
|
||||
}
|
||||
if (options.Any())
|
||||
{
|
||||
Find.WindowStack.Add(new FloatMenu(options));
|
||||
}
|
||||
else
|
||||
{
|
||||
Messages.Message("NoAvailableCarriers".Translate(), MessageTypeDefOf.RejectInput);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
63
Source/ArachnaeSwarm/JobDriver_CarryPrisonerToNutrientVat.cs
Normal file
63
Source/ArachnaeSwarm/JobDriver_CarryPrisonerToNutrientVat.cs
Normal file
@@ -0,0 +1,63 @@
|
||||
using RimWorld;
|
||||
using System.Collections.Generic;
|
||||
using Verse;
|
||||
using Verse.AI;
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
public class JobDriver_CarryPrisonerToNutrientVat : JobDriver
|
||||
{
|
||||
private const TargetIndex PrisonerInd = TargetIndex.A;
|
||||
private const TargetIndex VatInd = TargetIndex.B;
|
||||
|
||||
protected Pawn Prisoner => (Pawn)job.GetTarget(PrisonerInd).Thing;
|
||||
protected Building_NutrientVat Vat => (Building_NutrientVat)job.GetTarget(VatInd).Thing;
|
||||
|
||||
public override bool TryMakePreToilReservations(bool errorOnFailed)
|
||||
{
|
||||
return pawn.Reserve(Prisoner, job, 1, -1, null, errorOnFailed)
|
||||
&& pawn.Reserve(Vat, job, 1, -1, null, errorOnFailed);
|
||||
}
|
||||
|
||||
protected override IEnumerable<Toil> MakeNewToils() // 改为 protected
|
||||
{
|
||||
// 验证目标
|
||||
this.FailOnDestroyedOrNull(PrisonerInd);
|
||||
this.FailOnDestroyedOrNull(VatInd);
|
||||
this.FailOn(() => !Vat.CanAcceptPawn(Prisoner).Accepted);
|
||||
|
||||
// 1. 前往囚犯位置
|
||||
yield return Toils_Goto.GotoThing(PrisonerInd, PathEndMode.OnCell)
|
||||
.FailOn(() => Prisoner.IsInNutrientVat())
|
||||
.FailOnSomeonePhysicallyInteracting(PrisonerInd);
|
||||
|
||||
// 2. 开始搬运囚犯
|
||||
yield return Toils_Haul.StartCarryThing(PrisonerInd);
|
||||
|
||||
// 3. 前往消化缸
|
||||
yield return Toils_Goto.GotoThing(VatInd, PathEndMode.InteractionCell);
|
||||
|
||||
// 4. 将囚犯放入消化缸
|
||||
yield return new Toil
|
||||
{
|
||||
initAction = () =>
|
||||
{
|
||||
if (Vat.CanAcceptPawn(Prisoner).Accepted)
|
||||
{
|
||||
Vat.TryAcceptPawn(Prisoner);
|
||||
}
|
||||
},
|
||||
defaultCompleteMode = ToilCompleteMode.Instant
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
// 扩展方法检查pawn是否在消化缸中
|
||||
public static class PawnExtensions
|
||||
{
|
||||
public static bool IsInNutrientVat(this Pawn pawn)
|
||||
{
|
||||
return pawn?.Spawned == false && pawn.ParentHolder is Building_NutrientVat;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user