diff --git a/Exiled.Events/EventArgs/Player/BannedEventArgs.cs b/Exiled.Events/EventArgs/Player/BannedEventArgs.cs
index 0d55acc865..458e118228 100644
--- a/Exiled.Events/EventArgs/Player/BannedEventArgs.cs
+++ b/Exiled.Events/EventArgs/Player/BannedEventArgs.cs
@@ -57,5 +57,10 @@ public BannedEventArgs(Player target, Player issuer, BanDetails details, BanHand
/// Gets a value indicating whether the ban is forced or not.
///
public bool IsForced { get; }
+
+ ///
+ /// Gets a value indicating whether the ban is an offline ban or not.
+ ///
+ public bool IsOffline => Details.OriginalName == "Unknown - offline ban";
}
}
\ No newline at end of file
diff --git a/Exiled.Events/Patches/Events/Player/Banned.cs b/Exiled.Events/Patches/Events/Player/Banned.cs
index c2934279f2..ba1a9667aa 100644
--- a/Exiled.Events/Patches/Events/Player/Banned.cs
+++ b/Exiled.Events/Patches/Events/Player/Banned.cs
@@ -75,8 +75,8 @@ private static IEnumerable Transpiler(IEnumerable.Pool.Return(newInstructions);
}
diff --git a/Exiled.Events/Patches/Fixes/VoiceChatTpsFix.cs b/Exiled.Events/Patches/Fixes/VoiceChatTpsFix.cs
new file mode 100644
index 0000000000..3905946b47
--- /dev/null
+++ b/Exiled.Events/Patches/Fixes/VoiceChatTpsFix.cs
@@ -0,0 +1,41 @@
+// -----------------------------------------------------------------------
+//
+// Copyright (c) Exiled Team. All rights reserved.
+// Licensed under the CC BY-SA 3.0 license.
+//
+// -----------------------------------------------------------------------
+
+namespace Exiled.Events.Patches.Fixes
+{
+ using System.Collections.Generic;
+ using System.Reflection.Emit;
+
+ using API.Features.Core.Generic.Pools;
+
+ using HarmonyLib;
+
+ using VoiceChat.Networking;
+
+ ///
+ /// Fixes method.
+ ///
+ [HarmonyPatch(typeof(VoiceTransceiver), nameof(VoiceTransceiver.ServerReceiveMessage))]
+ internal static class VoiceChatTpsFix
+ {
+ private static IEnumerable Transpiler(IEnumerable instructions, ILGenerator generator)
+ {
+ List newInstructions = ListPool.Pool.Get(instructions);
+
+ const int offset = -1;
+ int index = newInstructions.FindIndex(instruction => instruction.opcode == OpCodes.Newarr) + offset;
+
+ // new array length 480
+ newInstructions[index].operand = 480;
+
+ foreach (CodeInstruction instruction in newInstructions)
+ yield return instruction;
+
+ ListPool.Pool.Return(newInstructions);
+ }
+ }
+}
\ No newline at end of file