From 272b14f0e0b27ec024490cb27723995e671bc7d3 Mon Sep 17 00:00:00 2001
From: Atony <75191600+AtonyGit@users.noreply.github.com>
Date: Mon, 9 Mar 2026 09:35:36 -0500
Subject: [PATCH 1/4] Change murders to check with the host beforehand
---
MiraAPI/Networking/CustomMurderRpc.cs | 59 ++++++++++++++++++++++++---
MiraAPI/Networking/MiraRpc.cs | 5 +++
2 files changed, 58 insertions(+), 6 deletions(-)
diff --git a/MiraAPI/Networking/CustomMurderRpc.cs b/MiraAPI/Networking/CustomMurderRpc.cs
index 7629ebc..b0ca585 100644
--- a/MiraAPI/Networking/CustomMurderRpc.cs
+++ b/MiraAPI/Networking/CustomMurderRpc.cs
@@ -7,10 +7,12 @@ using Assets.CoreScripts;
using BepInEx.Unity.IL2CPP.Utils;
using MiraAPI.Events;
using MiraAPI.Events.Vanilla.Gameplay;
+using MiraAPI.Utilities;
using Reactor.Networking.Attributes;
using Reactor.Networking.Rpc;
using Reactor.Utilities;
using Reactor.Utilities.Extensions;
+using Rewired;
using UnityEngine;
using Object = UnityEngine.Object;
@@ -22,7 +24,7 @@ namespace MiraAPI.Networking;
public static class CustomMurderRpc
{
///
- /// Networked Custom Murder method.
+ /// Networked Custom Murder method, ran by clients for the host to confirm kills.
///
/// The killer.
/// The player to murder.
@@ -54,7 +56,7 @@ public static class CustomMurderRpc
}
///
- /// Networked Custom Murder method, which checks for meetings as well.
+ /// Networked Custom Murder method, which checks for meetings as well, ran by clients for the host to confirm kills.
///
/// The killer.
/// The player to murder.
@@ -77,10 +79,6 @@ public static class CustomMurderRpc
bool showKillAnim = true,
bool playKillSound = true)
{
- if (LobbyBehaviour.Instance)
- {
- return;
- }
var murderResultFlags = didSucceed ? MurderResultFlags.Succeeded : MurderResultFlags.FailedError;
var beforeMurderEvent = new BeforeMurderEvent(source, target, inMeeting);
@@ -96,6 +94,55 @@ public static class CustomMurderRpc
murderResultFlags = MurderResultFlags.FailedError;
}
+ if (!PlayerControl.LocalPlayer.IsHost())
+ {
+ return;
+ }
+
+ RpcConfirmCustomMurder(
+ PlayerControl.LocalPlayer,
+ source,
+ target,
+ inMeeting,
+ murderResultFlags,
+ resetKillTimer,
+ createDeadBody,
+ teleportMurderer,
+ showKillAnim,
+ playKillSound);
+ }
+
+ ///
+ /// Networked Custom Murder method, which checks for meetings as well, ran by clients for the host to confirm kills.
+ ///
+ /// The game host.
+ /// The killer.
+ /// The player to murder.
+ /// Whether the murder is intended to be triggered in a meeting.
+ /// End result for the murder.
+ /// Should the kill timer be reset.
+ /// Should a dead body be created.
+ /// Should the killer be snapped to the dead player.
+ /// Should the kill animation be shown.
+ /// Should the kill sound be played.
+ [MethodRpc((uint)MiraRpc.ConfirmCustomMurder, LocalHandling = RpcLocalHandling.Before)]
+ public static void RpcConfirmCustomMurder(
+ this PlayerControl host,
+ PlayerControl source,
+ PlayerControl target,
+ MeetingCheck inMeeting,
+ MurderResultFlags murderResultFlags,
+ bool resetKillTimer = true,
+ bool createDeadBody = true,
+ bool teleportMurderer = true,
+ bool showKillAnim = true,
+ bool playKillSound = true)
+ {
+ if (LobbyBehaviour.Instance || !host.IsHost())
+ {
+ return;
+ }
+
var murderResultFlags2 = MurderResultFlags.DecisionByHost | murderResultFlags;
source.CustomMurder(
diff --git a/MiraAPI/Networking/MiraRpc.cs b/MiraAPI/Networking/MiraRpc.cs
index 28c6c7a..edc3a94 100644
--- a/MiraAPI/Networking/MiraRpc.cs
+++ b/MiraAPI/Networking/MiraRpc.cs
@@ -35,6 +35,11 @@ public enum MiraRpc : uint
///
CustomMurder,
+ ///
+ /// Custom Murder RPC Confirmation.
+ ///
+ ConfirmCustomMurder,
+
///
/// Custom Game Over RPC.
///
From 1813fe5a8414b5deeecaec41c1c2a8ce46d95e06 Mon Sep 17 00:00:00 2001
From: Atony <75191600+AtonyGit@users.noreply.github.com>
Date: Mon, 9 Mar 2026 09:43:00 -0500
Subject: [PATCH 2/4] Adjust functions
---
MiraAPI/Networking/CustomMurderRpc.cs | 3 ---
1 file changed, 3 deletions(-)
diff --git a/MiraAPI/Networking/CustomMurderRpc.cs b/MiraAPI/Networking/CustomMurderRpc.cs
index b0ca585..379daf7 100644
--- a/MiraAPI/Networking/CustomMurderRpc.cs
+++ b/MiraAPI/Networking/CustomMurderRpc.cs
@@ -103,7 +103,6 @@ public static class CustomMurderRpc
PlayerControl.LocalPlayer,
source,
target,
- inMeeting,
murderResultFlags,
resetKillTimer,
createDeadBody,
@@ -118,7 +117,6 @@ public static class CustomMurderRpc
/// The game host.
/// The killer.
/// The player to murder.
- /// Whether the murder is intended to be triggered in a meeting.
/// End result for the murder.
/// Should the kill timer be reset.
/// Should a dead body be created.
@@ -130,7 +128,6 @@ public static class CustomMurderRpc
this PlayerControl host,
PlayerControl source,
PlayerControl target,
- MeetingCheck inMeeting,
MurderResultFlags murderResultFlags,
bool resetKillTimer = true,
bool createDeadBody = true,
From 8940de76bb5d50d18863775bb34a4e3238f33c31 Mon Sep 17 00:00:00 2001
From: Atony <75191600+AtonyGit@users.noreply.github.com>
Date: Tue, 10 Mar 2026 00:18:55 -0500
Subject: [PATCH 3/4] Add one last murder check
---
MiraAPI/Networking/CustomMurderRpc.cs | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/MiraAPI/Networking/CustomMurderRpc.cs b/MiraAPI/Networking/CustomMurderRpc.cs
index 379daf7..8389ae1 100644
--- a/MiraAPI/Networking/CustomMurderRpc.cs
+++ b/MiraAPI/Networking/CustomMurderRpc.cs
@@ -79,6 +79,10 @@ public static class CustomMurderRpc
bool showKillAnim = true,
bool playKillSound = true)
{
+ if (LobbyBehaviour.Instance)
+ {
+ return;
+ }
var murderResultFlags = didSucceed ? MurderResultFlags.Succeeded : MurderResultFlags.FailedError;
var beforeMurderEvent = new BeforeMurderEvent(source, target, inMeeting);
From 9270de408de52eba1f93f87946e557e7936d45be Mon Sep 17 00:00:00 2001
From: Atony <75191600+AtonyGit@users.noreply.github.com>
Date: Tue, 10 Mar 2026 18:04:22 -0500
Subject: [PATCH 4/4] Verify that target isn't already dead or dc'd
---
MiraAPI/Networking/CustomMurderRpc.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/MiraAPI/Networking/CustomMurderRpc.cs b/MiraAPI/Networking/CustomMurderRpc.cs
index 8389ae1..1e3f08f 100644
--- a/MiraAPI/Networking/CustomMurderRpc.cs
+++ b/MiraAPI/Networking/CustomMurderRpc.cs
@@ -139,7 +139,7 @@ public static class CustomMurderRpc
bool showKillAnim = true,
bool playKillSound = true)
{
- if (LobbyBehaviour.Instance || !host.IsHost())
+ if (LobbyBehaviour.Instance || !host.IsHost() || target.Data.IsDead || target.Data.Disconnected)
{
return;
}