暂存
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
using HarmonyLib;
|
||||
using RimWorld;
|
||||
using Verse;
|
||||
using Verse.AI;
|
||||
using Verse.AI.Group;
|
||||
using UnityEngine;
|
||||
|
||||
namespace WulaFallenEmpire.HarmonyPatches
|
||||
{
|
||||
[HarmonyPatch(typeof(JobGiver_GatherOfferingsForPsychicRitual), "TryGiveJob")]
|
||||
public static class Patch_JobGiver_GatherOfferingsForPsychicRitual_TryGiveJob
|
||||
{
|
||||
[HarmonyPrefix]
|
||||
public static bool Prefix(Pawn pawn, ref Job __result)
|
||||
{
|
||||
Lord lord = pawn.GetLord();
|
||||
if (lord == null)
|
||||
{
|
||||
return true; // Continue to original method
|
||||
}
|
||||
|
||||
if (!(lord.CurLordToil is LordToil_PsychicRitual lordToil_PsychicRitual))
|
||||
{
|
||||
return true; // Continue to original method
|
||||
}
|
||||
|
||||
var ritualDef = lordToil_PsychicRitual.RitualData.psychicRitual.def as PsychicRitualDef_WulaBase;
|
||||
if (ritualDef == null)
|
||||
{
|
||||
return true; // Not our custom ritual, continue to original method
|
||||
}
|
||||
|
||||
if (ritualDef.RequiredOffering == null)
|
||||
{
|
||||
__result = null;
|
||||
return false; // Stop original method
|
||||
}
|
||||
|
||||
PsychicRitual psychicRitual = lordToil_PsychicRitual.RitualData.psychicRitual;
|
||||
PsychicRitualRoleDef psychicRitualRoleDef = psychicRitual.assignments.RoleForPawn(pawn);
|
||||
if (psychicRitualRoleDef == null)
|
||||
{
|
||||
__result = null;
|
||||
return false; // Stop original method
|
||||
}
|
||||
|
||||
float num = PsychicRitualToil_GatherOfferings.PawnsOfferingCount(psychicRitual.assignments.AssignedPawns(psychicRitualRoleDef), ritualDef.RequiredOffering);
|
||||
int needed = Mathf.CeilToInt(ritualDef.RequiredOffering.GetBaseCount() - num);
|
||||
if (needed == 0)
|
||||
{
|
||||
__result = null;
|
||||
return false; // Stop original method
|
||||
}
|
||||
|
||||
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);
|
||||
});
|
||||
|
||||
if (thing2 == null)
|
||||
{
|
||||
__result = null;
|
||||
return false; // Stop original method
|
||||
}
|
||||
|
||||
Job job = JobMaker.MakeJob(JobDefOf.TakeCountToInventory, thing2);
|
||||
job.count = Mathf.Min(needed, thing2.stackCount);
|
||||
__result = job;
|
||||
|
||||
return false; // Stop original method, we've provided the result
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user