整理
This commit is contained in:
270
MCP/vector_cache/PsychicRitualToil_GatherOfferings.txt
Normal file
270
MCP/vector_cache/PsychicRitualToil_GatherOfferings.txt
Normal file
@@ -0,0 +1,270 @@
|
||||
根据向量相似度分析,与 'PsychicRitualToil_GatherOfferings' 最相关的代码定义如下:
|
||||
|
||||
---
|
||||
**文件路径 (精确匹配):** `C:\Steam\steamapps\common\RimWorld\Data\dll1.6\Verse.AI.Group\PsychicRitualToil_GatherOfferings.txt`
|
||||
|
||||
```csharp
|
||||
public class PsychicRitualToil_GatherOfferings : PsychicRitualToil
|
||||
{
|
||||
protected PsychicRitualRoleDef gathererRole;
|
||||
|
||||
protected bool offeringsGathered;
|
||||
|
||||
protected IngredientCount requiredOffering;
|
||||
|
||||
protected PsychicRitualToil_GatherOfferings()
|
||||
{
|
||||
}
|
||||
|
||||
public PsychicRitualToil_GatherOfferings(PsychicRitualRoleDef offeringGatherer, IngredientCount requiredOffering)
|
||||
{
|
||||
gathererRole = offeringGatherer;
|
||||
this.requiredOffering = requiredOffering;
|
||||
}
|
||||
|
||||
public override void UpdateAllDuties(PsychicRitual psychicRitual, PsychicRitualGraph parent)
|
||||
{
|
||||
DutyDef def;
|
||||
if (offeringsGathered || PawnsHaveOfferings(psychicRitual))
|
||||
{
|
||||
offeringsGathered = true;
|
||||
def = DutyDefOf.Idle;
|
||||
}
|
||||
else
|
||||
{
|
||||
def = DutyDefOf.GatherOfferingsForPsychicRitual;
|
||||
}
|
||||
foreach (Pawn item in psychicRitual.assignments.AssignedPawns(gathererRole))
|
||||
{
|
||||
SetPawnDuty(item, psychicRitual, parent, def);
|
||||
}
|
||||
}
|
||||
|
||||
public override bool Tick(PsychicRitual psychicRitual, PsychicRitualGraph parent)
|
||||
{
|
||||
return offeringsGathered;
|
||||
}
|
||||
|
||||
public override void ExposeData()
|
||||
{
|
||||
base.ExposeData();
|
||||
Scribe_Defs.Look(ref gathererRole, "gathererRole");
|
||||
Scribe_Values.Look(ref offeringsGathered, "offeringsGathered", defaultValue: false);
|
||||
Scribe_Deep.Look(ref requiredOffering, "requiredOffering");
|
||||
}
|
||||
|
||||
public static float PawnsOfferingCount(IEnumerable<Pawn> pawns, IngredientCount offering)
|
||||
{
|
||||
float num = 0f;
|
||||
foreach (Pawn pawn in pawns)
|
||||
{
|
||||
foreach (Thing item in (IEnumerable<Thing>)pawn.inventory.GetDirectlyHeldThings())
|
||||
{
|
||||
if (offering.filter.Allows(item))
|
||||
{
|
||||
num += (float)item.stackCount;
|
||||
if (num >= offering.GetBaseCount())
|
||||
{
|
||||
return offering.GetBaseCount();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return num;
|
||||
}
|
||||
|
||||
private bool PawnsHaveOfferings(PsychicRitual psychicRitual)
|
||||
{
|
||||
float baseCount = requiredOffering.GetBaseCount();
|
||||
return PawnsOfferingCount(psychicRitual.assignments.AssignedPawns(gathererRole), requiredOffering) >= baseCount;
|
||||
}
|
||||
|
||||
public override void Notify_PawnJobDone(PsychicRitual psychicRitual, PsychicRitualGraph parent, Pawn pawn, Job job, JobCondition condition)
|
||||
{
|
||||
base.Notify_PawnJobDone(psychicRitual, parent, pawn, job, condition);
|
||||
if (psychicRitual.assignments.RoleForPawn(pawn) == gathererRole && (offeringsGathered || PawnsHaveOfferings(psychicRitual)))
|
||||
{
|
||||
offeringsGathered = true;
|
||||
SetPawnDuty(pawn, psychicRitual, parent, DutyDefOf.Idle);
|
||||
}
|
||||
}
|
||||
|
||||
public override ThinkResult Notify_DutyResult(PsychicRitual psychicRitual, PsychicRitualGraph parent, ThinkResult result, Pawn pawn, JobIssueParams issueParams)
|
||||
{
|
||||
result = base.Notify_DutyResult(psychicRitual, parent, result, pawn, issueParams);
|
||||
if (result.Job != null)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
if (psychicRitual.assignments.RoleForPawn(pawn) != gathererRole)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
if (offeringsGathered || PawnsHaveOfferings(psychicRitual))
|
||||
{
|
||||
offeringsGathered = true;
|
||||
SetPawnDuty(pawn, psychicRitual, parent, DutyDefOf.Idle);
|
||||
return new ThinkResult(JobMaker.MakeJob(JobDefOf.Wait, 1), null);
|
||||
}
|
||||
TaggedString reason = "PsychicRitualToil_GatherOfferings_OfferingUnavailable".Translate(pawn.Named("PAWN"), requiredOffering.filter.Summary);
|
||||
psychicRitual.LeaveOrCancelPsychicRitual(gathererRole, pawn, reason);
|
||||
return result;
|
||||
}
|
||||
|
||||
public override string GetJobReport(PsychicRitual psychicRitual, PsychicRitualGraph parent, Pawn pawn)
|
||||
{
|
||||
if (psychicRitual.assignments.RoleForPawn(pawn) == gathererRole)
|
||||
{
|
||||
return "PsychicRitualToil_GatherOfferings_JobReport".Translate();
|
||||
}
|
||||
return base.GetJobReport(psychicRitual, parent, pawn);
|
||||
}
|
||||
}
|
||||
```
|
||||
---
|
||||
**文件路径:** `C:\Steam\steamapps\common\RimWorld\Data\dll1.6\RimWorld\JobGiver_GatherOfferingsForPsychicRitual.txt`
|
||||
**相似度:** 0.8171
|
||||
|
||||
```csharp
|
||||
public class JobGiver_GatherOfferingsForPsychicRitual : ThinkNode_JobGiver
|
||||
{
|
||||
protected override Job TryGiveJob(Pawn pawn)
|
||||
{
|
||||
Lord lord = pawn.GetLord();
|
||||
if (lord == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
if (!(lord.CurLordToil is LordToil_PsychicRitual lordToil_PsychicRitual))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
PsychicRitualDef def = lordToil_PsychicRitual.RitualData.psychicRitual.def;
|
||||
PsychicRitualDef_InvocationCircle ritualDef = def as PsychicRitualDef_InvocationCircle;
|
||||
if (ritualDef == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
if (ritualDef.RequiredOffering == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
PsychicRitual psychicRitual = lordToil_PsychicRitual.RitualData.psychicRitual;
|
||||
PsychicRitualRoleDef psychicRitualRoleDef = psychicRitual.assignments.RoleForPawn(pawn);
|
||||
if (psychicRitualRoleDef == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
float num = PsychicRitualToil_GatherOfferings.PawnsOfferingCount(psychicRitual.assignments.AssignedPawns(psychicRitualRoleDef), ritualDef.RequiredOffering);
|
||||
int needed = Mathf.CeilToInt(ritualDef.RequiredOffering.GetBaseCount() - num);
|
||||
if (needed == 0)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
Thing thing2 = GenClosest.ClosestThingReachable(pawn.PositionHeld, pawn.MapHeld, ThingRequest.ForGroup(ThingRequestGroup.HaulableAlways), PathEndMode.Touch, TraverseParms.For(pawn), 9999f, delegate(Thing thing)
|
||||
{
|
||||
if (!ritualDef.RequiredOffering.filter.Allows(thing))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (thing.IsForbidden(pawn))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
int stackCount = Mathf.Min(needed, thing.stackCount);
|
||||
return pawn.CanReserve(thing, 10, stackCount) ? true : false;
|
||||
});
|
||||
if (thing2 == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
Job job = JobMaker.MakeJob(JobDefOf.TakeCountToInventory, thing2);
|
||||
job.count = Mathf.Min(needed, thing2.stackCount);
|
||||
return job;
|
||||
}
|
||||
}
|
||||
```
|
||||
---
|
||||
**文件路径:** `C:\Steam\steamapps\common\RimWorld\Data\dll1.6\Verse.AI.Group\PsychicRitualToil_GatherForInvocation.txt`
|
||||
**相似度:** 0.7774
|
||||
|
||||
```csharp
|
||||
public class PsychicRitualToil_GatherForInvocation : PsychicRitualToil_Multiplex
|
||||
{
|
||||
protected PsychicRitualToil_Goto fallbackToil;
|
||||
|
||||
protected PsychicRitualGraph invokerToil;
|
||||
|
||||
protected PsychicRitualToil_Goto invokerFinalToil;
|
||||
|
||||
private static List<Pawn> blockingPawns = new List<Pawn>(16);
|
||||
|
||||
protected PsychicRitualToil_GatherForInvocation()
|
||||
{
|
||||
}
|
||||
|
||||
protected PsychicRitualToil_GatherForInvocation(PsychicRitualDef_InvocationCircle def, PsychicRitualToil_Goto fallbackToil, PsychicRitualGraph invokerToil)
|
||||
: base(new Dictionary<PsychicRitualRoleDef, PsychicRitualToil> { { def.InvokerRole, invokerToil } }, fallbackToil)
|
||||
{
|
||||
this.fallbackToil = fallbackToil;
|
||||
this.invokerToil = invokerToil;
|
||||
invokerFinalToil = (PsychicRitualToil_Goto)invokerToil.GetToil(invokerToil.ToilCount - 1);
|
||||
}
|
||||
|
||||
public PsychicRitualToil_GatherForInvocation(PsychicRitual psychicRitual, PsychicRitualDef_InvocationCircle def, IReadOnlyDictionary<PsychicRitualRoleDef, List<IntVec3>> rolePositions)
|
||||
: this(def, FallbackToil(psychicRitual, def, rolePositions), InvokerToil(def, rolePositions))
|
||||
{
|
||||
}
|
||||
|
||||
public override void ExposeData()
|
||||
{
|
||||
base.ExposeData();
|
||||
Scribe_References.Look(ref fallbackToil, "fallbackToil");
|
||||
Scribe_References.Look(ref invokerToil, "invokerToil");
|
||||
Scribe_References.Look(ref invokerFinalToil, "invokerFinalToil");
|
||||
}
|
||||
|
||||
public override string GetReport(PsychicRitual psychicRitual, PsychicRitualGraph parent)
|
||||
{
|
||||
blockingPawns.Clear();
|
||||
blockingPawns.AddRange(fallbackToil.BlockingPawns);
|
||||
if (invokerToil.CurrentToil == invokerFinalToil)
|
||||
{
|
||||
blockingPawns.AddRange(invokerFinalToil.BlockingPawns);
|
||||
}
|
||||
else
|
||||
{
|
||||
blockingPawns.AddRange(invokerFinalToil.ControlledPawns(psychicRitual));
|
||||
}
|
||||
string text = "PsychicRitualToil_GatherForInvocation_Report".Translate();
|
||||
string text2 = blockingPawns.Select((Pawn pawn) => pawn.LabelShortCap).ToCommaList();
|
||||
return text + ": " + text2;
|
||||
}
|
||||
|
||||
public static PsychicRitualToil_Goto FallbackToil(PsychicRitual psychicRitual, PsychicRitualDef_InvocationCircle def, IReadOnlyDictionary<PsychicRitualRoleDef, List<IntVec3>> rolePositions)
|
||||
{
|
||||
return new PsychicRitualToil_Goto(rolePositions.Slice(rolePositions.Keys.Except(def.InvokerRole)));
|
||||
}
|
||||
|
||||
public static PsychicRitualGraph InvokerToil(PsychicRitualDef_InvocationCircle def, IReadOnlyDictionary<PsychicRitualRoleDef, List<IntVec3>> rolePositions)
|
||||
{
|
||||
return new PsychicRitualGraph(InvokerGatherPhaseToils(def, rolePositions))
|
||||
{
|
||||
willAdvancePastLastToil = false
|
||||
};
|
||||
}
|
||||
|
||||
public static IEnumerable<PsychicRitualToil> InvokerGatherPhaseToils(PsychicRitualDef_InvocationCircle def, IReadOnlyDictionary<PsychicRitualRoleDef, List<IntVec3>> rolePositions)
|
||||
{
|
||||
if (def.RequiredOffering != null)
|
||||
{
|
||||
yield return new PsychicRitualToil_GatherOfferings(def.InvokerRole, def.RequiredOffering);
|
||||
}
|
||||
if (def.TargetRole != null)
|
||||
{
|
||||
yield return new PsychicRitualToil_CarryAndGoto(def.InvokerRole, def.TargetRole, rolePositions);
|
||||
}
|
||||
yield return new PsychicRitualToil_Goto(rolePositions.Slice(def.InvokerRole));
|
||||
}
|
||||
}
|
||||
```
|
||||
Reference in New Issue
Block a user