From afbfd2480632dd6fce72ccd7b6d9b0db7a4cd6c6 Mon Sep 17 00:00:00 2001 From: Gurge44 Date: Fri, 15 May 2026 09:43:42 +0200 Subject: [PATCH] fix inlined patch --- Patches/PlayerControlPatch.cs | 40 ++++++++----------- Patches/RecomputeTaskPatch.cs | 2 +- Roles/Standard/Addons/Crewmate/Workhorse.cs | 3 +- Roles/Standard/Crewmate/Investigate/Snitch.cs | 10 ++--- Roles/Standard/Impostor/Support/Capitalist.cs | 1 + 5 files changed, 25 insertions(+), 31 deletions(-) diff --git a/Patches/PlayerControlPatch.cs b/Patches/PlayerControlPatch.cs index 2dfac225c..f5bd4f739 100644 --- a/Patches/PlayerControlPatch.cs +++ b/Patches/PlayerControlPatch.cs @@ -2359,6 +2359,12 @@ internal static class EnterVentPatch [HarmonyPatch(typeof(GameData), nameof(GameData.CompleteTask))] internal static class GameDataCompleteTaskPatch { + public static void Prefix(PlayerControl pc) + { + Workhorse.OnCompleteTask(pc); + Capitalist.AddTaskForPlayer(pc); + } + public static void Postfix(PlayerControl pc, uint taskId) { if (MeetingHud.Instance && MeetingHud.Instance.state != MeetingHud.VoteStates.Animating) return; @@ -2368,6 +2374,16 @@ internal static class GameDataCompleteTaskPatch var task = pc.myTasks.Find((Il2CppSystem.Predicate)(x => taskId == x.Id)); Hider.OnSpecificTaskComplete(pc, task); } + + try + { + if (pc.IsAlive()) + { + var task = pc.myTasks.Find((Il2CppSystem.Predicate)(x => taskId == x.Id)); + Benefactor.OnTaskComplete(pc, task); + } + } + catch (Exception e) { ThrowException(e); } Logger.Info($"TaskComplete: {pc.GetNameWithRole().RemoveHtmlTags()}", "CompleteTask"); Main.PlayerStates[pc.PlayerId].UpdateTask(pc); @@ -2375,30 +2391,6 @@ internal static class GameDataCompleteTaskPatch } } -[HarmonyPatch(typeof(PlayerControl), nameof(PlayerControl.CompleteTask))] -internal static class PlayerControlCompleteTaskPatch -{ - public static bool Prefix(PlayerControl __instance) - { - if (MeetingHud.Instance && MeetingHud.Instance.state != MeetingHud.VoteStates.Animating) return false; - return !Workhorse.OnCompleteTask(__instance) && Capitalist.AddTaskForPlayer(__instance); // Cancel task win - } - - public static void Postfix(PlayerControl __instance, [HarmonyArgument(0)] uint idx) - { - if (GameStates.IsMeeting || !__instance || !__instance.IsAlive()) return; - - Snitch.OnCompleteTask(__instance); - - try - { - var task = __instance.myTasks.Find((Il2CppSystem.Predicate)(x => idx == x.Id)); - Benefactor.OnTaskComplete(__instance, task); - } - catch (Exception e) { ThrowException(e); } - } -} - [HarmonyPatch(typeof(GameManager), nameof(GameManager.OnPlayerDeath))] static class GameManagerOnPlayerDeathPatch { diff --git a/Patches/RecomputeTaskPatch.cs b/Patches/RecomputeTaskPatch.cs index 0cc7c70df..23087261d 100644 --- a/Patches/RecomputeTaskPatch.cs +++ b/Patches/RecomputeTaskPatch.cs @@ -12,7 +12,7 @@ internal class CustomTaskCountsPatch foreach (NetworkedPlayerInfo p in __instance.AllPlayers) { - if (p == null) continue; + if (!p) continue; bool hasTasks = Utils.HasTasks(p) && Main.PlayerStates[p.PlayerId].TaskState.AllTasksCount > 0; diff --git a/Roles/Standard/Addons/Crewmate/Workhorse.cs b/Roles/Standard/Addons/Crewmate/Workhorse.cs index b79c0d172..c65b95e35 100644 --- a/Roles/Standard/Addons/Crewmate/Workhorse.cs +++ b/Roles/Standard/Addons/Crewmate/Workhorse.cs @@ -99,8 +99,9 @@ public class Workhorse : IAddon if (AmongUsClient.Instance.AmHost) { Add(pc.PlayerId); - pc.RpcResetTasks(); + pc.RpcResetTasks(false); pc.SyncSettings(); + Main.PlayerStates[pc.PlayerId].TaskState.AllTasksCount = pc.Data.Tasks.Count; Utils.NotifyRoles(SpecifySeer: pc, SpecifyTarget: pc); } diff --git a/Roles/Standard/Crewmate/Investigate/Snitch.cs b/Roles/Standard/Crewmate/Investigate/Snitch.cs index b597c676f..d98140829 100644 --- a/Roles/Standard/Crewmate/Investigate/Snitch.cs +++ b/Roles/Standard/Crewmate/Investigate/Snitch.cs @@ -150,7 +150,7 @@ public class Snitch : RoleBase public static string GetWarningArrow(PlayerControl seer, PlayerControl target = null) { - if (GameStates.IsMeeting || !IsSnitchTarget(seer) || (target != null && seer.PlayerId != target.PlayerId)) return string.Empty; + if (GameStates.IsMeeting || !IsSnitchTarget(seer) || (target && seer.PlayerId != target.PlayerId)) return string.Empty; IEnumerable exposedSnitch = PlayerIdList.Where(s => !Main.PlayerStates[s].IsDead && IsExposed[s]); byte[] snitch = exposedSnitch as byte[] ?? exposedSnitch.ToArray(); @@ -168,7 +168,7 @@ public class Snitch : RoleBase public override string GetSuffix(PlayerControl seer, PlayerControl target, bool hud = false, bool meeting = false) { - if (seer.Is(CustomRoles.Madmate) || !EnableTargetArrow || GameStates.IsMeeting || seer.PlayerId != SnitchId || (target != null && seer.PlayerId != target.PlayerId) || hud) return string.Empty; + if (seer.Is(CustomRoles.Madmate) || !EnableTargetArrow || GameStates.IsMeeting || seer.PlayerId != SnitchId || seer.PlayerId != target.PlayerId || hud) return string.Empty; var arrows = string.Empty; @@ -181,10 +181,10 @@ public class Snitch : RoleBase return arrows; } - public static void OnCompleteTask(PlayerControl player) + public override void OnTaskComplete(PlayerControl pc, int completedTaskCount, int totalTaskCount) { - if (!IsSnitch(player.PlayerId) || player.Is(CustomRoles.Madmate)) return; + if (!IsSnitch(pc.PlayerId) || pc.Is(CustomRoles.Madmate)) return; - CheckTask(player); + CheckTask(pc); } } \ No newline at end of file diff --git a/Roles/Standard/Impostor/Support/Capitalist.cs b/Roles/Standard/Impostor/Support/Capitalist.cs index c2f5bd843..8122fd10b 100644 --- a/Roles/Standard/Impostor/Support/Capitalist.cs +++ b/Roles/Standard/Impostor/Support/Capitalist.cs @@ -61,6 +61,7 @@ internal class Capitalist : RoleBase taskState.CompletedTasksCount++; player.RpcResetTasks(false); player.SyncSettings(); + Main.PlayerStates[player.PlayerId].TaskState.AllTasksCount = player.Data.Tasks.Count; Utils.NotifyRoles(SpecifySeer: player, SpecifyTarget: player); return false; }