From b2f2fe06d60c6e4ff8dfc178d3eaac6c288b592b Mon Sep 17 00:00:00 2001 From: Sn1p3rr3c0n Date: Fri, 24 Feb 2023 16:47:50 +0100 Subject: [PATCH] #647 added support for Quality Builder --- ...QualityBuilder_getPawnConstructionSkill.cs | 25 +++++++++++++++++++ .../Patch_QualityBuilder_pawnCanConstruct.cs | 22 ++++++++++++++++ .../Common/ProjectRimFactory_ModComponent.cs | 21 ++++++++++++++++ 3 files changed, 68 insertions(+) create mode 100644 Source/ProjectRimFactory/Common/HarmonyPatches/Patch_QualityBuilder_getPawnConstructionSkill.cs create mode 100644 Source/ProjectRimFactory/Common/HarmonyPatches/Patch_QualityBuilder_pawnCanConstruct.cs diff --git a/Source/ProjectRimFactory/Common/HarmonyPatches/Patch_QualityBuilder_getPawnConstructionSkill.cs b/Source/ProjectRimFactory/Common/HarmonyPatches/Patch_QualityBuilder_getPawnConstructionSkill.cs new file mode 100644 index 00000000..b94e699c --- /dev/null +++ b/Source/ProjectRimFactory/Common/HarmonyPatches/Patch_QualityBuilder_getPawnConstructionSkill.cs @@ -0,0 +1,25 @@ +using ProjectRimFactory.Drones; +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse; + +namespace ProjectRimFactory.Common.HarmonyPatches +{ + internal class Patch_QualityBuilder_getPawnConstructionSkill + { + static public bool Prefix(out int __result, Pawn pawn) + { + __result = 0; + if (pawn is Pawn_Drone) + { + __result = pawn.skills.GetSkill(SkillDefOf.Construction).Level; + return false; + } + return true; + } + } +} diff --git a/Source/ProjectRimFactory/Common/HarmonyPatches/Patch_QualityBuilder_pawnCanConstruct.cs b/Source/ProjectRimFactory/Common/HarmonyPatches/Patch_QualityBuilder_pawnCanConstruct.cs new file mode 100644 index 00000000..1c002a98 --- /dev/null +++ b/Source/ProjectRimFactory/Common/HarmonyPatches/Patch_QualityBuilder_pawnCanConstruct.cs @@ -0,0 +1,22 @@ +using ProjectRimFactory.Drones; +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse; + +namespace ProjectRimFactory.Common.HarmonyPatches +{ + class Patch_QualityBuilder_pawnCanConstruct + { + public static void Postfix(Pawn pawn, ref bool __result) + { + if (!__result && pawn is Pawn_Drone && (pawn.workSettings?.WorkIsActive(WorkTypeDefOf.Construction) ?? false)) + { + __result = true; + } + } + } +} diff --git a/Source/ProjectRimFactory/Common/ProjectRimFactory_ModComponent.cs b/Source/ProjectRimFactory/Common/ProjectRimFactory_ModComponent.cs index dda8d4f3..82f17d53 100644 --- a/Source/ProjectRimFactory/Common/ProjectRimFactory_ModComponent.cs +++ b/Source/ProjectRimFactory/Common/ProjectRimFactory_ModComponent.cs @@ -1,4 +1,5 @@ using HarmonyLib; +using ProjectRimFactory.Common.HarmonyPatches; using ProjectRimFactory.Storage; using System; using System.Collections.Generic; @@ -220,6 +221,26 @@ private void LoadModSupport() { ModSupport_VEF_DualCropExtension = true; } + if (ModLister.HasActiveModWithName("QualityBuilder")) + { + MethodBase QualityBuilder_pawnCanConstruct = AccessTools.Method("QualityBuilder.QualityBuilder:pawnCanConstruct"); + MethodBase QualityBuilder_getPawnConstructionSkill = AccessTools.Method("QualityBuilder.QualityBuilder:getPawnConstructionSkill"); + + if (QualityBuilder_pawnCanConstruct != null && QualityBuilder_getPawnConstructionSkill != null) + { + var postfix_pawnCanConstruct = typeof(HarmonyPatches.Patch_QualityBuilder_pawnCanConstruct).GetMethod("Postfix"); + var prefix_getPawnConstructionSkill = typeof(HarmonyPatches.Patch_QualityBuilder_getPawnConstructionSkill).GetMethod("Prefix"); + this.HarmonyInstance.Patch(QualityBuilder_pawnCanConstruct, null, new HarmonyMethod(postfix_pawnCanConstruct)); + this.HarmonyInstance.Patch(QualityBuilder_getPawnConstructionSkill, new HarmonyMethod(prefix_getPawnConstructionSkill)); + Log.Message("Project Rimfactory - Added Support for QualityBuilder"); + } + else + { + Log.Warning("Project Rimfactory - Failed to add Support for QualityBuilder"); + } + + } + }