The current BepInExPack is broken due to the Oakveil update, and mods installed through a mod manager may not work. Join the modding Discord for more information.
Decompiled source of MuteChatPlayer v0.1.0
MuteChatPlayer.dll
Decompiled 11 months agousing System; using System.Collections; using System.Collections.Concurrent; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text.Json; using BepInEx; using BepInEx.Core.Logging.Interpolation; using BepInEx.Logging; using BepInEx.Unity.IL2CPP; using BepInEx.Unity.IL2CPP.Utils.Collections; using HarmonyLib; using Il2CppInterop.Runtime.Injection; using Il2CppInterop.Runtime.InteropTypes.Arrays; using Il2CppSystem.Collections.Generic; using Microsoft.CodeAnalysis; using MuteChatPlayer.Database; using MuteChatPlayer.Utils; using ProjectM; using ProjectM.Network; using Unity.Collections; using Unity.Entities; using UnityEngine; using VampireCommandFramework; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")] [assembly: AssemblyCompany("MuteChatPlayer")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("Block players from sending messages")] [assembly: AssemblyFileVersion("0.1.0.0")] [assembly: AssemblyInformationalVersion("0.1.0")] [assembly: AssemblyProduct("MuteChatPlayer")] [assembly: AssemblyTitle("MuteChatPlayer")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.1.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace MuteChatPlayer { [BepInPlugin("MuteChatPlayer", "MuteChatPlayer", "0.1.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class Plugin : BasePlugin { private Harmony _harmony; public static ManualLogSource Logger; internal static Plugin Instance; public override void Load() { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Expected O, but got Unknown Instance = this; Logger = ((BasePlugin)this).Log; ManualLogSource log = ((BasePlugin)this).Log; bool flag = default(bool); BepInExInfoLogInterpolatedStringHandler val = new BepInExInfoLogInterpolatedStringHandler(27, 2, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val).AppendLiteral("Plugin "); ((BepInExLogInterpolatedStringHandler)val).AppendFormatted<string>("MuteChatPlayer"); ((BepInExLogInterpolatedStringHandler)val).AppendLiteral(" version "); ((BepInExLogInterpolatedStringHandler)val).AppendFormatted<string>("0.1.0"); ((BepInExLogInterpolatedStringHandler)val).AppendLiteral(" is loaded!"); } log.LogInfo(val); _harmony = new Harmony("MuteChatPlayer"); _harmony.PatchAll(Assembly.GetExecutingAssembly()); CommandRegistry.RegisterAll(Assembly.GetExecutingAssembly()); } public static void GamedataInit() { MutePlayersSystem.Initialize(); } public override bool Unload() { CommandRegistry.UnregisterAssembly(); Harmony harmony = _harmony; if (harmony != null) { harmony.UnpatchSelf(); } return true; } } public static class MyPluginInfo { public const string PLUGIN_GUID = "MuteChatPlayer"; public const string PLUGIN_NAME = "MuteChatPlayer"; public const string PLUGIN_VERSION = "0.1.0"; } } namespace MuteChatPlayer.Utils { public class Helper { private static World? _serverWorld; public static EntityManager EntityManager => Server.EntityManager; public static World Server { get { if (_serverWorld != null) { return _serverWorld; } _serverWorld = GetWorld("Server") ?? throw new Exception("There is no Server world (yet). Did you install a server mod on the client?"); return _serverWorld; } } public static bool IsServer => Application.productName == "VRisingServer"; private static World GetWorld(string name) { Enumerator<World> enumerator = World.s_AllWorlds.GetEnumerator(); while (enumerator.MoveNext()) { World current = enumerator.Current; if (current.Name == name) { return current; } } return null; } internal static bool FindPlayer(string name, out User user) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) user = default(User); EntityManager entityManager = Server.EntityManager; EntityQueryDesc[] array = new EntityQueryDesc[1]; EntityQueryDesc val = new EntityQueryDesc(); val.All = Il2CppStructArray<ComponentType>.op_Implicit((ComponentType[])(object)new ComponentType[1] { ComponentType.ReadOnly<User>() }); val.Options = (EntityQueryOptions)2; array[0] = val; EntityQuery val2 = ((EntityManager)(ref entityManager)).CreateEntityQuery((EntityQueryDesc[])(object)array); NativeArray<Entity> val3 = ((EntityQuery)(ref val2)).ToEntityArray(AllocatorHandle.op_Implicit((Allocator)2)); Enumerator<Entity> enumerator = val3.GetEnumerator(); while (enumerator.MoveNext()) { Entity current = enumerator.Current; entityManager = EntityManager; user = ((EntityManager)(ref entityManager)).GetComponentData<User>(current); if (((object)(FixedString64Bytes)(ref user.CharacterName)).ToString().ToLower() == name) { val3.Dispose(); return true; } } val3.Dispose(); return false; } } public class MutePlayersSystem : MonoBehaviour { private static MutePlayersSystem _instance; public static DateTime LastSaveMuteList = DateTime.Now; private static readonly string FileDirectory = Path.Combine("BepInEx", "config", "MuteChatPlayer"); private static readonly string FileName = "Mute_List.json"; private static readonly string fullPath = Path.Combine(FileDirectory, FileName); private static int loop = 0; public static bool MutePlayerSystem_Enabled = true; public static bool OnChatMessage(ChatMessageEvent chatMessage, FromCharacter fromCharacter) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Invalid comparison between Unknown and I4 //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) EntityManager entityManager = Helper.EntityManager; User componentData = ((EntityManager)(ref entityManager)).GetComponentData<User>(fromCharacter.User); if (DB.PlayerChatMute.ContainsKey(componentData.PlatformId)) { DateTime now = DateTime.Now; PlayerMuteChat playerMuteChat = DB.PlayerChatMute[componentData.PlatformId]; if (now > playerMuteChat.BanTime) { DB.PlayerChatMute.TryRemove(componentData.PlatformId, out var _); return false; } if ((int)chatMessage.MessageType == playerMuteChat.MuteChatChannel || playerMuteChat.MuteChatChannel == -1) { ServerChatUtils.SendSystemMessageToClient(Helper.EntityManager, componentData, $"You have been muted for {Math.Ceiling(DB.PlayerChatMute[componentData.PlatformId].BanTime.Subtract(now).TotalMinutes)} more minutes."); return true; } return false; } return false; } private void Update() { } private void Start() { Load_Mute_List(); ((MonoBehaviour)this).StartCoroutine(CollectionExtensions.WrapToIl2Cpp(UpdateDurabilityInSpecialStorage())); } private IEnumerator UpdateDurabilityInSpecialStorage() { while (true) { KeyValuePair<ulong, PlayerMuteChat>[] array = DB.PlayerChatMute.ToArray(); for (int i = 0; i < array.Length; i++) { KeyValuePair<ulong, PlayerMuteChat> player = array[i]; PlayerMuteChat value = DB.PlayerChatMute[player.Key]; if (value.BanTime < DateTime.Now) { DB.PlayerChatMute.TryRemove(player.Key, out value); } } if ((DateTime.Now - LastSaveMuteList).TotalSeconds >= 300.0) { LastSaveMuteList = DateTime.Now; } yield return (object)new WaitForSeconds(60f); } } private void LateUpdate() { } public static void Initialize() { if (!ClassInjector.IsTypeRegisteredInIl2Cpp<MutePlayersSystem>()) { ClassInjector.RegisterTypeInIl2Cpp<MutePlayersSystem>(); } _instance = ((BasePlugin)Plugin.Instance).AddComponent<MutePlayersSystem>(); } public static void Save_Mute_List() { File.WriteAllText(fullPath, JsonSerializer.Serialize(DB.PlayerChatMute, new JsonSerializerOptions { WriteIndented = true })); Plugin.Logger.LogWarning((object)"Mute_List DB Saved."); } public static void Load_Mute_List() { if (!Directory.Exists(FileDirectory)) { Directory.CreateDirectory(FileDirectory); } if (!File.Exists(fullPath)) { DB.PlayerChatMute.Clear(); Plugin.Logger.LogWarning((object)"Mute_List DB Created."); Save_Mute_List(); } else { string json = File.ReadAllText(fullPath); DB.PlayerChatMute = JsonSerializer.Deserialize<ConcurrentDictionary<ulong, PlayerMuteChat>>(json); Plugin.Logger.LogWarning((object)"Mute_List DB Populated"); } } public static void Uninitialize() { Object.Destroy((Object)(object)_instance); _instance = null; } } } namespace MuteChatPlayer.Hooks { [HarmonyAfter(new string[] { "gg.deca.VampireCommandFramework" })] [HarmonyBefore(new string[] { "gg.deca.Bloodstone" })] [HarmonyPatch(typeof(ChatMessageSystem), "OnUpdate")] public class ChatMessageSystem_Patch { [HarmonyPrefix] public static void prefix(ChatMessageSystem __instance) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) EntityQuery chatMessageQuery = __instance._ChatMessageQuery; Enumerator<Entity> enumerator = ((EntityQuery)(ref chatMessageQuery)).ToEntityArray(AllocatorHandle.op_Implicit((Allocator)2)).GetEnumerator(); while (enumerator.MoveNext()) { Entity current = enumerator.Current; EntityManager entityManager = Helper.Server.EntityManager; ChatMessageEvent componentData = ((EntityManager)(ref entityManager)).GetComponentData<ChatMessageEvent>(current); entityManager = Helper.Server.EntityManager; FromCharacter componentData2 = ((EntityManager)(ref entityManager)).GetComponentData<FromCharacter>(current); entityManager = Helper.EntityManager; User componentData3 = ((EntityManager)(ref entityManager)).GetComponentData<User>(componentData2.User); if (MutePlayersSystem.MutePlayerSystem_Enabled && !componentData3.IsAdmin && MutePlayersSystem.OnChatMessage(componentData, componentData2)) { entityManager = Helper.EntityManager; ((EntityManager)(ref entityManager)).DestroyEntity(current); } } } } [HarmonyPatch(typeof(LoadPersistenceSystemV2), "SetLoadState")] public class PersistenceSystem_Patch { public static void Prefix(State loadState, LoadPersistenceSystemV2 __instance) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Invalid comparison between Unknown and I4 if ((int)loadState == 4) { Plugin.GamedataInit(); } } } [HarmonyPatch(typeof(TriggerPersistenceSaveSystem), "TriggerSave")] public class TriggerPersistenceSaveSystem_Patch { [HarmonyPostfix] public static void Postfix(SaveReason reason, FixedString128Bytes saveName, ServerRuntimeSettings saveConfig) { MutePlayersSystem.Save_Mute_List(); } } } namespace MuteChatPlayer.Database { public struct PlayerMuteChat { public DateTime BanTime { get; set; } public int MuteChatChannel { get; set; } public PlayerMuteChat(DateTime bantime, int mutechatchannel) { BanTime = bantime; MuteChatChannel = mutechatchannel; } } internal class DB { public static ConcurrentDictionary<ulong, PlayerMuteChat> PlayerChatMute = new ConcurrentDictionary<ulong, PlayerMuteChat>(); } } namespace MuteChatPlayer.Commands { public static class MuteCommands { [Command("mute", null, "[Player Name] [global|local|all] [time in minuts]", "Command for mute player.", null, true)] public static void MuteCommand(ChatCommandContext ctx, string name = "null", string channal = "all", int bantime = 60) { //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Unknown result type (might be due to invalid IL or missing references) //IL_0183: Unknown result type (might be due to invalid IL or missing references) //IL_0184: Unknown result type (might be due to invalid IL or missing references) //IL_01a3: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_0107: Unknown result type (might be due to invalid IL or missing references) int num = -1; if (name != "null") { if (Helper.FindPlayer(name, out var user)) { switch (channal.ToLower()) { case "global": num = 0; break; case "local": num = 4; break; case "all": num = -1; break; default: ctx.Reply("<color=#ff0000>Invalid chat-type option. Options are: global, local,all</color>"); num = -55; break; } if (num != -55) { if (DB.PlayerChatMute.ContainsKey(user.PlatformId)) { DB.PlayerChatMute[user.PlatformId] = new PlayerMuteChat(DateTime.Now.AddMinutes(bantime), num); ctx.Reply($"Mute player [{user.CharacterName}] is updated. Mute end: [{DB.PlayerChatMute[user.PlatformId].BanTime}]"); } else { DB.PlayerChatMute.TryAdd(user.PlatformId, new PlayerMuteChat(DateTime.Now.AddMinutes(bantime), num)); ctx.Reply($"Player [{user.CharacterName}] is muted. Mute end: [{DB.PlayerChatMute[user.PlatformId].BanTime}]"); } } } else { ctx.Reply("Player with name : [" + name + "] not found!"); } } else { ctx.Reply("You need use player name for mute."); } } } }