jptrrs / HumanResources

A technology overhaul for RimWorld
MIT License
17 stars 12 forks source link

Having an accessible "Study" bill for an already-known technology causes the pawn to simply stand in place indefinately #76

Closed ELLIOTTCABLE closed 3 years ago

ELLIOTTCABLE commented 4 years ago

When I create a study-bill for a pawn, and select a single technology that that pawn already knows, said pawn will stand around indefinitely, frozen in place, instead of falling-through to other, lower-priority tasks.

(This is circumventable by carefully limiting "study" bills; but it results in a lot of micro-management; for instance, I can't just create a "Study electricity" bill accessible by any pawn, or it'll freeze half my pawns in place.)

These errors show up in the devlog when a pawn's top task is "studying" at the study-desk, but the only allowed technologies are ones they already know:

[HumanResources] Mister tried to learn a null project.
Verse.Log:Warning(String, Boolean)
HumanResources.<>c__DisplayClass1_0:<MakeNewToils>b__1()
Verse.AI.<>c__DisplayClass1_0`1:<FailOn>b__0()
Verse.AI.JobDriver:CheckCurrentToilEndOrFail()
Verse.AI.JobDriver:TryActuallyStartNextToil()
Verse.AI.JobDriver:ReadyForNextToil()
Verse.AI.Pawn_JobTracker:Verse.AI.Pawn_JobTracker.StartJob_Patch3(Pawn_JobTracker, Job, JobCondition, ThinkNode, Boolean, Boolean, ThinkTreeDef, Nullable`1, Boolean, Boolean)
Verse.AI.Pawn_JobTracker:TryFindAndStartJob()
Verse.AI.Pawn_JobTracker:Verse.AI.Pawn_JobTracker.EndCurrentJob_Patch1(Pawn_JobTracker, JobCondition, Boolean, Boolean)
Verse.AI.JobDriver:EndJobWith(JobCondition)
Verse.AI.Pawn_JobTracker:Verse.AI.Pawn_JobTracker.TryTakeOrderedJob_Patch2(Pawn_JobTracker, Job, JobTag)
Verse.AI.Pawn_JobTracker:Verse.AI.Pawn_JobTracker.TryTakeOrderedJobPrioritizedWork_Patch1(Pawn_JobTracker, Job, WorkGiver, IntVec3)
RimWorld.<>c__DisplayClass8_2:<AddJobGiverWorkOrders>b__1()
AchtungMod.MultiAction:<GetAction>b__8_0()
AchtungMod.<>c:<GetOption>b__12_16(MultiAction)
AchtungMod.Tools:Do(IEnumerable`1, Action`1)
AchtungMod.<>c__DisplayClass12_0:<GetOption>b__13()
Verse.FloatMenuOption:Chosen(Boolean, FloatMenu)
Verse.FloatMenuOption:Verse.FloatMenuOption.DoGUI_Patch1(FloatMenuOption, Rect, Boolean, FloatMenu)
Verse.FloatMenu:DoWindowContents(Rect)
Verse.Window:InnerWindowOnGUI(Int32)
UnityEngine.GUI:CallWindowDelegate(WindowFunction, Int32, Int32, GUISkin, Int32, Single, Single, GUIStyle)
Mister started 10 jobs in one tick. newJob=LearnTech (Job_3220124) A=Thing_StudyDesk289461 jobGiver=RimWorld.JobGiver_Work jobList=(LearnTech (Job_3220104) A=Thing_StudyDesk289461) (LearnTech (Job_3220106) A=Thing_StudyDesk289461) (LearnTech (Job_3220108) A=Thing_StudyDesk289461) (LearnTech (Job_3220110) A=Thing_StudyDesk289461) (LearnTech (Job_3220112) A=Thing_StudyDesk289461) (LearnTech (Job_3220114) A=Thing_StudyDesk289461) (LearnTech (Job_3220116) A=Thing_StudyDesk289461) (LearnTech (Job_3220118) A=Thing_StudyDesk289461) (LearnTech (Job_3220120) A=Thing_StudyDesk289461) (LearnTech (Job_3220122) A=Thing_StudyDesk289461) (LearnTech (Job_3220124) A=Thing_StudyDesk289461) 
Verse.Log:Warning(String, Boolean)
Verse.AI.JobUtility:Verse.AI.JobUtility.TryStartErrorRecoverJob_Patch0(Pawn, String, Exception, JobDriver)
Verse.AI.Pawn_JobTracker:Verse.AI.Pawn_JobTracker.StartJob_Patch3(Pawn_JobTracker, Job, JobCondition, ThinkNode, Boolean, Boolean, ThinkTreeDef, Nullable`1, Boolean, Boolean)
Verse.AI.Pawn_JobTracker:TryFindAndStartJob()
Verse.AI.Pawn_JobTracker:Verse.AI.Pawn_JobTracker.EndCurrentJob_Patch1(Pawn_JobTracker, JobCondition, Boolean, Boolean)
Verse.AI.JobDriver:EndJobWith(JobCondition)
Verse.AI.JobDriver:CheckCurrentToilEndOrFail()
Verse.AI.JobDriver:TryActuallyStartNextToil()
Verse.AI.JobDriver:ReadyForNextToil()
Verse.AI.Pawn_JobTracker:Verse.AI.Pawn_JobTracker.StartJob_Patch3(Pawn_JobTracker, Job, JobCondition, ThinkNode, Boolean, Boolean, ThinkTreeDef, Nullable`1, Boolean, Boolean)
Verse.AI.Pawn_JobTracker:TryFindAndStartJob()
Verse.AI.Pawn_JobTracker:Verse.AI.Pawn_JobTracker.EndCurrentJob_Patch1(Pawn_JobTracker, JobCondition, Boolean, Boolean)
Verse.AI.JobDriver:EndJobWith(JobCondition)
Verse.AI.JobDriver:CheckCurrentToilEndOrFail()
Verse.AI.JobDriver:TryActuallyStartNextToil()
Verse.AI.JobDriver:ReadyForNextToil()
Verse.AI.Pawn_JobTracker:Verse.AI.Pawn_JobTracker.StartJob_Patch3(Pawn_JobTracker, Job, JobCondition, ThinkNode, Boolean, Boolean, ThinkTreeDef, Nullable`1, Boolean, Boolean)
Verse.AI.Pawn_JobTracker:TryFindAndStartJob()
Verse.AI.Pawn_JobTracker:Verse.AI.Pawn_JobTracker.EndCurrentJob_Patch1(Pawn_JobTracker, JobCondition, Boolean, Boolean)
Verse.AI.JobDriver:EndJobWith(JobCondition)
Verse.AI.JobDriver:CheckCurrentToilEndOrFail()
Verse.AI.JobDriver:TryActuallyStartNextToil()
Verse.AI.JobDriver:ReadyForNextToil()
Verse.AI.Pawn_JobTracker:Verse.AI.Pawn_JobTracker.StartJob_Patch3(Pawn_JobTracker, Job, JobCondition, ThinkNode, Boolean, Boolean, ThinkTreeDef, Nullable`1, Boolean, Boolean)
Verse.AI.Pawn_JobTracker:TryFindAndStartJob()
Verse.AI.Pawn_JobTracker:Verse.AI.Pawn_JobTracker.EndCurrentJob_Patch1(Pawn_JobTracker, JobCondition, Boolean, Boolean)
Verse.AI.JobDriver:EndJobWith(JobCondition)
Verse.AI.JobDriver:CheckCurrentToilEndOrFail()
Verse.AI.JobDriver:TryActuallyStartNextToil()
Verse.AI.JobDriver:ReadyForNextToil()
Verse.AI.Pawn_JobTracker:Verse.AI.Pawn_JobTracker.StartJob_Patch3(Pawn_JobTracker, Job, JobCondition, ThinkNode, Boolean, Boolean, ThinkTreeDef, Nullable`1, Boolean, Boolean)
Verse.AI.Pawn_JobTracker:TryFindAndStartJob()
Verse.AI.Pawn_JobTracker:Verse.AI.Pawn_JobTracker.EndCurrentJob_Patch1(Pawn_JobTracker, JobCondition, Boolean, Boolean)
Verse.AI.JobDriver:EndJobWith(JobCondition)
Verse.AI.JobDriver:CheckCurrentToilEndOrFail()
Verse.AI.JobDriver:TryActuallyStartNextToil()
Verse.AI.JobDriver:ReadyForNextToil()
Verse.AI.Pawn_JobTracker:Verse.AI.Pawn_JobTracker.StartJob_Patch3(Pawn_JobTracker, Job, JobCondition, ThinkNode, Boolean, Boolean, ThinkTreeDef, Nullable`1, Boolean, Boolean)
Verse.AI.Pawn_JobTracker:TryFindAndStartJob()
Verse.AI.Pawn_JobTracker:Verse.AI.Pawn_JobTracker.EndCurrentJob_Patch1(Pawn_JobTracker, JobCondition, Boolean, Boolean)
Verse.AI.JobDriver:EndJobWith(JobCondition)
Verse.AI.JobDriver:CheckCurrentToilEndOrFail()
Verse.AI.JobDriver:TryActuallyStartNextToil()
Verse.AI.JobDriver:ReadyForNextToil()
Verse.AI.Pawn_JobTracker:Verse.AI.Pawn_JobTracker.StartJob_Patch3(Pawn_JobTracker, Job, JobCondition, ThinkNode, Boolean, Boolean, ThinkTreeDef, Nullable`1, Boolean, Boolean)
Verse.AI.Pawn_JobTracker:TryFindAndStartJob()
Verse.AI.Pawn_JobTracker:Verse.AI.Pawn_JobTracker.EndCurrentJob_Patch1(Pawn_JobTracker, JobCondition, Boolean, Boolean)
Verse.AI.JobDriver:EndJobWith(JobCondition)
Verse.AI.JobDriver:CheckCurrentToilEndOrFail()
Verse.AI.JobDriver:TryActuallyStartNextToil()
Verse.AI.JobDriver:ReadyForNextToil()
Verse.AI.Pawn_JobTracker:Verse.AI.Pawn_JobTracker.StartJob_Patch3(Pawn_JobTracker, Job, JobCondition, ThinkNode, Boolean, Boolean, ThinkTreeDef, Nullable`1, Boolean, Boolean)
Verse.AI.Pawn_JobTracker:TryFindAndStartJob()
Verse.AI.Pawn_JobTracker:Verse.AI.Pawn_JobTracker.EndCurrentJob_Patch1(Pawn_JobTracker, JobCondition, Boolean, Boolean)
Verse.AI.JobDriver:EndJobWith(JobCondition)
Verse.AI.JobDriver:CheckCurrentToilEndOrFail()
Verse.AI.JobDriver:TryActuallyStartNextToil()
Verse.AI.JobDriver:ReadyForNextToil()
Verse.AI.Pawn_JobTracker:Verse.AI.Pawn_JobTracker.StartJob_Patch3(Pawn_JobTracker, Job, JobCondition, ThinkNode, Boolean, Boolean, ThinkTreeDef, Nullable`1, Boolean, Boolean)
Verse.AI.Pawn_JobTracker:TryFindAndStartJob()
Verse.AI.Pawn_JobTracker:Verse.AI.Pawn_JobTracker.EndCurrentJob_Patch1(Pawn_JobTracker, JobCondition, Boolean, Boolean)
Verse.AI.JobDriver:EndJobWith(JobCondition)
Verse.AI.JobDriver:CheckCurrentToilEndOrFail()
Verse.AI.JobDriver:TryActuallyStartNextToil()
Verse.AI.JobDriver:ReadyForNextToil()
Verse.AI.Pawn_JobTracker:Verse.AI.Pawn_JobTracker.StartJob_Patch3(Pawn_JobTracker, Job, JobCondition, ThinkNode, Boolean, Boolean, ThinkTreeDef, Nullable`1, Boolean, Boolean)
Verse.AI.Pawn_JobTracker:TryFindAndStartJob()
Verse.AI.Pawn_JobTracker:Verse.AI.Pawn_JobTracker.EndCurrentJob_Patch1(Pawn_JobTracker, JobCondition, Boolean, Boolean)
Verse.AI.JobDriver:EndJobWith(JobCondition)
Verse.AI.JobDriver:CheckCurrentToilEndOrFail()
Verse.AI.JobDriver:TryActuallyStartNextToil()
Verse.AI.JobDriver:ReadyForNextToil()
Verse.AI.Pawn_JobTracker:Verse.AI.Pawn_JobTracker.StartJob_Patch3(Pawn_JobTracker, Job, JobCondition, ThinkNode, Boolean, Boolean, ThinkTreeDef, Nullable`1, Boolean, Boolean)
Verse.AI.Pawn_JobTracker:TryFindAndStartJob()
Verse.AI.Pawn_JobTracker:Verse.AI.Pawn_JobTracker.EndCurrentJob_Patch1(Pawn_JobTracker, JobCondition, Boolean, Boolean)
Verse.AI.JobDriver:EndJobWith(JobCondition)
Verse.AI.JobDriver:CheckCurrentToilEndOrFail()
Verse.AI.JobDriver:TryActuallyStartNextToil()
Verse.AI.JobDriver:ReadyForNextToil()
Verse.AI.Pawn_JobTracker:Verse.AI.Pawn_JobTracker.StartJob_Patch3(Pawn_JobTracker, Job, JobCondition, ThinkNode, Boolean, Boolean, ThinkTreeDef, Nullable`1, Boolean, Boolean)
Verse.AI.Pawn_JobTracker:TryFindAndStartJob()
Verse.AI.Pawn_JobTracker:Verse.AI.Pawn_JobTracker.EndCurrentJob_Patch1(Pawn_JobTracker, JobCondition, Boolean, Boolean)
Verse.AI.JobDriver:EndJobWith(JobCondition)
Verse.AI.Pawn_JobTracker:Verse.AI.Pawn_JobTracker.TryTakeOrderedJob_Patch2(Pawn_JobTracker, Job, JobTag)
Verse.AI.Pawn_JobTracker:Verse.AI.Pawn_JobTracker.TryTakeOrderedJobPrioritizedWork_Patch1(Pawn_JobTracker, Job, WorkGiver, IntVec3)
RimWorld.<>c__DisplayClass8_2:<AddJobGiverWorkOrders>b__1()
AchtungMod.MultiAction:<GetAction>b__8_0()
AchtungMod.<>c:<GetOption>b__12_16(MultiAction)
AchtungMod.Tools:Do(IEnumerable`1, Action`1)
AchtungMod.<>c__DisplayClass12_0:<GetOption>b__13()
Verse.FloatMenuOption:Chosen(Boolean, FloatMenu)
Verse.FloatMenuOption:Verse.FloatMenuOption.DoGUI_Patch1(FloatMenuOption, Rect, Boolean, FloatMenu)
Verse.FloatMenu:DoWindowContents(Rect)
Verse.Window:InnerWindowOnGUI(Int32)
UnityEngine.GUI:CallWindowDelegate(WindowFunction, Int32, Int32, GUISkin, Int32, Single, Single, GUIStyle)
jptrrs commented 3 years ago

Please, check if it's still present on the latest update, version 0.16. Thanks.

jptrrs commented 3 years ago

I presume it isn't! :-)