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] 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.
///