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 BloodyNotify v1.0.0
BloodyNotify.dll
Decompiled a year agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text; using System.Text.Json; using BepInEx; using BepInEx.Configuration; using BepInEx.Core.Logging.Interpolation; using BepInEx.Logging; using BepInEx.Unity.IL2CPP; using Bloodstone.API; using Bloodstone.Hooks; using BloodyNotify.Hooks; using BloodyNotify.Structs; using BloodyNotify.Utils; using HarmonyLib; using Il2CppInterop.Runtime; using Il2CppInterop.Runtime.InteropTypes.Arrays; using Il2CppSystem; using Il2CppSystem.Collections.Generic; using Microsoft.CodeAnalysis; using ProjectM; using ProjectM.Network; using Stunlock.Core; using Stunlock.Network; using Unity.Collections; using Unity.Entities; using Unity.Mathematics; using Unity.Transforms; 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("BloodyNotify")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("Notify mod for VRising by Backxtar.")] [assembly: AssemblyFileVersion("1.2.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("BloodyNotify")] [assembly: AssemblyTitle("BloodyNotify")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.2.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] internal sealed class IsUnmanagedAttribute : Attribute { } [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 BloodyNotify { [BepInPlugin("BloodyNotify", "BloodyNotify", "1.0.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [Reloadable] public class Plugin : BasePlugin, IRunOnInitialized { [CompilerGenerated] private static class <>O { public static GameFrameUpdateEventHandler <0>__HandleNotifyFrame; } private Harmony _harmony; public static ManualLogSource LogInstance { get; private set; } public static Settings Settings { get; private set; } public override void Load() { //IL_005f: 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_006a: Expected O, but got Unknown LogInstance = ((BasePlugin)this).Log; Settings = new Settings(((BasePlugin)this).Config); Settings.InitConfig(); if (!VWorld.IsServer) { ((BasePlugin)this).Log.LogWarning((object)"This plugin is a server-only plugin."); } CommandRegistry.RegisterAll(); object obj = <>O.<0>__HandleNotifyFrame; if (obj == null) { GameFrameUpdateEventHandler val = ActionScheduler.HandleNotifyFrame; <>O.<0>__HandleNotifyFrame = val; obj = (object)val; } GameFrame.OnUpdate += (GameFrameUpdateEventHandler)obj; } public void OnGameInitialized() { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Expected O, but got Unknown if (!VWorld.IsClient) { _harmony = Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), (string)null); Core.InitializeAfterLoaded(); ManualLogSource log = ((BasePlugin)this).Log; bool flag = default(bool); BepInExInfoLogInterpolatedStringHandler val = new BepInExInfoLogInterpolatedStringHandler(18, 1, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val).AppendLiteral("Plugin "); ((BepInExLogInterpolatedStringHandler)val).AppendFormatted<string>("BloodyNotify"); ((BepInExLogInterpolatedStringHandler)val).AppendLiteral(" is loaded!"); } log.LogInfo(val); } } public override bool Unload() { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown CommandRegistry.UnregisterAssembly(); ((BasePlugin)this).Config.Clear(); _harmony.UnpatchSelf(); object obj = <>O.<0>__HandleNotifyFrame; if (obj == null) { GameFrameUpdateEventHandler val = ActionScheduler.HandleNotifyFrame; <>O.<0>__HandleNotifyFrame = val; obj = (object)val; } GameFrame.OnUpdate -= (GameFrameUpdateEventHandler)obj; return true; } } public static class MyPluginInfo { public const string PLUGIN_GUID = "BloodyNotify"; public const string PLUGIN_NAME = "BloodyNotify"; public const string PLUGIN_VERSION = "1.0.0"; } } namespace BloodyNotify.Utils { internal static class Core { public static ManualLogSource Log = Plugin.LogInstance; private static bool _hasInitialized = false; public static World Server { get; } = GetWorld("Server") ?? throw new Exception("There is no Server world (yet). Did you install a server mod on the client?"); public static EntityManager EntityManager { get; } = Server.EntityManager; public static PlayerService Players { get; internal set; } public static UnitSpawnerService UnitSpawner { get; internal set; } public static PrefabService Prefabs { get; internal set; } public static void LogException(Exception e, [CallerMemberName] string caller = null) { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown ManualLogSource log = Log; bool flag = default(bool); BepInExErrorLogInterpolatedStringHandler val = new BepInExErrorLogInterpolatedStringHandler(51, 5, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val).AppendLiteral("Failure in "); ((BepInExLogInterpolatedStringHandler)val).AppendFormatted<string>(caller); ((BepInExLogInterpolatedStringHandler)val).AppendLiteral("\nMessage: "); ((BepInExLogInterpolatedStringHandler)val).AppendFormatted<string>(e.Message); ((BepInExLogInterpolatedStringHandler)val).AppendLiteral(" Inner:"); ((BepInExLogInterpolatedStringHandler)val).AppendFormatted<string>(e.InnerException?.Message); ((BepInExLogInterpolatedStringHandler)val).AppendLiteral("\n\nStack: "); ((BepInExLogInterpolatedStringHandler)val).AppendFormatted<string>(e.StackTrace); ((BepInExLogInterpolatedStringHandler)val).AppendLiteral("\nInner Stack: "); ((BepInExLogInterpolatedStringHandler)val).AppendFormatted<string>(e.InnerException?.StackTrace); } log.LogError(val); } internal static void InitializeAfterLoaded() { //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Expected O, but got Unknown if (!_hasInitialized) { Players = new PlayerService(); UnitSpawner = new UnitSpawnerService(); Prefabs = new PrefabService(); _hasInitialized = true; ManualLogSource log = Log; bool flag = default(bool); BepInExInfoLogInterpolatedStringHandler val = new BepInExInfoLogInterpolatedStringHandler(10, 1, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val).AppendFormatted<string>("InitializeAfterLoaded"); ((BepInExLogInterpolatedStringHandler)val).AppendLiteral(" completed"); } log.LogInfo(val); } } 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; } } public static class ECSExtensionService { public unsafe static void Write<T>(this Entity entity, T componentData) where T : struct { //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_0045: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) ComponentType val = default(ComponentType); ((ComponentType)(ref val))..ctor(Il2CppType.Of<T>(), (AccessMode)0); byte[] array = StructureToByteArray(componentData); int num = Marshal.SizeOf<T>(); fixed (byte* ptr = array) { EntityManager entityManager = VWorld.Server.EntityManager; ((EntityManager)(ref entityManager)).SetComponentDataRaw(entity, val.TypeIndex, (void*)ptr, num); } } public static byte[] StructureToByteArray<T>(T structure) where T : struct { int num = Marshal.SizeOf(structure); byte[] array = new byte[num]; IntPtr intPtr = Marshal.AllocHGlobal(num); Marshal.StructureToPtr(structure, intPtr, fDeleteOld: true); Marshal.Copy(intPtr, array, 0, num); Marshal.FreeHGlobal(intPtr); return array; } public unsafe static T Read<T>(this Entity entity) where T : struct { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) ComponentType val = default(ComponentType); ((ComponentType)(ref val))..ctor(Il2CppType.Of<T>(), (AccessMode)0); EntityManager entityManager = VWorld.Server.EntityManager; void* componentDataRawRO = ((EntityManager)(ref entityManager)).GetComponentDataRawRO(entity, val.TypeIndex); return Marshal.PtrToStructure<T>(new IntPtr(componentDataRawRO)); } public static DynamicBuffer<T> ReadBuffer<T>(this Entity entity) where T : struct { //IL_0006: 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_000e: 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_0017: Unknown result type (might be due to invalid IL or missing references) EntityManager entityManager = VWorld.Server.EntityManager; return ((EntityManager)(ref entityManager)).GetBuffer<T>(entity); } public static void Add<T>(this Entity entity) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) ComponentType val = default(ComponentType); ((ComponentType)(ref val))..ctor(Il2CppType.Of<T>(), (AccessMode)0); EntityManager entityManager = VWorld.Server.EntityManager; ((EntityManager)(ref entityManager)).AddComponent(entity, val); } public static void Remove<T>(this Entity entity) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) ComponentType val = default(ComponentType); ((ComponentType)(ref val))..ctor(Il2CppType.Of<T>(), (AccessMode)0); EntityManager entityManager = VWorld.Server.EntityManager; ((EntityManager)(ref entityManager)).RemoveComponent(entity, val); } public static bool Has<T>(this Entity entity) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) ComponentType val = default(ComponentType); ((ComponentType)(ref val))..ctor(Il2CppType.Of<T>(), (AccessMode)0); EntityManager entityManager = VWorld.Server.EntityManager; return ((EntityManager)(ref entityManager)).HasComponent(entity, val); } public static void LogComponentTypes(this Entity entity) { //IL_0006: 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_000e: 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_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Expected O, but got Unknown //IL_0042: Unknown result type (might be due to invalid IL or missing references) EntityManager entityManager = VWorld.Server.EntityManager; Enumerator<ComponentType> enumerator = ((EntityManager)(ref entityManager)).GetComponentTypes(entity, (Allocator)2).GetEnumerator(); bool flag = default(bool); while (enumerator.MoveNext()) { ComponentType current = enumerator.Current; ManualLogSource logInstance = Plugin.LogInstance; BepInExInfoLogInterpolatedStringHandler val = new BepInExInfoLogInterpolatedStringHandler(0, 1, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val).AppendFormatted<ComponentType>(current); } logInstance.LogInfo(val); } Plugin.LogInstance.LogInfo((object)"==="); } public static void LogComponentTypes(this EntityQuery entityQuery) { //IL_0014: 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_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Expected O, but got Unknown //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Expected O, but got Unknown Il2CppStructArray<ComponentType> queryTypes = ((EntityQuery)(ref entityQuery)).GetQueryTypes(); bool flag = default(bool); BepInExInfoLogInterpolatedStringHandler val; foreach (ComponentType item in (Il2CppArrayBase<ComponentType>)(object)queryTypes) { ManualLogSource logInstance = Plugin.LogInstance; val = new BepInExInfoLogInterpolatedStringHandler(22, 1, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val).AppendLiteral("Query Component Type: "); ((BepInExLogInterpolatedStringHandler)val).AppendFormatted<ComponentType>(item); } logInstance.LogInfo(val); } ManualLogSource logInstance2 = Plugin.LogInstance; val = new BepInExInfoLogInterpolatedStringHandler(3, 0, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val).AppendLiteral("==="); } logInstance2.LogInfo(val); } public static string LookupName(this PrefabGUID prefabGuid) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0027: 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_0033: Unknown result type (might be due to invalid IL or missing references) PrefabCollectionSystem existingSystem = VWorld.Server.GetExistingSystem<PrefabCollectionSystem>(); object obj; if (!((PrefabCollectionSystem_Base)existingSystem).PrefabGuidToNameDictionary.ContainsKey(prefabGuid)) { obj = "GUID Not Found"; } else { string text = ((PrefabCollectionSystem_Base)existingSystem).PrefabGuidToNameDictionary[prefabGuid]; PrefabGUID val = prefabGuid; obj = text + " " + ((object)(PrefabGUID)(ref val)).ToString(); } return obj.ToString(); } } public static class Il2cppService { private static Type GetType<T>() { return Il2CppType.Of<T>(); } public unsafe static T GetComponentDataAOT<T>(this EntityManager entityManager, Entity entity) where T : unmanaged { //IL_000e: Unknown result type (might be due to invalid IL or missing references) int typeIndex = TypeManager.GetTypeIndex(GetType<T>()); T* componentDataRawRW = (T*)((EntityManager)(ref entityManager)).GetComponentDataRawRW(entity, typeIndex); return *componentDataRawRW; } public static NativeArray<Entity> GetEntitiesByComponentTypes<T1>(bool includeAll = false) { //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_0011: Expected O, but got Unknown //IL_0021: 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_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0068: 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_006a: 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) EntityQueryOptions options = (EntityQueryOptions)(includeAll ? 27 : 0); EntityQueryDesc val = new EntityQueryDesc(); val.All = Il2CppStructArray<ComponentType>.op_Implicit((ComponentType[])(object)new ComponentType[1] { new ComponentType(Il2CppType.Of<T1>(), (AccessMode)0) }); val.Options = options; EntityQueryDesc val2 = val; EntityManager entityManager = VWorld.Server.EntityManager; EntityQuery val3 = ((EntityManager)(ref entityManager)).CreateEntityQuery((EntityQueryDesc[])(object)new EntityQueryDesc[1] { val2 }); return ((EntityQuery)(ref val3)).ToEntityArray((Allocator)2); } public static NativeArray<Entity> GetEntitiesByComponentTypes<T1, T2>(bool includeAll = false) { //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_0011: Expected O, but got Unknown //IL_0021: 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_0033: 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_004a: 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_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0071: 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_007a: 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_007c: 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) EntityQueryOptions options = (EntityQueryOptions)(includeAll ? 27 : 0); EntityQueryDesc val = new EntityQueryDesc(); val.All = Il2CppStructArray<ComponentType>.op_Implicit((ComponentType[])(object)new ComponentType[2] { new ComponentType(Il2CppType.Of<T1>(), (AccessMode)0), new ComponentType(Il2CppType.Of<T2>(), (AccessMode)0) }); val.Options = options; EntityQueryDesc val2 = val; EntityManager entityManager = VWorld.Server.EntityManager; EntityQuery val3 = ((EntityManager)(ref entityManager)).CreateEntityQuery((EntityQueryDesc[])(object)new EntityQueryDesc[1] { val2 }); return ((EntityQuery)(ref val3)).ToEntityArray((Allocator)2); } public static NativeArray<Entity> GetEntitiesByComponentTypes<T1, T2, T3>(bool includeAll = false) { //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_0011: Expected O, but got Unknown //IL_0021: 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_0033: 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_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0070: 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_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_008c: 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_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) EntityQueryOptions options = (EntityQueryOptions)(includeAll ? 27 : 0); EntityQueryDesc val = new EntityQueryDesc(); val.All = Il2CppStructArray<ComponentType>.op_Implicit((ComponentType[])(object)new ComponentType[3] { new ComponentType(Il2CppType.Of<T1>(), (AccessMode)0), new ComponentType(Il2CppType.Of<T2>(), (AccessMode)0), new ComponentType(Il2CppType.Of<T3>(), (AccessMode)0) }); val.Options = options; EntityQueryDesc val2 = val; EntityManager entityManager = VWorld.Server.EntityManager; EntityQuery val3 = ((EntityManager)(ref entityManager)).CreateEntityQuery((EntityQueryDesc[])(object)new EntityQueryDesc[1] { val2 }); return ((EntityQuery)(ref val3)).ToEntityArray((Allocator)2); } } internal class PlayerService { private Dictionary<FixedString64, PlayerData> NamePlayerCache = new Dictionary<FixedString64, PlayerData>(); private Dictionary<ulong, PlayerData> SteamPlayerCache = new Dictionary<ulong, PlayerData>(); internal bool TryFindSteam(ulong steamId, out PlayerData playerData) { return SteamPlayerCache.TryGetValue(steamId, out playerData); } internal bool TryFindName(FixedString64 name, out PlayerData playerData) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) return NamePlayerCache.TryGetValue(name, out playerData); } internal PlayerService() { //IL_0036: 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_0046: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Expected O, but got Unknown //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_008f: 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_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: 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) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_0187: Unknown result type (might be due to invalid IL or missing references) //IL_018e: Expected O, but got Unknown NamePlayerCache.Clear(); SteamPlayerCache.Clear(); EntityManager entityManager = Core.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); Enumerator<Entity> enumerator = ((EntityQuery)(ref val2)).ToEntityArray((Allocator)2).GetEnumerator(); while (enumerator.MoveNext()) { Entity current = enumerator.Current; entityManager = Core.EntityManager; User componentData = ((EntityManager)(ref entityManager)).GetComponentData<User>(current); PlayerData value = new PlayerData(componentData.CharacterName, componentData.PlatformId, componentData.IsConnected, current, componentData.LocalCharacter._Entity); NamePlayerCache.TryAdd(FixedString64.op_Implicit(((object)(FixedString64)(ref componentData.CharacterName)).ToString().ToLower()), value); SteamPlayerCache.TryAdd(componentData.PlatformId, value); } IEnumerable<string> enumerable = from p in NamePlayerCache.Values where p.IsOnline select $"\t{p.CharacterName}"; ManualLogSource log = Core.Log; bool flag = default(bool); BepInExWarningLogInterpolatedStringHandler val3 = new BepInExWarningLogInterpolatedStringHandler(58, 2, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val3).AppendLiteral("Player Cache Created with "); ((BepInExLogInterpolatedStringHandler)val3).AppendFormatted<int>(NamePlayerCache.Count); ((BepInExLogInterpolatedStringHandler)val3).AppendLiteral(" entries total, listing "); ((BepInExLogInterpolatedStringHandler)val3).AppendFormatted<int>(enumerable.Count()); ((BepInExLogInterpolatedStringHandler)val3).AppendLiteral(" online:"); } log.LogWarning(val3); Core.Log.LogWarning((object)string.Join("\n", enumerable)); } internal void UpdatePlayerCache(Entity userEntity, string oldName, string newName, bool forceOffline = false) { //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_001c: 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_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004a: 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_0066: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) EntityManager entityManager = Core.EntityManager; User componentData = ((EntityManager)(ref entityManager)).GetComponentData<User>(userEntity); NamePlayerCache.Remove(FixedString64.op_Implicit(oldName.ToLower())); if (forceOffline) { componentData.IsConnected = false; } PlayerData value = new PlayerData(FixedString64.op_Implicit(newName), componentData.PlatformId, componentData.IsConnected, userEntity, componentData.LocalCharacter._Entity); NamePlayerCache[FixedString64.op_Implicit(newName.ToLower())] = value; SteamPlayerCache[componentData.PlatformId] = value; } internal bool RenamePlayer(Entity userEntity, Entity charEntity, FixedString64 newName) { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: 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_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0025: 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_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0036: 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_003e: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_0049: 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_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0061: 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_0066: 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) DebugEventsSystem existingSystem = Core.Server.GetExistingSystem<DebugEventsSystem>(); EntityManager entityManager = Core.EntityManager; NetworkId componentData = ((EntityManager)(ref entityManager)).GetComponentData<NetworkId>(userEntity); entityManager = Core.EntityManager; User componentData2 = ((EntityManager)(ref entityManager)).GetComponentData<User>(userEntity); RenameUserDebugEvent val = default(RenameUserDebugEvent); val.NewName = newName; val.Target = componentData; RenameUserDebugEvent val2 = val; FromCharacter val3 = default(FromCharacter); val3.User = userEntity; val3.Character = charEntity; FromCharacter val4 = val3; existingSystem.RenameUser(val4, val2); UpdatePlayerCache(userEntity, ((object)(FixedString64)(ref componentData2.CharacterName)).ToString(), ((object)(FixedString64)(ref newName)).ToString()); return true; } public static bool IsNewUser(Entity userEntity) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //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) User userComponente = GetUserComponente(userEntity); return ((FixedString64)(ref userComponente.CharacterName)).IsEmpty; } public static User GetUserComponente(Entity userEntity) { //IL_0006: 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_000e: 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_0017: Unknown result type (might be due to invalid IL or missing references) EntityManager entityManager = VWorld.Server.EntityManager; return ((EntityManager)(ref entityManager)).GetComponentData<User>(userEntity); } public static string GetCharacterName(Entity userEntity) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //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) User userComponente = GetUserComponente(userEntity); return ((object)(FixedString64)(ref userComponente.CharacterName)).ToString(); } public static string GetCharacterName(User user) { return ((object)(FixedString64)(ref user.CharacterName)).ToString(); } public static IEnumerable<Entity> GetUsersOnline() { EntityManager entityManager = VWorld.Server.EntityManager; EntityQuery val = ((EntityManager)(ref entityManager)).CreateEntityQuery((ComponentType[])(object)new ComponentType[1] { ComponentType.ReadOnly<User>() }); NativeArray<Entity> _userEntities = ((EntityQuery)(ref val)).ToEntityArray((Allocator)2); int len = _userEntities.Length; int i = 0; while (i < len) { if (_userEntities[i].Read<User>().IsConnected) { yield return _userEntities[i]; } int num = i + 1; i = num; } } } internal class PrefabService { internal Dictionary<string, (string Name, PrefabGUID Prefab)> NameToGuid { get; init; } = new Dictionary<string, (string, PrefabGUID)>(); internal PrefabService() { //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Expected O, but got Unknown PrefabCollectionSystem existingSystem = Core.Server.GetExistingSystem<PrefabCollectionSystem>(); Dictionary<string, PrefabGUID> spawnableNameToPrefabGuidDictionary = ((PrefabCollectionSystem_Base)existingSystem).SpawnableNameToPrefabGuidDictionary; ManualLogSource log = Core.Log; bool flag = default(bool); BepInExDebugLogInterpolatedStringHandler val = new BepInExDebugLogInterpolatedStringHandler(19, 1, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val).AppendLiteral("Spawnable prefabs: "); ((BepInExLogInterpolatedStringHandler)val).AppendFormatted<int>(spawnableNameToPrefabGuidDictionary.Count); } log.LogDebug(val); Enumerator<string, PrefabGUID> enumerator = spawnableNameToPrefabGuidDictionary.GetEnumerator(); while (enumerator.MoveNext()) { KeyValuePair<string, PrefabGUID> current = enumerator.Current; if (!NameToGuid.TryAdd(current.Key.ToLowerInvariant(), (current.Key, current.Value))) { ManualLogSource log2 = Core.Log; val = new BepInExDebugLogInterpolatedStringHandler(25, 1, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val).AppendFormatted<string>(current.Key); ((BepInExLogInterpolatedStringHandler)val).AppendLiteral(" exist already, skipping."); } log2.LogDebug(val); } } } internal bool TryGetItem(string input, out PrefabGUID prefab) { //IL_0036: 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) string text = input.ToLowerInvariant(); (string, PrefabGUID) value; bool result = NameToGuid.TryGetValue(text, out value) || NameToGuid.TryGetValue("item_" + text, out value); prefab = value.Item2; return result; } internal PrefabGUID GetGUIDByName(string value) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: 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) return NameToGuid[value.ToLowerInvariant()].Prefab; } public static string GetPrefabName(PrefabGUID hashCode) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0030: 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_0036: Unknown result type (might be due to invalid IL or missing references) PrefabCollectionSystem existingSystem = VWorld.Server.GetExistingSystem<PrefabCollectionSystem>(); string result = "Nonexistent"; if (hashCode.GuidHash == 0) { return result; } try { PrefabLookupMap prefabLookupMap = ((PrefabCollectionSystem_Base)existingSystem).PrefabLookupMap; Entity val = ((PrefabLookupMap)(ref prefabLookupMap))[hashCode]; result = ((object)(Entity)(ref val)).ToString(); } catch { result = "NoPrefabName"; } return result; } } internal class UnitSpawnerService { [HarmonyPatch(typeof(UnitSpawnerReactSystem), "OnUpdate")] public static class UnitSpawnerReactSystem_Patch { public static bool Enabled { get; set; } public static void Prefix(UnitSpawnerReactSystem __instance) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Expected O, but got Unknown //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_007b: 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_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Expected O, but got Unknown //IL_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Expected O, but got Unknown //IL_0149: Unknown result type (might be due to invalid IL or missing references) //IL_01a7: Unknown result type (might be due to invalid IL or missing references) //IL_01ae: Expected O, but got Unknown //IL_0216: Unknown result type (might be due to invalid IL or missing references) //IL_021a: Unknown result type (might be due to invalid IL or missing references) //IL_022b: Unknown result type (might be due to invalid IL or missing references) //IL_022d: Unknown result type (might be due to invalid IL or missing references) //IL_0232: Unknown result type (might be due to invalid IL or missing references) //IL_0234: Unknown result type (might be due to invalid IL or missing references) //IL_0236: Unknown result type (might be due to invalid IL or missing references) //IL_023b: Unknown result type (might be due to invalid IL or missing references) //IL_023f: Unknown result type (might be due to invalid IL or missing references) //IL_0241: Unknown result type (might be due to invalid IL or missing references) //IL_024b: Unknown result type (might be due to invalid IL or missing references) if (!Enabled) { return; } EntityQuery _OnUpdate_LambdaJob0_entityQuery = __instance.__OnUpdate_LambdaJob0_entityQuery; NativeArray<Entity> val = ((EntityQuery)(ref _OnUpdate_LambdaJob0_entityQuery)).ToEntityArray((Allocator)2); ManualLogSource log = Core.Log; bool flag = default(bool); BepInExDebugLogInterpolatedStringHandler val2 = new BepInExDebugLogInterpolatedStringHandler(40, 1, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("Processing "); ((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<int>(val.Length); ((BepInExLogInterpolatedStringHandler)val2).AppendLiteral(" in UnitSpawnerReactionSystem"); } log.LogDebug(val2); Enumerator<Entity> enumerator = val.GetEnumerator(); while (enumerator.MoveNext()) { Entity current = enumerator.Current; ManualLogSource log2 = Core.Log; val2 = new BepInExDebugLogInterpolatedStringHandler(27, 1, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("Checking if "); ((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<int>(current.Index); ((BepInExLogInterpolatedStringHandler)val2).AppendLiteral(" has lifetime.."); } log2.LogDebug(val2); EntityManager entityManager = Core.EntityManager; if (!((EntityManager)(ref entityManager)).HasComponent<LifeTime>(current)) { break; } entityManager = Core.EntityManager; LifeTime componentData = ((EntityManager)(ref entityManager)).GetComponentData<LifeTime>(current); long num = (long)Mathf.Round(componentData.Duration); ManualLogSource log3 = Core.Log; val2 = new BepInExDebugLogInterpolatedStringHandler(34, 2, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("Found durationKey "); ((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<long>(num); ((BepInExLogInterpolatedStringHandler)val2).AppendLiteral(" from LifeTime("); ((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<float>(componentData.Duration); ((BepInExLogInterpolatedStringHandler)val2).AppendLiteral(")"); } log3.LogDebug(val2); if (Core.UnitSpawner.PostActions.TryGetValue(num, out (float, Action<Entity>) value)) { (float, Action<Entity>) tuple = value; float item = tuple.Item1; Action<Entity> item2 = tuple.Item2; ManualLogSource log4 = Core.Log; val2 = new BepInExDebugLogInterpolatedStringHandler(38, 2, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("Found post actions for "); ((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<long>(num); ((BepInExLogInterpolatedStringHandler)val2).AppendLiteral(" with "); ((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<float>(item); ((BepInExLogInterpolatedStringHandler)val2).AppendLiteral(" duration"); } log4.LogDebug(val2); Core.UnitSpawner.PostActions.Remove(num); LifeTimeEndAction endAction = (LifeTimeEndAction)((!(item < 0f)) ? 2 : 0); LifeTime val3 = default(LifeTime); val3.Duration = item; val3.EndAction = endAction; LifeTime val4 = val3; entityManager = Core.EntityManager; ((EntityManager)(ref entityManager)).SetComponentData<LifeTime>(current, val4); item2(current); } } } } private static Entity empty_entity = default(Entity); internal const int DEFAULT_MINRANGE = 1; internal const int DEFAULT_MAXRANGE = 1; internal Dictionary<long, (float actualDuration, Action<Entity> Actions)> PostActions = new Dictionary<long, (float, Action<Entity>)>(); public void Spawn(Entity user, PrefabGUID unit, int count, float2 position, float minRange = 1f, float maxRange = 2f, float duration = -1f) { //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_0012: 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_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: 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_0042: Unknown result type (might be due to invalid IL or missing references) EntityManager entityManager = Core.EntityManager; Translation componentData = ((EntityManager)(ref entityManager)).GetComponentData<Translation>(user); float3 val = default(float3); ((float3)(ref val))..ctor(position.x, componentData.Value.y, position.y); UnitSpawnerUpdateSystem existingSystem = Core.Server.GetExistingSystem<UnitSpawnerUpdateSystem>(); existingSystem.SpawnUnit(empty_entity, unit, val, count, minRange, maxRange, duration); } public void SpawnWithCallback(Entity user, PrefabGUID unit, float2 position, float duration, Action<Entity> postActions) { //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_000a: 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_0013: 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_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) EntityManager entityManager = Core.EntityManager; Translation componentData = ((EntityManager)(ref entityManager)).GetComponentData<Translation>(user); float3 val = default(float3); ((float3)(ref val))..ctor(position.x, componentData.Value.y, position.y); UnitSpawnerUpdateSystem existingSystem = Core.Server.GetExistingSystem<UnitSpawnerUpdateSystem>(); UnitSpawnerReactSystem_Patch.Enabled = true; long num = NextKey(); existingSystem.SpawnUnit(empty_entity, unit, val, 1, 1f, 1f, (float)num); PostActions.Add(num, (duration, postActions)); } internal long NextKey() { Random random = new Random(); int num = 5; long num2; do { num2 = random.NextInt64(10000L) * 3; num--; if (num < 0) { throw new Exception("Failed to generate a unique key for UnitSpawnerService"); } } while (PostActions.ContainsKey(num2)); return num2; } } } namespace BloodyNotify.Structs { public struct KillEvent { public DateTime Executed { get; set; } public string VBlood { get; set; } public List<string> Killers { get; set; } public KillEvent(DateTime _executed, string _vblood) { Killers = new List<string>(); Executed = _executed; VBlood = _vblood; } } public struct PlayerData { public FixedString64 CharacterName { get; set; } public ulong SteamID { get; set; } public bool IsOnline { get; set; } public Entity UserEntity { get; set; } public Entity CharEntity { get; set; } public PlayerData(FixedString64 _characterName = default(FixedString64), ulong _steamID = 0uL, bool _isOnline = false, Entity _userEntity = default(Entity), Entity _charEntity = default(Entity)) { //IL_0002: 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_0023: Unknown result type (might be due to invalid IL or missing references) CharacterName = _characterName; SteamID = _steamID; IsOnline = _isOnline; UserEntity = _userEntity; CharEntity = _charEntity; } } public class Player { public string Name { get; set; } public ulong SteamID { get; set; } public bool IsOnline { get; set; } public bool IsAdmin { get; set; } public Entity User { get; set; } public Entity Character { get; set; } public Player(Entity userEntity = default(Entity), Entity charEntity = default(Entity)) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001b: 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_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0023: 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_0055: 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) User = userEntity; User val = User.Read<User>(); Character = val.LocalCharacter._Entity; Name = ((object)(FixedString64)(ref val.CharacterName)).ToString(); IsOnline = val.IsConnected; IsAdmin = val.IsAdmin; SteamID = val.PlatformId; } } public readonly struct Settings { private readonly ConfigFile CONFIG; private readonly ConfigEntry<bool> ENABLE_MOD; private readonly ConfigEntry<bool> PVP_KILLS; private readonly ConfigEntry<bool> NEW_PLAYER; private readonly ConfigEntry<bool> ADMIN_ONLINE; private readonly ConfigEntry<bool> VBLOOD_KILLS; private static readonly string CONFIG_PATH = Path.Combine(Paths.ConfigPath, "BloodyNotify"); private static readonly string MESSAGES_PATH = Path.Combine(CONFIG_PATH, "messages.json"); private static readonly string VBLOOD_PATH = Path.Combine(CONFIG_PATH, "vbloods.json"); private static readonly string ADMIN_PATH = Path.Combine(CONFIG_PATH, "admins.json"); private static readonly Dictionary<string, string> ANNOUNCEMENTS = new Dictionary<string, string> { { "NewUser", "A new vampire has reached Bloody Mary!" }, { "VBlood", "{vblood} was killed by {user}." }, { "PlayerKilled", "{target} was killed by {killer}!" }, { "StaffOnline", "{role} {user} is now online!" }, { "StaffOffline", "{role} {user} is now offline!" }, { "append", "and" }, { "comma", "," } }; private static readonly Dictionary<string, string> STAFF = new Dictionary<string, string> { { "123", "Role" }, { "1234", "Role" } }; private static readonly Dictionary<string, string> VBLOODS = new Dictionary<string, string> { { "CHAR_Wildlife_Wolf_VBlood", "Alpha Wolf" }, { "CHAR_Bandit_Deadeye_Frostarrow_VBlood", "Keely the Frost Archer" }, { "CHAR_Bandit_Foreman_VBlood", "Rufus the Foreman" }, { "CHAR_Bandit_StoneBreaker_VBlood", "Errol the Stonebreaker" }, { "CHAR_Bandit_Deadeye_Chaosarrow_VBlood", "Lidia the Chaos Archer" }, { "CHAR_Undead_BishopOfDeath_VBlood", "Goreswine the Ravager" }, { "CHAR_Bandit_Stalker_VBlood", "Grayson the Armourer" }, { "CHAR_Vermin_DireRat_VBlood", "Putrid Rat" }, { "CHAR_Bandit_Bomber_VBlood", "Clive the Firestarter" }, { "CHAR_Wildlife_Poloma_VBlood", "Polora the Feywalker" }, { "CHAR_Wildlife_Bear_Dire_Vblood", "Ferocious Bear" }, { "CHAR_Undead_Priest_VBlood", "Nicholaus the Fallen" }, { "CHAR_Bandit_Tourok_VBlood", "Quincey the Bandit King" }, { "CHAR_Villager_Tailor_VBlood", "Beatrice the Tailor" }, { "CHAR_Militia_Guard_VBlood", "Vincent the Frostbringer" }, { "CHAR_Farmlands_Nun_VBlood", "Christina the Sun Priestess" }, { "CHAR_VHunter_Leader_VBlood", "Tristan the Vampire Hunter" }, { "CHAR_Undead_BishopOfShadows_VBlood", "Leandra the Shadow Priestess" }, { "CHAR_Geomancer_Human_VBlood", "Terah the Geomancer" }, { "CHAR_Militia_Longbowman_LightArrow_Vblood", "Meredith the Bright Archer" }, { "CHAR_Wendigo_VBlood", "Frostmaw the Mountain Terror" }, { "CHAR_Militia_Leader_VBlood", "Octavian the Militia Captain" }, { "CHAR_Militia_BishopOfDunley_VBlood", "Raziel the Shepherd" }, { "CHAR_Spider_Queen_VBlood", "Ungora the Spider Queen" }, { "CHAR_Cursed_ToadKing_VBlood", "The Duke of Balaton" }, { "CHAR_VHunter_Jade_VBlood", "Jade the Vampire Hunter" }, { "CHAR_Undead_ZealousCultist_VBlood", "Foulrot the Soultaker" }, { "CHAR_WerewolfChieftain_VBlood", "Willfred the Werewolf Chief" }, { "CHAR_ArchMage_VBlood", "Mairwyn the Elementalist" }, { "CHAR_Town_Cardinal_VBlood", "Azariel the Sunbringer" }, { "CHAR_Winter_Yeti_VBlood", "Terrorclaw the Ogre" }, { "CHAR_Harpy_Matriarch_VBlood", "Morian the Stormwing Matriarch" }, { "CHAR_Cursed_Witch_VBlood", "Matka the Curse Weaver" }, { "CHAR_BatVampire_VBlood", "Nightmarshal Styx the Sunderer" }, { "CHAR_Cursed_MountainBeast_VBlood", "Gorecrusher the Behemoth" }, { "CHAR_Manticore_VBlood", "The Winged Horror" }, { "CHAR_Paladin_VBlood", "Solarus the Immaculate" }, { "CHAR_Bandit_GraveDigger_VBlood_UNUSED", "CHAR_Bandit_GraveDigger_VBlood_UNUSED" }, { "CHAR_Bandit_Leader_VBlood_UNUSED", "CHAR_Bandit_Leader_VBlood_UNUSED" }, { "CHAR_Bandit_Miner_VBlood_UNUSED", "CHAR_Bandit_Miner_VBlood_UNUSED" }, { "CHAR_Bandit_Thief_VBlood_UNUSED", "CHAR_Bandit_Thief_VBlood_UNUSED" }, { "CHAR_ChurchOfLight_Cardinal_VBlood", "Azariel the Sunbringer" }, { "CHAR_ChurchOfLight_Overseer_VBlood", "Sir Magnus the Overseer" }, { "CHAR_ChurchOfLight_Paladin_VBlood", "Solarus the Immaculate" }, { "CHAR_ChurchOfLight_Sommelier_VBlood", "Baron du Bouchon the Sommelier" }, { "CHAR_Forest_Bear_Dire_Vblood", "Ferocious Bear" }, { "CHAR_Forest_Wolf_VBlood", "Alpha Wolf" }, { "CHAR_Geomancer_Golem_VBlood", "CHAR_Geomancer_Golem_VBlood" }, { "CHAR_Gloomrot_Iva_VBlood", "Ziva the Engineer" }, { "CHAR_Gloomrot_Monster_VBlood", "Adam the Firstborn" }, { "CHAR_Gloomrot_Purifier_VBlood", "Angram the Purifier" }, { "CHAR_Gloomrot_RailgunSergeant_VBlood", "Voltatia the Power Master" }, { "CHAR_Gloomrot_TheProfessor_VBlood", "Henry Blackbrew the Doctor" }, { "CHAR_Gloomrot_Voltage_VBlood", "Domina the Blade Dancer" }, { "CHAR_Militia_Glassblower_VBlood", "Grethel the Glassblower" }, { "CHAR_Militia_Hound_VBlood", "CHAR_Militia_Hound_VBlood" }, { "CHAR_Militia_HoundMaster_VBlood", "CHAR_Militia_HoundMaster_VBlood" }, { "CHAR_Militia_Nun_VBlood", "Christina the Sun Priestess" }, { "CHAR_Militia_Scribe_VBlood", "Maja the Dark Savant" }, { "CHAR_Poloma_VBlood", "Polora the Feywalker" }, { "CHAR_Undead_CursedSmith_VBlood", "Cyril the Cursed Smith" }, { "CHAR_Undead_Infiltrator_VBlood", "Bane the Shadowblade" }, { "CHAR_Undead_Leader_Vblood", "Kriig the Undead General" }, { "CHAR_Villager_CursedWanderer_VBlood", "The Old Wanderer" }, { "NoPrefabName", "VBlood Boss" } }; public Settings(ConfigFile config) { CONFIG = config; ENABLE_MOD = CONFIG.Bind<bool>("Config", "EnableMod", true, "Enable or disable notifications"); PVP_KILLS = CONFIG.Bind<bool>("Config", "PVPKills", true, "Enable pvp kill notifications"); NEW_PLAYER = CONFIG.Bind<bool>("Config", "NewPlayer", true, "Enable new player notifications"); ADMIN_ONLINE = CONFIG.Bind<bool>("Config", "AdminOnline", true, "Enable admin notifications"); VBLOOD_KILLS = CONFIG.Bind<bool>("Config", "VBloodKills", true, "Enable vblood kill notifications"); } public void InitConfig() { //IL_0170: Unknown result type (might be due to invalid IL or missing references) //IL_0177: Expected O, but got Unknown //IL_01b1: Unknown result type (might be due to invalid IL or missing references) //IL_01b8: Expected O, but got Unknown //IL_01f2: Unknown result type (might be due to invalid IL or missing references) //IL_01f9: Expected O, but got Unknown //IL_0233: Unknown result type (might be due to invalid IL or missing references) //IL_023a: Expected O, but got Unknown //IL_0274: Unknown result type (might be due to invalid IL or missing references) //IL_027b: Expected O, but got Unknown WriteConfig(MESSAGES_PATH, ANNOUNCEMENTS); WriteConfig(VBLOOD_PATH, VBLOODS); WriteConfig(ADMIN_PATH, STAFF); ANNOUNCEMENTS.Clear(); VBLOODS.Clear(); STAFF.Clear(); string json = File.ReadAllText(MESSAGES_PATH); Dictionary<string, string> dictionary = JsonSerializer.Deserialize<Dictionary<string, string>>(json); foreach (KeyValuePair<string, string> item in dictionary) { ANNOUNCEMENTS.Add(item.Key, item.Value); } json = File.ReadAllText(VBLOOD_PATH); dictionary = JsonSerializer.Deserialize<Dictionary<string, string>>(json); foreach (KeyValuePair<string, string> item2 in dictionary) { VBLOODS.Add(item2.Key, item2.Value); } json = File.ReadAllText(ADMIN_PATH); dictionary = JsonSerializer.Deserialize<Dictionary<string, string>>(json); foreach (KeyValuePair<string, string> item3 in dictionary) { STAFF.Add(item3.Key, item3.Value); } ManualLogSource logInstance = Plugin.LogInstance; bool flag = default(bool); BepInExInfoLogInterpolatedStringHandler val = new BepInExInfoLogInterpolatedStringHandler(13, 1, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val).AppendLiteral("Mod enabled: "); ((BepInExLogInterpolatedStringHandler)val).AppendFormatted<bool>(ENABLE_MOD.Value); } logInstance.LogInfo(val); ManualLogSource logInstance2 = Plugin.LogInstance; val = new BepInExInfoLogInterpolatedStringHandler(19, 1, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val).AppendLiteral("PVP kills enabled: "); ((BepInExLogInterpolatedStringHandler)val).AppendFormatted<bool>(PVP_KILLS.Value); } logInstance2.LogInfo(val); ManualLogSource logInstance3 = Plugin.LogInstance; val = new BepInExInfoLogInterpolatedStringHandler(21, 1, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val).AppendLiteral("New players enabled: "); ((BepInExLogInterpolatedStringHandler)val).AppendFormatted<bool>(NEW_PLAYER.Value); } logInstance3.LogInfo(val); ManualLogSource logInstance4 = Plugin.LogInstance; val = new BepInExInfoLogInterpolatedStringHandler(16, 1, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val).AppendLiteral("Admins enabled: "); ((BepInExLogInterpolatedStringHandler)val).AppendFormatted<bool>(ADMIN_ONLINE.Value); } logInstance4.LogInfo(val); ManualLogSource logInstance5 = Plugin.LogInstance; val = new BepInExInfoLogInterpolatedStringHandler(17, 1, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val).AppendLiteral("VBloods enabled: "); ((BepInExLogInterpolatedStringHandler)val).AppendFormatted<bool>(VBLOOD_KILLS.Value); } logInstance5.LogInfo(val); } public static void WriteConfig(string path, Dictionary<string, string> dic) { if (!Directory.Exists(CONFIG_PATH)) { Directory.CreateDirectory(CONFIG_PATH); } if (!File.Exists(path)) { string contents = JsonSerializer.Serialize(dic, new JsonSerializerOptions { WriteIndented = true }); File.WriteAllText(path, contents); } } public bool GetActiveSystem(Systems type) { if (1 == 0) { } bool result = type switch { Systems.ENABLE => ENABLE_MOD.Value, Systems.VBLOOD => VBLOOD_KILLS.Value, Systems.PVP => PVP_KILLS.Value, Systems.PLAYERS => NEW_PLAYER.Value, Systems.ADMIN => ADMIN_ONLINE.Value, _ => false, }; if (1 == 0) { } return result; } public static string GetVBlood(string key) { return (key == null || !VBLOODS.ContainsKey(key)) ? VBLOODS["NoPrefabName"] : VBLOODS[key]; } public static string GetMessageTemplate(string key) { return (key == null || !ANNOUNCEMENTS.ContainsKey(key)) ? key : ANNOUNCEMENTS[key]; } public static string GetStaff(Entity user) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0004: 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) Player player = new Player(user); return (player == null || !STAFF.ContainsKey(player.SteamID.ToString())) ? null : STAFF[player.SteamID.ToString()]; } public static Dictionary<string, string> GetStaff() { return STAFF; } } public enum Systems { ENABLE, VBLOOD, PLAYERS, PVP, ADMIN } } namespace BloodyNotify.Hooks { internal class ActionScheduler { public static readonly List<KillEvent> ACTIONS = new List<KillEvent>(); public static void HandleNotifyFrame() { //IL_0093: Unknown result type (might be due to invalid IL or missing references) for (int num = ACTIONS.Count - 1; num >= 0; num--) { if (DateTime.Now - ACTIONS[num].Executed > TimeSpan.FromSeconds(1.0)) { string announcement = VBlood_Hook.GetAnnouncement(ACTIONS[num].VBlood, ACTIONS[num].Killers); if (announcement != null && !(announcement == "")) { ServerChatUtils.SendSystemMessageToAllClients(VWorld.Server.EntityManager, announcement); ACTIONS.RemoveAt(num); } } } } } [HarmonyPatch] internal class GameFrame_Hook { [HarmonyPatch("ProjectM.GameBootstrap", "Start")] [HarmonyPostfix] public static void ServerDetours() { Plugin.LogInstance.LogInfo((object)"Game has bootstrapped. Worlds and systems now exist."); GameFrame.Initialize(); } } [HarmonyPatch] internal class PlayerKilled_Hook { [HarmonyPatch(typeof(DeathEventListenerSystem), "OnUpdate")] [HarmonyPostfix] public static void OnUpdate(DeathEventListenerSystem __instance) { //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0021: 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_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003f: 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_0052: 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_0070: 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_008c: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_009b: 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_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Unknown result type (might be due to invalid IL or missing references) if (!Plugin.Settings.GetActiveSystem(Systems.PVP)) { return; } EntityQuery deathEventQuery = __instance._DeathEventQuery; NativeArray<DeathEvent> val = ((EntityQuery)(ref deathEventQuery)).ToComponentDataArray<DeathEvent>((Allocator)2); EntityManager entityManager = VWorld.Server.EntityManager; Enumerator<DeathEvent> enumerator = val.GetEnumerator(); PlayerCharacter val2 = default(PlayerCharacter); PlayerCharacter val3 = default(PlayerCharacter); while (enumerator.MoveNext()) { DeathEvent current = enumerator.Current; if (((EntityManager)(ref entityManager)).TryGetComponentData<PlayerCharacter>(current.Died, ref val2) && ((EntityManager)(ref entityManager)).TryGetComponentData<PlayerCharacter>(current.Killer, ref val3)) { Player player = new Player(val2.UserEntity); Player player2 = new Player(val3.UserEntity); if (player.SteamID != player2.SteamID) { string text = Settings.GetMessageTemplate("PlayerKilled").Replace("{killer}", player2.Name).Replace("{target}", player.Name); ServerChatUtils.SendSystemMessageToAllClients(entityManager, text); } } } } } [HarmonyPatch] internal class UserConnected_Hook { [HarmonyPatch(typeof(ServerBootstrapSystem), "OnUserConnected")] [HarmonyPrefix] public static void OnUpdate(ServerBootstrapSystem __instance, NetConnectionId netConnectionId) { //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) int num = __instance._NetEndPointToApprovedUserIndex[netConnectionId]; ServerClient val = ((Il2CppArrayBase<ServerClient>)(object)__instance._ApprovedUsersLookup)[num]; Entity userEntity = val.UserEntity; AnnounceNewUser(userEntity); AnnounceAdmin(userEntity); } private static void AnnounceNewUser(Entity user) { //IL_0018: 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) if (Plugin.Settings.GetActiveSystem(Systems.PLAYERS) && PlayerService.IsNewUser(user)) { string messageTemplate = Settings.GetMessageTemplate("NewUser"); ServerChatUtils.SendSystemMessageToAllClients(VWorld.Server.EntityManager, messageTemplate); } } private static void AnnounceAdmin(Entity user) { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_002a: 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) if (Plugin.Settings.GetActiveSystem(Systems.ADMIN)) { Player player = new Player(user); string staff = Settings.GetStaff(user); if (staff != null && !(staff == "")) { string text = Settings.GetMessageTemplate("StaffOnline").Replace("{role}", staff).Replace("{user}", player.Name); ServerChatUtils.SendSystemMessageToAllClients(VWorld.Server.EntityManager, text); } } } } [HarmonyPatch] internal class UserDisconnected_Hook { [HarmonyPatch(typeof(ServerBootstrapSystem), "OnUserDisconnected")] [HarmonyPrefix] public static void OnUpdate(ServerBootstrapSystem __instance, NetConnectionId netConnectionId, ConnectionStatusChangeReason connectionStatusReason) { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Invalid comparison between Unknown and I4 //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_004f: 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_0058: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) if (Plugin.Settings.GetActiveSystem(Systems.ADMIN) && (int)connectionStatusReason != 17) { int num = __instance._NetEndPointToApprovedUserIndex[netConnectionId]; ServerClient val = ((Il2CppArrayBase<ServerClient>)(object)__instance._ApprovedUsersLookup)[num]; Entity userEntity = val.UserEntity; Player player = new Player(userEntity); string staff = Settings.GetStaff(userEntity); if (staff != null && !(staff == "")) { string text = Settings.GetMessageTemplate("StaffOffline").Replace("{role}", staff).Replace("{user}", player.Name); ServerChatUtils.SendSystemMessageToAllClients(VWorld.Server.EntityManager, text); } } } } [HarmonyPatch] internal class VBlood_Hook { [HarmonyPatch(typeof(VBloodSystem), "OnUpdate")] [HarmonyPrefix] public static void OnUpdate(VBloodSystem __instance) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_002d: 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_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004f: 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_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0083: 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) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_0096: 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_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) if (!Plugin.Settings.GetActiveSystem(Systems.VBLOOD) || __instance.EventList.IsEmpty) { return; } Enumerator<VBloodConsumed> enumerator = __instance.EventList.GetEnumerator(); PlayerCharacter val = default(PlayerCharacter); while (enumerator.MoveNext()) { VBloodConsumed current = enumerator.Current; EntityManager entityManager = VWorld.Server.EntityManager; if (!((EntityManager)(ref entityManager)).TryGetComponentData<PlayerCharacter>(current.Target, ref val)) { continue; } FixedString128 assetName = ((PrefabCollectionSystem_Base)__instance._PrefabCollectionSystem).PrefabDataLookup[current.Source].AssetName; Player player = new Player(val.UserEntity); bool flag = false; foreach (KillEvent aCTION in ActionScheduler.ACTIONS) { if (aCTION.VBlood == ((object)(FixedString128)(ref assetName)).ToString()) { flag = true; break; } } if (!flag) { KillEvent item = new KillEvent(DateTime.Now, ((object)(FixedString128)(ref assetName)).ToString()); ActionScheduler.ACTIONS.Add(item); } for (int i = 0; i < ActionScheduler.ACTIONS.Count; i++) { if (ActionScheduler.ACTIONS[i].VBlood == ((object)(FixedString128)(ref assetName)).ToString() && !ActionScheduler.ACTIONS[i].Killers.Contains(player.Name)) { ActionScheduler.ACTIONS[i].Killers.Add(player.Name); } } } } public static string GetAnnouncement(string vblood, List<string> killers) { string vBlood = Settings.GetVBlood(vblood); StringBuilder stringBuilder = new StringBuilder(); if (killers.Count == 0) { return ""; } for (int i = 0; i < killers.Count; i++) { stringBuilder.Append(killers[i]); if (i < killers.Count - 2) { StringBuilder stringBuilder2 = stringBuilder; StringBuilder stringBuilder3 = stringBuilder2; StringBuilder.AppendInterpolatedStringHandler handler = new StringBuilder.AppendInterpolatedStringHandler(1, 1, stringBuilder2); handler.AppendFormatted(Settings.GetMessageTemplate("comma")); handler.AppendLiteral(" "); stringBuilder3.Append(ref handler); } else if (i < killers.Count - 1) { StringBuilder stringBuilder2 = stringBuilder; StringBuilder stringBuilder4 = stringBuilder2; StringBuilder.AppendInterpolatedStringHandler handler = new StringBuilder.AppendInterpolatedStringHandler(2, 1, stringBuilder2); handler.AppendLiteral(" "); handler.AppendFormatted(Settings.GetMessageTemplate("append")); handler.AppendLiteral(" "); stringBuilder4.Append(ref handler); } } return Settings.GetMessageTemplate("VBlood").Replace("{user}", stringBuilder.ToString()).Replace("{vblood}", vBlood); } } } namespace BloodyNotify.Commands { internal class AdminsCmd { [Command("admins", "a", null, "Shows online Staff members.", null, false)] public static void WhoIsOnline(ChatCommandContext ctx) { //IL_0021: 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_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) IEnumerable<Entity> usersOnline = PlayerService.GetUsersOnline(); Dictionary<string, string> staff = Settings.GetStaff(); StringBuilder stringBuilder = new StringBuilder(); foreach (Entity item in usersOnline) { Player player = new Player(item); foreach (KeyValuePair<string, string> item2 in staff) { if (player.SteamID.ToString() == item2.Key) { string value = item2.Value.Replace("</color>", ""); stringBuilder.Append(value).Append(player.Name).Append("</color>"); stringBuilder.Append(' '); } } } if (stringBuilder.Length == 0) { ctx.Reply("There is no staff online."); } else { ctx.Reply("Active staff: " + stringBuilder.ToString()); } } } [CommandGroup("notify", null)] internal class ReloadCmd { [Command("reload", "rl", null, "Reloads the config of BloodyNotify.", null, true)] public static void ReloadNotify(ChatCommandContext ctx) { Plugin.Settings.InitConfig(); ctx.Reply("BloodyNotify config reloaded!"); } } }