From e956739b9aae84317bb7cf87ff16b1eacc03a367 Mon Sep 17 00:00:00 2001 From: Sakura-TA Date: Mon, 13 Apr 2026 14:32:03 +0800 Subject: [PATCH] fix: include all player factions in shuttle quest colonist count --- Source/Client/Factions/MultifactionPatches.cs | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/Source/Client/Factions/MultifactionPatches.cs b/Source/Client/Factions/MultifactionPatches.cs index 33f8c445..be4c7488 100644 --- a/Source/Client/Factions/MultifactionPatches.cs +++ b/Source/Client/Factions/MultifactionPatches.cs @@ -761,7 +761,7 @@ static IEnumerable Transpiler(IEnumerable inst yield return ci; } } - static bool IsFreeColonistAnyPlayerFaction(Pawn pawn) + public static bool IsFreeColonistAnyPlayerFaction(Pawn pawn) { if (Multiplayer.Client == null || !Multiplayer.GameComp.multifaction) return pawn.IsFreeColonist; @@ -818,3 +818,23 @@ static void Finalizer(Gravship gravship, Map map,bool __state) map.PopFaction(); } } + +[HarmonyPatch(typeof(QuestPart_LendColonistsToFaction), "Enable")] +static class QuestPart_LendColonistsToFaction_Enable_Patch +{ + static IEnumerable Transpiler(IEnumerable insts) + { + var isFreeColonist = AccessTools.PropertyGetter(typeof(Pawn), nameof(Pawn.IsFreeColonist)); + var replacement = AccessTools.Method(typeof(CompShuttle_ContainedColonistCount_Patch), + nameof(CompShuttle_ContainedColonistCount_Patch.IsFreeColonistAnyPlayerFaction)); + foreach (var ci in insts) + { + if (ci.Calls(isFreeColonist)) + { + ci.opcode = OpCodes.Call; + ci.operand = replacement; + } + yield return ci; + } + } +}