diff --git a/1.3/Assemblies/WhatTheHack.dll b/1.3/Assemblies/WhatTheHack.dll index b6f9bd8..523841d 100644 Binary files a/1.3/Assemblies/WhatTheHack.dll and b/1.3/Assemblies/WhatTheHack.dll differ diff --git a/1.3/Source/WhatTheHack/Jobs/Depricated/JobDriver_Ability.cs b/1.3/Source/WhatTheHack/Jobs/Depricated/JobDriver_Ability.cs old mode 100644 new mode 100755 index 7a7a646..1cbc354 --- a/1.3/Source/WhatTheHack/Jobs/Depricated/JobDriver_Ability.cs +++ b/1.3/Source/WhatTheHack/Jobs/Depricated/JobDriver_Ability.cs @@ -27,7 +27,7 @@ private Pawn TargetPawn } } - public override IEnumerable MakeNewToils() + protected override IEnumerable MakeNewToils() { if(TargetA != null) { diff --git a/1.3/Source/WhatTheHack/Jobs/JobDriver_CarryToHackingTable.cs b/1.3/Source/WhatTheHack/Jobs/JobDriver_CarryToHackingTable.cs old mode 100644 new mode 100755 index 2b0c2bd..1c689e8 --- a/1.3/Source/WhatTheHack/Jobs/JobDriver_CarryToHackingTable.cs +++ b/1.3/Source/WhatTheHack/Jobs/JobDriver_CarryToHackingTable.cs @@ -31,7 +31,7 @@ public override bool TryMakePreToilReservations(bool errorOnFailed) return this.pawn.Reserve(this.Takee, this.job, 1, -1, null) && this.pawn.Reserve(this.HackingTable, this.job, 1, -1, null); } - public override IEnumerable MakeNewToils() + protected override IEnumerable MakeNewToils() { this.FailOnDestroyedOrNull(TargetIndex.A); this.FailOnDestroyedOrNull(TargetIndex.B); diff --git a/1.3/Source/WhatTheHack/Jobs/JobDriver_ClearHackingTable.cs b/1.3/Source/WhatTheHack/Jobs/JobDriver_ClearHackingTable.cs old mode 100644 new mode 100755 index a7a403a..1139b8c --- a/1.3/Source/WhatTheHack/Jobs/JobDriver_ClearHackingTable.cs +++ b/1.3/Source/WhatTheHack/Jobs/JobDriver_ClearHackingTable.cs @@ -31,7 +31,7 @@ public override bool TryMakePreToilReservations(bool errorOnFailed) return this.pawn.Reserve(this.Takee, this.job, 1, -1, null) && this.pawn.Reserve(this.HackingTable, this.job, 1, -1, null); } - public override IEnumerable MakeNewToils() + protected override IEnumerable MakeNewToils() { this.FailOnDestroyedOrNull(TargetIndex.A); this.FailOnDestroyedOrNull(TargetIndex.B); @@ -39,7 +39,8 @@ public override IEnumerable MakeNewToils() yield return Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.OnCell).FailOnDestroyedNullOrForbidden(TargetIndex.A).FailOnDespawnedNullOrForbidden(TargetIndex.B).FailOn(() => !this.pawn.CanReach(this.Takee, PathEndMode.OnCell, Danger.Deadly, false, false, TraverseMode.ByPawn)).FailOnSomeonePhysicallyInteracting(TargetIndex.A); Toil toil = new Toil(); toil.defaultCompleteMode = ToilCompleteMode.Instant; - toil.initAction = new Action(delegate { + toil.initAction = new Action(delegate + { Takee.jobs.EndCurrentJob(JobCondition.InterruptForced); Takee.health.surgeryBills.Clear(); }); @@ -53,7 +54,7 @@ public override IEnumerable MakeNewToils() { initAction = delegate { - this.pawn.carryTracker.TryDropCarriedThing(pawn.Position, ThingPlaceMode.Direct, out Thing thing, null); + this.pawn.carryTracker.TryDropCarriedThing(pawn.Position, ThingPlaceMode.Direct, out Thing thing, null); }, defaultCompleteMode = ToilCompleteMode.Instant }; diff --git a/1.3/Source/WhatTheHack/Jobs/JobDriver_ControlMechanoid.cs b/1.3/Source/WhatTheHack/Jobs/JobDriver_ControlMechanoid.cs old mode 100644 new mode 100755 index f2282dd..a1814c3 --- a/1.3/Source/WhatTheHack/Jobs/JobDriver_ControlMechanoid.cs +++ b/1.3/Source/WhatTheHack/Jobs/JobDriver_ControlMechanoid.cs @@ -20,7 +20,7 @@ private Pawn Mech return pawn.RemoteControlLink(); } } - public override IEnumerable MakeNewToils() + protected override IEnumerable MakeNewToils() { Toil toil = new Toil(); toil.defaultCompleteMode = ToilCompleteMode.Never; diff --git a/1.3/Source/WhatTheHack/Jobs/JobDriver_ControlMechanoid_GoTo.cs b/1.3/Source/WhatTheHack/Jobs/JobDriver_ControlMechanoid_GoTo.cs old mode 100644 new mode 100755 index ed49f8d..4c39950 --- a/1.3/Source/WhatTheHack/Jobs/JobDriver_ControlMechanoid_GoTo.cs +++ b/1.3/Source/WhatTheHack/Jobs/JobDriver_ControlMechanoid_GoTo.cs @@ -20,7 +20,7 @@ private Pawn Mech return pawn.RemoteControlLink(); } } - public override IEnumerable MakeNewToils() + protected override IEnumerable MakeNewToils() { Toil gotoCell = Toils_Goto.GotoCell(TargetIndex.A, PathEndMode.OnCell); gotoCell.FailOn(() => pawn.UnableToControl() || this.Mech.DestroyedOrNull() || this.Mech.Downed); diff --git a/1.3/Source/WhatTheHack/Jobs/JobDriver_HackRogueAI.cs b/1.3/Source/WhatTheHack/Jobs/JobDriver_HackRogueAI.cs old mode 100644 new mode 100755 index b1cb4d9..b4a3f0e --- a/1.3/Source/WhatTheHack/Jobs/JobDriver_HackRogueAI.cs +++ b/1.3/Source/WhatTheHack/Jobs/JobDriver_HackRogueAI.cs @@ -27,7 +27,7 @@ public override bool TryMakePreToilReservations(bool errorOnFailed) return true; } - public override IEnumerable MakeNewToils() + protected override IEnumerable MakeNewToils() { this.FailOnDespawnedNullOrForbidden(TargetIndex.A); this.FailOn(() => RogueAI.goingRogue == false); diff --git a/1.3/Source/WhatTheHack/Jobs/JobDriver_MechanoidAbility.cs b/1.3/Source/WhatTheHack/Jobs/JobDriver_MechanoidAbility.cs old mode 100644 new mode 100755 index ff6da6c..61ef108 --- a/1.3/Source/WhatTheHack/Jobs/JobDriver_MechanoidAbility.cs +++ b/1.3/Source/WhatTheHack/Jobs/JobDriver_MechanoidAbility.cs @@ -25,7 +25,7 @@ private Pawn TargetPawn } } - public override IEnumerable MakeNewToils() + protected override IEnumerable MakeNewToils() { if(TargetA != null && job.def.GetModExtension() is DefModExtension_Ability modExt) { diff --git a/1.3/Source/WhatTheHack/Jobs/JobDriver_MechanoidAbility_Overdrive.cs b/1.3/Source/WhatTheHack/Jobs/JobDriver_MechanoidAbility_Overdrive.cs old mode 100644 new mode 100755 diff --git a/1.3/Source/WhatTheHack/Jobs/JobDriver_Mechanoid_Rest.cs b/1.3/Source/WhatTheHack/Jobs/JobDriver_Mechanoid_Rest.cs old mode 100644 new mode 100755 index 2f720c9..178e62b --- a/1.3/Source/WhatTheHack/Jobs/JobDriver_Mechanoid_Rest.cs +++ b/1.3/Source/WhatTheHack/Jobs/JobDriver_Mechanoid_Rest.cs @@ -30,7 +30,7 @@ public override bool TryMakePreToilReservations(bool errorOnFailed) return result; } - public override IEnumerable MakeNewToils() + protected override IEnumerable MakeNewToils() { //this.AddFinishAction(new Action(delegate { Log.Message("finish action called for job!"); })); this.FailOnDespawnedOrNull(TargetIndex.A); diff --git a/1.3/Source/WhatTheHack/Jobs/JobDriver_PerformMaintenance.cs b/1.3/Source/WhatTheHack/Jobs/JobDriver_PerformMaintenance.cs old mode 100644 new mode 100755 index 0b743b0..ff4fcd3 --- a/1.3/Source/WhatTheHack/Jobs/JobDriver_PerformMaintenance.cs +++ b/1.3/Source/WhatTheHack/Jobs/JobDriver_PerformMaintenance.cs @@ -54,7 +54,7 @@ public override bool TryMakePreToilReservations(bool errorOnFailed) } return false; } - public override IEnumerable MakeNewToils() + protected override IEnumerable MakeNewToils() { this.FailOnAggroMentalState(TargetIndex.A); this.FailOnDespawnedNullOrForbidden(TargetIndex.A); diff --git a/1.3/Source/WhatTheHack/Jobs/JobGiver_ControlMechanoid.cs b/1.3/Source/WhatTheHack/Jobs/JobGiver_ControlMechanoid.cs old mode 100644 new mode 100755 index 0daae8c..6876e87 --- a/1.3/Source/WhatTheHack/Jobs/JobGiver_ControlMechanoid.cs +++ b/1.3/Source/WhatTheHack/Jobs/JobGiver_ControlMechanoid.cs @@ -9,7 +9,7 @@ namespace WhatTheHack.Jobs { class JobGiver_ControlMechanoid : ThinkNode_JobGiver { - public override Job TryGiveJob(Pawn pawn) + protected override Job TryGiveJob(Pawn pawn) { if(pawn.RemoteControlLink() != null && Utilities.QuickDistance(pawn.Position, pawn.RemoteControlLink().Position) <= Utilities.GetRemoteControlRadius(pawn) - 5f) { diff --git a/1.3/Source/WhatTheHack/Jobs/JobGiver_ControlMechanoid_Follow.cs b/1.3/Source/WhatTheHack/Jobs/JobGiver_ControlMechanoid_Follow.cs old mode 100644 new mode 100755 index a0d3642..0596c69 --- a/1.3/Source/WhatTheHack/Jobs/JobGiver_ControlMechanoid_Follow.cs +++ b/1.3/Source/WhatTheHack/Jobs/JobGiver_ControlMechanoid_Follow.cs @@ -21,7 +21,7 @@ private int FollowJobExpireInterval } } - public override Job TryGiveJob(Pawn pawn) + protected override Job TryGiveJob(Pawn pawn) { Pawn followee = pawn.RemoteControlLink(); if (followee == null) diff --git a/1.3/Source/WhatTheHack/Jobs/JobGiver_Mechanoid_Ability.cs b/1.3/Source/WhatTheHack/Jobs/JobGiver_Mechanoid_Ability.cs old mode 100644 new mode 100755 index 81aefe0..13d6db5 --- a/1.3/Source/WhatTheHack/Jobs/JobGiver_Mechanoid_Ability.cs +++ b/1.3/Source/WhatTheHack/Jobs/JobGiver_Mechanoid_Ability.cs @@ -13,7 +13,7 @@ class JobGiver_Mechanoid_Ability : ThinkNode_JobGiver { float powerDrain = 40f; //Should store this globally. float fuelConsumption = 5f; //Should store this globally. - public override Job TryGiveJob(Pawn pawn) + protected override Job TryGiveJob(Pawn pawn) { if(pawn.health.hediffSet.HasHediff(WTH_DefOf.WTH_SelfDestruct) && pawn.health.summaryHealth.SummaryHealthPercent < 0.5f) { diff --git a/1.3/Source/WhatTheHack/Jobs/JobGiver_Mechanoid_Rest.cs b/1.3/Source/WhatTheHack/Jobs/JobGiver_Mechanoid_Rest.cs old mode 100644 new mode 100755 index a56b84f..fa18bfc --- a/1.3/Source/WhatTheHack/Jobs/JobGiver_Mechanoid_Rest.cs +++ b/1.3/Source/WhatTheHack/Jobs/JobGiver_Mechanoid_Rest.cs @@ -12,7 +12,7 @@ namespace WhatTheHack.Jobs { class JobGiver_Mechanoid_Rest : ThinkNode_JobGiver { - public override Job TryGiveJob(Pawn pawn) + protected override Job TryGiveJob(Pawn pawn) { Job job = null; if (pawn.IsActivated() && (pawn.ShouldRecharge() || pawn.ShouldBeMaintained())) diff --git a/1.3/Source/WhatTheHack/Jobs/JobGiver_Work_Mechanoid.cs b/1.3/Source/WhatTheHack/Jobs/JobGiver_Work_Mechanoid.cs old mode 100644 new mode 100755 diff --git a/1.3/Source/WhatTheHack/Jobs/WorkGiver_HackRogueAI.cs b/1.3/Source/WhatTheHack/Jobs/WorkGiver_HackRogueAI.cs old mode 100644 new mode 100755 diff --git a/1.3/Source/WhatTheHack/Jobs/WorkGiver_HaulMechanoid.cs b/1.3/Source/WhatTheHack/Jobs/WorkGiver_HaulMechanoid.cs old mode 100644 new mode 100755 diff --git a/1.3/Source/WhatTheHack/Jobs/WorkGiver_PerformMaintenance.cs b/1.3/Source/WhatTheHack/Jobs/WorkGiver_PerformMaintenance.cs old mode 100644 new mode 100755 diff --git a/1.3/Source/WhatTheHack/Jobs/WorkGiver_PerformMaintenanceUrgent.cs b/1.3/Source/WhatTheHack/Jobs/WorkGiver_PerformMaintenanceUrgent.cs old mode 100644 new mode 100755 diff --git a/1.3/Source/WhatTheHack/Recipes/Recipe_ModifyMechanoid_UninstallModule.cs b/1.3/Source/WhatTheHack/Recipes/Recipe_ModifyMechanoid_UninstallModule.cs old mode 100644 new mode 100755 index 7c9ae71..d3c2b13 --- a/1.3/Source/WhatTheHack/Recipes/Recipe_ModifyMechanoid_UninstallModule.cs +++ b/1.3/Source/WhatTheHack/Recipes/Recipe_ModifyMechanoid_UninstallModule.cs @@ -42,12 +42,14 @@ private static void Cleanup(Pawn pawn, HediffDef removedHediff) { pawnData.workTypes.RemoveAll((WorkTypeDef def) => ext.workTypes.Contains(def)); } + /* Disableled because after this part of code runs -> mechanoid will never do hunting (actualy this part breaks a lot of things) if (!pawn.health.hediffSet.hediffs.Exists((Hediff h) => h.def.HasModExtension())) { pawnData.workTypes = null; pawn.skills = null; pawn.workSettings = null; } + */ if(removedHediff == WTH_DefOf.WTH_RepairModule) { Base.RemoveComps(pawn); diff --git a/1.3/Source/WhatTheHack/Recipes/Recipe_ModifyMechanoid_WorkModule.cs b/1.3/Source/WhatTheHack/Recipes/Recipe_ModifyMechanoid_WorkModule.cs old mode 100644 new mode 100755 index d13cc3c..ac798ac --- a/1.3/Source/WhatTheHack/Recipes/Recipe_ModifyMechanoid_WorkModule.cs +++ b/1.3/Source/WhatTheHack/Recipes/Recipe_ModifyMechanoid_WorkModule.cs @@ -13,10 +13,14 @@ class Recipe_ModifyMechanoid_WorkModule : Recipe_ModifyMechanoid protected override void PostSuccessfulApply(Pawn pawn, BodyPartRecord part, Pawn billDoer, List ingredients, Bill bill) { base.PostSuccessfulApply(pawn, part, billDoer, ingredients, bill); - ExtendedPawnData pawnData = Base.Instance.GetExtendedDataStorage().GetExtendedDataFor(pawn); + if (pawn.skills == null || pawn.workSettings == null || Base.Instance.GetExtendedDataStorage().GetExtendedDataFor(pawn).workTypes == null) + { + //for people who became victums of NullReferenceException bug (reinitialize ALL mechanoid skills and worktypes) + Utilities.InitWorkTypesAndSkills(pawn, Base.Instance.GetExtendedDataStorage().GetExtendedDataFor(pawn)); + } if (bill.recipe.addsHediff.GetModExtension() is DefModExtension_Hediff_WorkModule modExt) { - + ExtendedPawnData pawnData = Base.Instance.GetExtendedDataStorage().GetExtendedDataFor(pawn); foreach (WorkTypeDef workType in modExt.workTypes) { pawnData.workTypes.Add(workType);