using System; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.IO; 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.Json; using BepInEx; using BepInEx.Core.Logging.Interpolation; using BepInEx.Logging; using BepInEx.Unity.IL2CPP; using ChatWheel.Commands; using ChatWheel.Models; using ChatWheel.Services; using HarmonyLib; using Il2CppInterop.Runtime; using Il2CppInterop.Runtime.InteropTypes.Arrays; using Il2CppSystem.Collections.Generic; using Microsoft.CodeAnalysis; using ProjectM; using ProjectM.CastleBuilding; using ProjectM.Network; using ProjectM.Scripting; using ProjectM.Terrain; using Stunlock.Core; 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("ChatWheel")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("Use emote wheel as a chat wheel")] [assembly: AssemblyFileVersion("1.0.2.0")] [assembly: AssemblyInformationalVersion("1.0.2+4dc60ed6814cd8904b02ee3c61d6785fdbeb4f2a")] [assembly: AssemblyProduct("ChatWheel")] [assembly: AssemblyTitle("ChatWheel")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.2.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.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace ChatWheel { internal static class Core { 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 PrefabCollectionSystem PrefabCollectionSystem { get; internal set; } public static ChatWheelService ChatWheelService { get; } = new ChatWheelService(); public static ManualLogSource Log { get; } = Plugin.PluginLog; internal static void InitializeAfterLoaded() { //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Expected O, but got Unknown if (!_hasInitialized) { PrefabCollectionSystem = Server.GetExistingSystemManaged(); _hasInitialized = true; ManualLogSource log = Log; bool flag = default(bool); BepInExInfoLogInterpolatedStringHandler val = new BepInExInfoLogInterpolatedStringHandler(10, 1, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val).AppendFormatted("InitializeAfterLoaded"); ((BepInExLogInterpolatedStringHandler)val).AppendLiteral(" completed"); } log.LogInfo(val); } } private static World GetWorld(string name) { Enumerator enumerator = World.s_AllWorlds.GetEnumerator(); while (enumerator.MoveNext()) { World current = enumerator.Current; if (current.Name == name) { return current; } } return null; } } public static class ECSExtensions { public unsafe static T Read(this Entity entity) where T : struct { //IL_000e: 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_0016: 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_0018: Unknown result type (might be due to invalid IL or missing references) ComponentType val = default(ComponentType); ((ComponentType)(ref val))..ctor(Il2CppType.Of(), (AccessMode)0); EntityManager entityManager = Core.EntityManager; void* componentDataRawRO = ((EntityManager)(ref entityManager)).GetComponentDataRawRO(entity, val.TypeIndex); return Marshal.PtrToStructure(new IntPtr(componentDataRawRO)); } public static bool TryRead(this Entity entity, out T componentData) where T : struct { //IL_0015: 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_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_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) ComponentType val = default(ComponentType); ((ComponentType)(ref val))..ctor(Il2CppType.Of(), (AccessMode)0); componentData = default(T); EntityManager entityManager = Core.EntityManager; int result; if (((EntityManager)(ref entityManager)).HasComponent(entity, val)) { entityManager = Core.EntityManager; result = (((EntityManager)(ref entityManager)).TryGetComponentData(entity, ref componentData) ? 1 : 0); } else { result = 0; } return (byte)result != 0; } public static bool Exists(this Entity entity) { //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) EntityManager entityManager = Core.EntityManager; return ((EntityManager)(ref entityManager)).Exists(entity); } public static string LookupName(this PrefabGUID prefabGuid) { //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_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) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002f: 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) PrefabCollectionSystem existingSystemManaged = Core.Server.GetExistingSystemManaged(); NativeParallelHashMap guidToEntityMap = existingSystemManaged._PrefabLookupMap.GuidToEntityMap; object result; if (!guidToEntityMap.ContainsKey(prefabGuid)) { result = "GUID Not Found"; } else { PrefabLookupMap prefabLookupMap = existingSystemManaged._PrefabLookupMap; result = ((PrefabLookupMap)(ref prefabLookupMap)).GetName(prefabGuid) + " PrefabGuid(" + ((PrefabGUID)(ref prefabGuid)).GuidHash + ")"; } return (string)result; } } internal static class Helper { public static NativeArray GetEntitiesByComponentType(bool includeAll = false, bool includeDisabled = false, bool includeSpawn = false, bool includePrefab = false, bool includeDestroyed = false) { //IL_0002: 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_0010: 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_0019: 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_0024: 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_0028: 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_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) //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_004f: 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_0063: 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_0068: 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_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0079: 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_0082: 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_003c: 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_0043: 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 val = (EntityQueryOptions)0; if (includeAll) { val = (EntityQueryOptions)(val | 0xC3); } if (includeDisabled) { val = (EntityQueryOptions)(val | 2); } if (includeSpawn) { val = (EntityQueryOptions)(val | 0x40); } if (includePrefab) { val = (EntityQueryOptions)(val | 1); } if (includeDestroyed) { val = (EntityQueryOptions)(val | 0x80); } EntityQueryBuilder val2 = new EntityQueryBuilder(AllocatorHandle.op_Implicit((Allocator)2)); val2 = ((EntityQueryBuilder)(ref val2)).AddAll(new ComponentType(Il2CppType.Of(), (AccessMode)0)); EntityQueryBuilder val3 = ((EntityQueryBuilder)(ref val2)).WithOptions(val); EntityManager entityManager = Core.EntityManager; EntityQuery val4 = ((EntityManager)(ref entityManager)).CreateEntityQuery(ref val3); return ((EntityQuery)(ref val4)).ToEntityArray(AllocatorHandle.op_Implicit((Allocator)2)); } public static NativeArray GetEntitiesByComponentTypes(bool includeAll = false, bool includeDisabled = false, bool includeSpawn = false, bool includePrefab = false, bool includeDestroyed = false) { //IL_0002: 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_0010: 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_0019: 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_0024: 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_0028: 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_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) //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_004f: 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_0063: 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_0077: 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_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0082: 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_008d: 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) //IL_0096: 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_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: 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_0042: 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_00a6: Unknown result type (might be due to invalid IL or missing references) EntityQueryOptions val = (EntityQueryOptions)0; if (includeAll) { val = (EntityQueryOptions)(val | 0xC3); } if (includeDisabled) { val = (EntityQueryOptions)(val | 2); } if (includeSpawn) { val = (EntityQueryOptions)(val | 0x40); } if (includePrefab) { val = (EntityQueryOptions)(val | 1); } if (includeDestroyed) { val = (EntityQueryOptions)(val | 0x80); } EntityQueryBuilder val2 = new EntityQueryBuilder(AllocatorHandle.op_Implicit((Allocator)2)); val2 = ((EntityQueryBuilder)(ref val2)).AddAll(new ComponentType(Il2CppType.Of(), (AccessMode)0)); val2 = ((EntityQueryBuilder)(ref val2)).AddAll(new ComponentType(Il2CppType.Of(), (AccessMode)0)); EntityQueryBuilder val3 = ((EntityQueryBuilder)(ref val2)).WithOptions(val); EntityManager entityManager = Core.EntityManager; EntityQuery val4 = ((EntityManager)(ref entityManager)).CreateEntityQuery(ref val3); return ((EntityQuery)(ref val4)).ToEntityArray(AllocatorHandle.op_Implicit((Allocator)2)); } public static void SendSystemMessageToClient(User user, string message) { //IL_0009: 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) FixedString512Bytes val = default(FixedString512Bytes); ((FixedString512Bytes)(ref val))..ctor(message); ServerChatUtils.SendSystemMessageToClient(Core.EntityManager, user, ref val); } public unsafe static void SetComponentData(Entity entity, T componentData) where T : struct { //IL_0028: 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_0031: 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) int num = Marshal.SizeOf(componentData); fixed (byte* ptr = StructureToByteArray(componentData)) { EntityManager entityManager = Core.EntityManager; ((EntityManager)(ref entityManager)).SetComponentDataRaw(entity, TypeIndex.op_Implicit(ComponentTypeIndex()), (void*)ptr, num); } } private static ComponentType ComponentType() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: 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) return new ComponentType(Il2CppType.Of(), (AccessMode)0); } private static int ComponentTypeIndex() { //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) return TypeIndex.op_Implicit(ComponentType().TypeIndex); } private static byte[] StructureToByteArray(T structure) where T : struct { int num = Marshal.SizeOf(structure); byte[] array = new byte[num]; IntPtr intPtr = Marshal.AllocHGlobal(num); try { Marshal.StructureToPtr(structure, intPtr, fDeleteOld: true); Marshal.Copy(intPtr, array, 0, num); } finally { Marshal.FreeHGlobal(intPtr); } return array; } public static bool AddComponent(Entity entity) where T : struct { //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) EntityManager entityManager = Core.EntityManager; return ((EntityManager)(ref entityManager)).AddComponent(entity, ComponentType()); } public static void AddComponentData(Entity entity, T componentData) where T : struct { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) AddComponent(entity); SetComponentData(entity, componentData); } } [BepInPlugin("casanova.nova.ChatWheel", "ChatWheel", "1.0.2")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class Plugin : BasePlugin { internal static Harmony Harmony; internal static ManualLogSource PluginLog; public static ManualLogSource LogInstance { get; private set; } public override void Load() { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Expected O, but got Unknown //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Expected O, but got Unknown PluginLog = ((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("casanova.nova.ChatWheel"); ((BepInExLogInterpolatedStringHandler)val).AppendLiteral(" version "); ((BepInExLogInterpolatedStringHandler)val).AppendFormatted("1.0.2"); ((BepInExLogInterpolatedStringHandler)val).AppendLiteral(" is loaded!"); } log.LogInfo(val); LogInstance = ((BasePlugin)this).Log; Database.InitConfig(); Harmony = new Harmony("casanova.nova.ChatWheel"); Harmony.PatchAll(Assembly.GetExecutingAssembly()); CommandRegistry.RegisterAll(); } 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 = "casanova.nova.ChatWheel"; public const string PLUGIN_NAME = "ChatWheel"; public const string PLUGIN_VERSION = "1.0.2"; } } namespace ChatWheel.Services { public class ChatWheelService { public static Dictionary EMOTE_MAP = new Dictionary { { -658066984, "Beckon" }, { -1462274656, "Bow" }, { -26826346, "Clap" }, { -53273186, "No" }, { -452406649, "Point" }, { -370061286, "Salute" }, { -1064533554, "Surrender" }, { -158502505, "Taunt" }, { 1177797340, "Wave" }, { -1525577000, "Yes" }, { 808904257, "Sit" }, { -578764388, "Shrug" } }; public string GetEmoteName(PrefabGUID prefabGuid) { return EMOTE_MAP.GetValueOrDefault(((PrefabGUID)(ref prefabGuid)).GuidHash, "Unknown Emote"); } } } namespace ChatWheel.Patches { [HarmonyPatch(typeof(EmoteSystem), "OnUpdate")] public static class EmoteSystemPatch { public static readonly PrefabGUID Buff_InCombat_PvPVampire = new PrefabGUID(697095869); public static readonly PrefabGUID Buff_General_VampirePvPDeathDebuff = new PrefabGUID(1591132469); [HarmonyPrefix] private static void OnUpdatePrefix(EmoteSystem __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_0a8d: Unknown result type (might be due to invalid IL or missing references) //IL_0a94: Expected O, but got Unknown //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: 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_002e: 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_0043: 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_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_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_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_005d: 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_0066: 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_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_0108: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_0111: 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_0124: Unknown result type (might be due to invalid IL or missing references) //IL_016f: Unknown result type (might be due to invalid IL or missing references) //IL_0174: Unknown result type (might be due to invalid IL or missing references) //IL_0178: Unknown result type (might be due to invalid IL or missing references) //IL_017f: Unknown result type (might be due to invalid IL or missing references) //IL_018b: Unknown result type (might be due to invalid IL or missing references) //IL_01cc: Unknown result type (might be due to invalid IL or missing references) //IL_01ce: Unknown result type (might be due to invalid IL or missing references) //IL_01d3: Unknown result type (might be due to invalid IL or missing references) //IL_01dc: Unknown result type (might be due to invalid IL or missing references) //IL_01e1: Unknown result type (might be due to invalid IL or missing references) //IL_01e3: Unknown result type (might be due to invalid IL or missing references) //IL_01e5: Unknown result type (might be due to invalid IL or missing references) //IL_01ea: Unknown result type (might be due to invalid IL or missing references) //IL_0287: Unknown result type (might be due to invalid IL or missing references) //IL_028c: Unknown result type (might be due to invalid IL or missing references) //IL_0291: Unknown result type (might be due to invalid IL or missing references) //IL_0296: Unknown result type (might be due to invalid IL or missing references) //IL_047e: Unknown result type (might be due to invalid IL or missing references) //IL_0480: Unknown result type (might be due to invalid IL or missing references) //IL_0485: Unknown result type (might be due to invalid IL or missing references) //IL_048c: Unknown result type (might be due to invalid IL or missing references) //IL_0491: Unknown result type (might be due to invalid IL or missing references) //IL_0496: Unknown result type (might be due to invalid IL or missing references) //IL_049b: Unknown result type (might be due to invalid IL or missing references) //IL_0820: Unknown result type (might be due to invalid IL or missing references) //IL_0825: Unknown result type (might be due to invalid IL or missing references) //IL_0829: Unknown result type (might be due to invalid IL or missing references) //IL_0685: Unknown result type (might be due to invalid IL or missing references) //IL_0691: Unknown result type (might be due to invalid IL or missing references) //IL_0696: Unknown result type (might be due to invalid IL or missing references) //IL_069a: Unknown result type (might be due to invalid IL or missing references) //IL_069d: Unknown result type (might be due to invalid IL or missing references) //IL_06a2: Unknown result type (might be due to invalid IL or missing references) //IL_06a7: Unknown result type (might be due to invalid IL or missing references) //IL_06ac: Unknown result type (might be due to invalid IL or missing references) //IL_029f: Unknown result type (might be due to invalid IL or missing references) //IL_02a4: Unknown result type (might be due to invalid IL or missing references) //IL_02a7: Unknown result type (might be due to invalid IL or missing references) //IL_02a9: Unknown result type (might be due to invalid IL or missing references) //IL_02ae: Unknown result type (might be due to invalid IL or missing references) //IL_02b3: Unknown result type (might be due to invalid IL or missing references) //IL_084a: Unknown result type (might be due to invalid IL or missing references) //IL_0853: Unknown result type (might be due to invalid IL or missing references) //IL_0861: Unknown result type (might be due to invalid IL or missing references) //IL_0866: Unknown result type (might be due to invalid IL or missing references) //IL_086b: Unknown result type (might be due to invalid IL or missing references) //IL_086d: Unknown result type (might be due to invalid IL or missing references) //IL_086f: Unknown result type (might be due to invalid IL or missing references) //IL_0874: Unknown result type (might be due to invalid IL or missing references) //IL_0878: Unknown result type (might be due to invalid IL or missing references) //IL_087d: Unknown result type (might be due to invalid IL or missing references) //IL_087f: Unknown result type (might be due to invalid IL or missing references) //IL_0884: Unknown result type (might be due to invalid IL or missing references) //IL_0888: Unknown result type (might be due to invalid IL or missing references) //IL_088a: Unknown result type (might be due to invalid IL or missing references) //IL_0892: Unknown result type (might be due to invalid IL or missing references) //IL_0894: Unknown result type (might be due to invalid IL or missing references) //IL_04a4: Unknown result type (might be due to invalid IL or missing references) //IL_04a9: Unknown result type (might be due to invalid IL or missing references) //IL_04ac: Unknown result type (might be due to invalid IL or missing references) //IL_04ae: Unknown result type (might be due to invalid IL or missing references) //IL_04b3: Unknown result type (might be due to invalid IL or missing references) //IL_04b8: Unknown result type (might be due to invalid IL or missing references) //IL_04ba: Unknown result type (might be due to invalid IL or missing references) //IL_04bf: Unknown result type (might be due to invalid IL or missing references) //IL_04c1: Unknown result type (might be due to invalid IL or missing references) //IL_054c: Unknown result type (might be due to invalid IL or missing references) //IL_054e: Unknown result type (might be due to invalid IL or missing references) //IL_0553: Unknown result type (might be due to invalid IL or missing references) //IL_02c4: Unknown result type (might be due to invalid IL or missing references) //IL_02c6: Unknown result type (might be due to invalid IL or missing references) //IL_02cb: Unknown result type (might be due to invalid IL or missing references) //IL_06b5: Unknown result type (might be due to invalid IL or missing references) //IL_06ba: Unknown result type (might be due to invalid IL or missing references) //IL_06bd: Unknown result type (might be due to invalid IL or missing references) //IL_06bf: Unknown result type (might be due to invalid IL or missing references) //IL_06c4: Unknown result type (might be due to invalid IL or missing references) //IL_06c9: Unknown result type (might be due to invalid IL or missing references) //IL_06cb: Unknown result type (might be due to invalid IL or missing references) //IL_06cd: Unknown result type (might be due to invalid IL or missing references) //IL_06d2: Unknown result type (might be due to invalid IL or missing references) //IL_06d4: Unknown result type (might be due to invalid IL or missing references) //IL_04d5: Unknown result type (might be due to invalid IL or missing references) //IL_02dc: Unknown result type (might be due to invalid IL or missing references) //IL_02e1: Unknown result type (might be due to invalid IL or missing references) //IL_08ce: Unknown result type (might be due to invalid IL or missing references) //IL_08d0: Unknown result type (might be due to invalid IL or missing references) //IL_08d3: Invalid comparison between Unknown and I4 //IL_06ec: Unknown result type (might be due to invalid IL or missing references) //IL_06ee: Unknown result type (might be due to invalid IL or missing references) //IL_06f3: Unknown result type (might be due to invalid IL or missing references) //IL_06f8: Unknown result type (might be due to invalid IL or missing references) //IL_06fa: Unknown result type (might be due to invalid IL or missing references) //IL_06fc: Unknown result type (might be due to invalid IL or missing references) //IL_099e: Unknown result type (might be due to invalid IL or missing references) //IL_09a3: Unknown result type (might be due to invalid IL or missing references) //IL_09a8: Unknown result type (might be due to invalid IL or missing references) //IL_09ad: Unknown result type (might be due to invalid IL or missing references) //IL_08df: Unknown result type (might be due to invalid IL or missing references) //IL_0721: Unknown result type (might be due to invalid IL or missing references) //IL_0710: Unknown result type (might be due to invalid IL or missing references) //IL_0712: Unknown result type (might be due to invalid IL or missing references) //IL_0717: Unknown result type (might be due to invalid IL or missing references) //IL_071c: Unknown result type (might be due to invalid IL or missing references) //IL_04ef: Unknown result type (might be due to invalid IL or missing references) //IL_04f4: Unknown result type (might be due to invalid IL or missing references) //IL_04f8: Unknown result type (might be due to invalid IL or missing references) //IL_05a4: Unknown result type (might be due to invalid IL or missing references) //IL_05a9: Unknown result type (might be due to invalid IL or missing references) //IL_05b5: Unknown result type (might be due to invalid IL or missing references) //IL_05bc: Expected O, but got Unknown //IL_05c6: Unknown result type (might be due to invalid IL or missing references) //IL_05cb: Unknown result type (might be due to invalid IL or missing references) //IL_05de: Unknown result type (might be due to invalid IL or missing references) //IL_05e3: Unknown result type (might be due to invalid IL or missing references) //IL_05e8: Unknown result type (might be due to invalid IL or missing references) //IL_05ed: Unknown result type (might be due to invalid IL or missing references) //IL_05f2: Unknown result type (might be due to invalid IL or missing references) //IL_02f9: Unknown result type (might be due to invalid IL or missing references) //IL_02fb: Unknown result type (might be due to invalid IL or missing references) //IL_0300: Unknown result type (might be due to invalid IL or missing references) //IL_0302: Unknown result type (might be due to invalid IL or missing references) //IL_0304: Unknown result type (might be due to invalid IL or missing references) //IL_0309: Unknown result type (might be due to invalid IL or missing references) //IL_030b: Unknown result type (might be due to invalid IL or missing references) //IL_0312: Unknown result type (might be due to invalid IL or missing references) //IL_08ea: Unknown result type (might be due to invalid IL or missing references) //IL_072d: Unknown result type (might be due to invalid IL or missing references) //IL_0504: Unknown result type (might be due to invalid IL or missing references) //IL_05f8: Unknown result type (might be due to invalid IL or missing references) //IL_05fd: Unknown result type (might be due to invalid IL or missing references) //IL_0343: Unknown result type (might be due to invalid IL or missing references) //IL_0348: Unknown result type (might be due to invalid IL or missing references) //IL_09b6: Unknown result type (might be due to invalid IL or missing references) //IL_09bb: Unknown result type (might be due to invalid IL or missing references) //IL_09be: Unknown result type (might be due to invalid IL or missing references) //IL_09c0: Unknown result type (might be due to invalid IL or missing references) //IL_09c5: Unknown result type (might be due to invalid IL or missing references) //IL_09ca: Unknown result type (might be due to invalid IL or missing references) //IL_09cc: Unknown result type (might be due to invalid IL or missing references) //IL_050d: Unknown result type (might be due to invalid IL or missing references) //IL_09df: Unknown result type (might be due to invalid IL or missing references) //IL_09e2: Invalid comparison between Unknown and I4 //IL_0910: Unknown result type (might be due to invalid IL or missing references) //IL_0915: Unknown result type (might be due to invalid IL or missing references) //IL_0919: Unknown result type (might be due to invalid IL or missing references) //IL_091c: Unknown result type (might be due to invalid IL or missing references) //IL_0921: Unknown result type (might be due to invalid IL or missing references) //IL_08fe: Unknown result type (might be due to invalid IL or missing references) //IL_0745: Unknown result type (might be due to invalid IL or missing references) //IL_074a: Unknown result type (might be due to invalid IL or missing references) //IL_074e: Unknown result type (might be due to invalid IL or missing references) //IL_0751: Unknown result type (might be due to invalid IL or missing references) //IL_0756: Unknown result type (might be due to invalid IL or missing references) //IL_075b: Unknown result type (might be due to invalid IL or missing references) //IL_0760: Unknown result type (might be due to invalid IL or missing references) //IL_0603: Unknown result type (might be due to invalid IL or missing references) //IL_0608: Unknown result type (might be due to invalid IL or missing references) //IL_060b: Unknown result type (might be due to invalid IL or missing references) //IL_0a32: Unknown result type (might be due to invalid IL or missing references) //IL_0a3b: Unknown result type (might be due to invalid IL or missing references) //IL_0a48: Unknown result type (might be due to invalid IL or missing references) //IL_09eb: Unknown result type (might be due to invalid IL or missing references) //IL_09ed: Unknown result type (might be due to invalid IL or missing references) //IL_09f2: Unknown result type (might be due to invalid IL or missing references) //IL_09f6: Unknown result type (might be due to invalid IL or missing references) //IL_09fb: Unknown result type (might be due to invalid IL or missing references) //IL_09fd: Unknown result type (might be due to invalid IL or missing references) //IL_09ff: Unknown result type (might be due to invalid IL or missing references) //IL_0a04: Unknown result type (might be due to invalid IL or missing references) //IL_0a08: Unknown result type (might be due to invalid IL or missing references) //IL_0a0d: Unknown result type (might be due to invalid IL or missing references) //IL_0a0f: Unknown result type (might be due to invalid IL or missing references) //IL_0a11: Unknown result type (might be due to invalid IL or missing references) //IL_0a16: Unknown result type (might be due to invalid IL or missing references) //IL_0a18: Unknown result type (might be due to invalid IL or missing references) //IL_061d: Unknown result type (might be due to invalid IL or missing references) //IL_061f: Unknown result type (might be due to invalid IL or missing references) //IL_036f: Unknown result type (might be due to invalid IL or missing references) //IL_0371: Unknown result type (might be due to invalid IL or missing references) //IL_0376: Unknown result type (might be due to invalid IL or missing references) //IL_0378: Unknown result type (might be due to invalid IL or missing references) //IL_037a: Unknown result type (might be due to invalid IL or missing references) //IL_037f: Unknown result type (might be due to invalid IL or missing references) //IL_0381: Unknown result type (might be due to invalid IL or missing references) //IL_0388: Unknown result type (might be due to invalid IL or missing references) //IL_092d: Unknown result type (might be due to invalid IL or missing references) //IL_0932: Unknown result type (might be due to invalid IL or missing references) //IL_0934: Unknown result type (might be due to invalid IL or missing references) //IL_0936: Unknown result type (might be due to invalid IL or missing references) //IL_093b: Unknown result type (might be due to invalid IL or missing references) //IL_093d: Unknown result type (might be due to invalid IL or missing references) //IL_0766: Unknown result type (might be due to invalid IL or missing references) //IL_076b: Unknown result type (might be due to invalid IL or missing references) //IL_076e: Unknown result type (might be due to invalid IL or missing references) //IL_0770: Unknown result type (might be due to invalid IL or missing references) //IL_0775: Unknown result type (might be due to invalid IL or missing references) //IL_077a: Unknown result type (might be due to invalid IL or missing references) //IL_077c: Unknown result type (might be due to invalid IL or missing references) //IL_077e: Unknown result type (might be due to invalid IL or missing references) //IL_0783: Unknown result type (might be due to invalid IL or missing references) //IL_0785: Unknown result type (might be due to invalid IL or missing references) //IL_042c: Unknown result type (might be due to invalid IL or missing references) //IL_042e: Unknown result type (might be due to invalid IL or missing references) //IL_0433: Unknown result type (might be due to invalid IL or missing references) //IL_043c: Unknown result type (might be due to invalid IL or missing references) //IL_094d: Unknown result type (might be due to invalid IL or missing references) //IL_0956: Unknown result type (might be due to invalid IL or missing references) //IL_0963: Unknown result type (might be due to invalid IL or missing references) EntityQuery query = __instance._Query; NativeArray val = ((EntityQuery)(ref query)).ToEntityArray(AllocatorHandle.op_Implicit((Allocator)2)); try { Enumerator enumerator = val.GetEnumerator(); CastleTerritory val13 = default(CastleTerritory); FixedString512Bytes val20 = default(FixedString512Bytes); while (enumerator.MoveNext()) { Entity current = enumerator.Current; if (!current.Exists()) { continue; } UseEmoteEvent val2 = current.Read(); FromCharacter val3 = current.Read(); PrefabGUID action = val2.Action; Entity character = val3.Character; Entity user = val3.User; if (!user.Exists()) { continue; } User user2 = user.Read(); string text = user2.PlatformId.ToString(); string key = $"{text}|{((PrefabGUID)(ref action)).GuidHash}"; EntityManager entityManager; if (ChatWheelCommands.TO_BIND.TryGetValue(text, out var value)) { Database.CHATWHEEL[key] = value; Database.SaveChatWheel(); ChatWheelCommands.TO_BIND.Remove(text); entityManager = Core.EntityManager; ((EntityManager)(ref entityManager)).DestroyEntity(current); Helper.SendSystemMessageToClient(user2, "ChatWheel: Message is now bound to " + Core.ChatWheelService.GetEmoteName(action)); } else if (ChatWheelCommands.TO_UNBIND.Contains(text)) { Database.CHATWHEEL.Remove(key); Database.SaveChatWheel(); ChatWheelCommands.TO_UNBIND.Remove(text); entityManager = Core.EntityManager; ((EntityManager)(ref entityManager)).DestroyEntity(current); Helper.SendSystemMessageToClient(user2, "ChatWheel: Emote " + Core.ChatWheelService.GetEmoteName(action) + " is now back to normal"); } else { if (!Database.CHATWHEEL.TryGetValue(key, out var value2) || !Database.IsChatWheelEnabled(text)) { continue; } NetworkId val4 = user.Read(); Entity entityOnServer = ((NetworkedEntity)(ref user2.ClanEntity)).GetEntityOnServer(); NetworkId val5 = character.Read(); bool flag = value2.message.Contains("$combatTimer", StringComparison.OrdinalIgnoreCase); bool flag2 = value2.message.Contains("$baneTimer", StringComparison.OrdinalIgnoreCase); bool flag3 = value2.message.Contains("$deathTimer", StringComparison.OrdinalIgnoreCase); bool flag4 = value2.message.Contains("$location", StringComparison.OrdinalIgnoreCase); bool flag5 = value2.message.Contains("$ultCd", StringComparison.OrdinalIgnoreCase); string newValue = "0s"; string text2 = "0s"; string newValue2 = "30s"; string text3 = ""; string newValue3 = "N/A"; if (flag || flag2) { Enumerator enumerator2 = Helper.GetEntitiesByComponentTypes().GetEnumerator(); while (enumerator2.MoveNext()) { Entity current2 = enumerator2.Current; if (!(current2.Read().Owner == character)) { continue; } PrefabGUID val6 = current2.Read(); int guidHash = ((PrefabGUID)(ref val6)).GuidHash; if (flag) { val6 = Buff_InCombat_PvPVampire; if (guidHash.Equals(((PrefabGUID)(ref val6)).GuidHash)) { Age val7 = current2.Read(); LifeTime val8 = current2.Read(); newValue = Convert.ToInt32(val8.Duration - val7.Value) + "s"; continue; } } if (!(flag2 || flag3)) { continue; } val6 = Buff_General_VampirePvPDeathDebuff; if (!guidHash.Equals(((PrefabGUID)(ref val6)).GuidHash)) { continue; } if (flag2) { Age val9 = current2.Read(); LifeTime val10 = current2.Read(); int num = Convert.ToInt32(val10.Duration - val9.Value); int num2 = num / 60; int num3 = num % 60; text2 = ""; if (num2 > 0) { text2 += $"{num2}m"; } if (num3 > 0) { text2 += $"{num3}s"; } } if (flag3) { Buff val11 = current2.Read(); newValue2 = Math.Min(150, 30 + val11.Stacks * 60) + "s"; } } } if (flag4) { TilePosition val12 = character.Read(); Enumerator enumerator3 = Helper.GetEntitiesByComponentType().GetEnumerator(); while (enumerator3.MoveNext()) { Entity current3 = enumerator3.Current; Entity castleTerritoryEntity = current3.Read().CastleTerritoryEntity; if (CastleTerritoryExtensions.IsTileInTerritory(Core.EntityManager, val12.Tile, ref castleTerritoryEntity, ref val13) && current3.TryRead(out UserOwner componentData)) { Entity entityOnServer2 = ((NetworkedEntity)(ref componentData.Owner)).GetEntityOnServer(); if (!((Entity)(ref entityOnServer2)).Equals(Entity.Null) && entityOnServer2.Exists() && entityOnServer2.TryRead(out User componentData2)) { text3 = ((object)(FixedString64Bytes)(ref componentData2.CharacterName)).ToString() + "'s castle in "; } break; } } CurrentMapZone val14 = user.Read(); string text4 = ((object)(TerrainChunk)(ref val14.TerrainChunk)).ToString(); if (text4 == "8,8" || text4 == "14,8") { text3 += Database.GetChunkCommonName(text4); } else { entityManager = Core.EntityManager; EntityQueryDesc[] array = new EntityQueryDesc[1]; EntityQueryDesc val15 = new EntityQueryDesc(); val15.All = Il2CppStructArray.op_Implicit((ComponentType[])(object)new ComponentType[1] { ComponentType.ReadOnly() }); array[0] = val15; EntityQuery val16 = ((EntityManager)(ref entityManager)).CreateEntityQuery((EntityQueryDesc[])(object)array); NativeArray val17 = ((EntityQuery)(ref val16)).ToEntityArray(AllocatorHandle.op_Implicit((Allocator)2)); try { Enumerator enumerator4 = val17.GetEnumerator(); while (enumerator4.MoveNext()) { Entity current4 = enumerator4.Current; if (current4.TryRead(out TerrainChunkMetadata componentData3) && ((TerrainChunk)(ref componentData3.Coordinate)).Equals(val14.TerrainChunk)) { text3 += Database.GetChunkCommonName(((object)(FixedString128Bytes)(ref componentData3.ChunkName)).ToString()); break; } } } finally { val17.Dispose(); } } } if (flag5) { double serverTime = Core.Server.GetExistingSystemManaged().GetServerGameManager().ServerTime; entityManager = Core.EntityManager; Enumerator enumerator5 = ((EntityManager)(ref entityManager)).GetBuffer(character, false).GetEnumerator(); while (enumerator5.MoveNext()) { AbilityGroupSlotBuffer current5 = enumerator5.Current; Entity entity = current5.GroupSlotEntity._Entity; AbilityGroupSlot val18 = entity.Read(); if (val18.SlotId != 7) { continue; } Entity entity2 = val18.StateEntity._Entity; if (!ModifiableBool.op_Implicit(val18.CopyCooldown)) { entity2 = val18.PreviousStateEntity._Entity; } if (!((Entity)(ref entity2)).Equals(Entity.Null) && entity2.Exists()) { entityManager = Core.EntityManager; Enumerator enumerator6 = ((EntityManager)(ref entityManager)).GetBuffer(entity2, false).GetEnumerator(); if (enumerator6.MoveNext()) { AbilityStateBuffer current6 = enumerator6.Current; Entity entity3 = current6.StateEntity._Entity; AbilityCooldownState val19 = entity3.Read(); newValue3 = Math.Ceiling(Math.Max(val19.CooldownEndTime - serverTime, 0.0)) + "s"; } } break; } } ((FixedString512Bytes)(ref val20))..ctor(value2.message.Replace("$combatTimer", newValue, StringComparison.OrdinalIgnoreCase).Replace("$baneTimer", text2, StringComparison.OrdinalIgnoreCase).Replace("$deathTimer", newValue2, StringComparison.OrdinalIgnoreCase) .Replace("$location", text3, StringComparison.OrdinalIgnoreCase) .Replace("$ultCd", newValue3, StringComparison.OrdinalIgnoreCase)); entityManager = Core.EntityManager; ((EntityManager)(ref entityManager)).DestroyEntity(current); if (value2.message[0] == '.') { ChatMessageEvent val21 = default(ChatMessageEvent); val21.MessageType = (ChatMessageType)3; val21.MessageText = FixedString512Bytes.op_Implicit(value2.message); ChatMessageEvent componentData4 = val21; entityManager = Core.EntityManager; Entity val22 = ((EntityManager)(ref entityManager)).CreateEntity(); entityManager = Core.EntityManager; ((EntityManager)(ref entityManager)).AddComponentData(val22, val3); Helper.AddComponentData(val22, componentData4); continue; } ServerChatMessageType val23 = (ServerChatMessageType)((value2.scope == "global") ? 1 : ((value2.scope == "clan") ? 3 : 8)); if ((int)val23 == 3) { if (!entityOnServer.Exists() || ((Entity)(ref entityOnServer)).Equals(Entity.Null)) { Helper.SendSystemMessageToClient(user2, "ChatWheel: You don't have a clan."); continue; } entityManager = Core.EntityManager; DynamicBuffer buffer = ((EntityManager)(ref entityManager)).GetBuffer(entityOnServer, false); for (int i = 0; i < buffer.Length; i++) { SyncToUserBuffer val24 = buffer[i]; Entity userEntity = val24.UserEntity; if (userEntity.TryRead(out ConnectedUser componentData5)) { int userIndex = componentData5.UserIndex; ServerChatUtils.SendChatMessage(Core.EntityManager, ref userIndex, ref val20, ref val4, ref val5, val23, DateTime.UtcNow.Ticks); } } continue; } Enumerator enumerator7 = Helper.GetEntitiesByComponentType().GetEnumerator(); while (enumerator7.MoveNext()) { Entity current7 = enumerator7.Current; Entity userEntity2 = current7.Read().UserEntity; if (!userEntity2.TryRead(out ConnectedUser componentData6)) { continue; } if ((int)val23 == 8) { LocalToWorld val25 = character.Read(); float3 position = ((LocalToWorld)(ref val25)).Position; val25 = current7.Read(); float3 position2 = ((LocalToWorld)(ref val25)).Position; if (Vector3.Distance(float3.op_Implicit(position), float3.op_Implicit(position2)) > 40f) { continue; } } int userIndex2 = componentData6.UserIndex; ServerChatUtils.SendChatMessage(Core.EntityManager, ref userIndex2, ref val20, ref val4, ref val5, val23, DateTime.UtcNow.Ticks); } } } } catch (Exception ex) { ManualLogSource log = Core.Log; bool flag6 = default(bool); BepInExErrorLogInterpolatedStringHandler val26 = new BepInExErrorLogInterpolatedStringHandler(27, 1, ref flag6); if (flag6) { ((BepInExLogInterpolatedStringHandler)val26).AppendLiteral("Error in EmoteSystemPatch: "); ((BepInExLogInterpolatedStringHandler)val26).AppendFormatted(ex.Message); } log.LogError(val26); } finally { val.Dispose(); } } } } namespace ChatWheel.Models { public class ChatWheelMessage { public string scope; public string message; } [StructLayout(LayoutKind.Sequential, Size = 1)] public readonly struct Database { private static readonly string CONFIG_PATH = Path.Combine(Paths.ConfigPath, "ChatWheel"); public static readonly string PLAYER_SETTINGS_PATH = Path.Combine(CONFIG_PATH, "playerSettings.json"); public static readonly string CHATWHEEL_PATH = Path.Combine(CONFIG_PATH, "chatwheel.json"); public static readonly string CHUNKMAP_PATH = Path.Combine(CONFIG_PATH, "chunkMap.json"); private static readonly Dictionary CHUNKMAP = new Dictionary { { "14,8", "Farbane southeast near waygate" }, { "8,8", "Farbane southwest near waygate" }, { "Curse_Builder_Corner01_Territory", "CF northwest" }, { "Curse_Builder_Corner02_Territory", "CF northeast" }, { "Curse_Corner01", "Frog Boss" }, { "Curse_Edge04", "Cyril-Matka" }, { "Curse_Edge05_Territory", "CF middle south" }, { "Curse_Edge06", "CF near Behemoth cave" }, { "Curse_SpiderCave01_Territory", "Spider Cave" }, { "Cursed_InCorner01_Territory", "CF north" }, { "Dev_Island_Chunk", "Dev Island" }, { "Dunley_Builder_Corner01_Territory", "Dunley southwest corner" }, { "Dunley_Builder_Corner02_Territory", "Dunley southeast " }, { "Dunley_Builder_Corner04", "Quartz Quarry" }, { "Dunley_Builder_Edge01_Territory", "Dunley east" }, { "Dunley_Builder_Edge02_Territory", "Iron Mine east beside waygate" }, { "Dunley_Builder_Edge03_Territory", "Iron Mine west beside waygate" }, { "Dunley_Builder_Edge04_Territory", "around Maja" }, { "Dunley_Corner05_DraculasRuin", "Dunley north below Gloom waygate" }, { "Dunley_Edge01_HorseTrack", "Horse Track" }, { "Dunley_Edge05_BigFarm", "Dunley near Lumber Mill" }, { "Dunley_Edge06_FarmCotton_Territory", "Dunley southeast Cotton Farm" }, { "Dunley_Edge08_DraculasRuin", "Styx south" }, { "Dunley_Group_IronMine_Mid01_Territory", "Iron Mine" }, { "Dunley_Group_IronMine_Mid02_Territory", "Iron Mine north" }, { "Dunley_Group_Middle01", "Dunley middle" }, { "Dunley_Group_Middle02", "Dunley-Farbane Cave" }, { "Dunley_Group_Middle03", "Dunley near Market" }, { "Dunley_Group_Middle04", "Dunley north near Iron Cave" }, { "Dunley_GroupWerewolf_Chunk01_Territory", "Leandra" }, { "Dunley_GroupWerewolf_Chunk02", "Colosseum-Werewolf area" }, { "Dunley_GroupWerewolf_Chunk03", "Maja north" }, { "Dunley_GroupWerewolf_Chunk04_Territory", "Werewolf" }, { "Dunley_GroupWerewolf_Chunk05_Territory", "Werewolf east" }, { "Dunley_InCorner01_IronVeins_Territory", "Monastery waygate" }, { "Dunley_Mid02_Colosseum", "Colosseum" }, { "Dunley_Mid02_Colosseum_Territory", "Colosseum" }, { "Dunley_Mid03_BigFort", "Dunley around Octavian" }, { "Dunley_Mid04_VillageChurch_Territory", "Mosswick" }, { "Dunley_Mid05_Lake", "Iron Mine west" }, { "Dunley_Mid06_AnimalFarm", "Iron Mine east" }, { "Dunley_Mid07_Waypoint_Territory", "Beatrice north" }, { "Dunley_Mid08_VillageChurch_Territory", "Beatrice" }, { "Dunley_Mid09_BigChurch_Territory", "Monastery" }, { "Dunley_Mid09_Waypoint", "Octavian waygate" }, { "DunleyCursed_BridgeGroup01_Chunk01", "CF west waygate" }, { "DunleySilver_BridgeGroup01_Chunk01_Territory", "Dunley-SL road" }, { "DunleySilver_BridgeGroup01_Chunk02", "SL waygate" }, { "DunleyWerewolf_Chunk01", "Leandra" }, { "ElrisCursed_Bridge_Group01_Chunk01", "Foulrot waygate" }, { "ElrisCursed_Bridge_Group01_Chunk02", "Rift #2 north" }, { "ElrisCursed_Bridge01_Chunk02", "Mortium north" }, { "Farbane_BackgroundChunk02", "Farbane far south middle" }, { "Farbane_Builder_Corner01_Territory", "Farbane southwest corner" }, { "Farbane_Builder_Corner02_Territory", "Farbane near west Dunley bridge" }, { "Farbane_Builder_Corner03_Territory", "Below Goreswine Right Cemetery" }, { "Farbane_Builder_Corner04_Territory", "Farbane south of Goreswine Left Cemetery" }, { "Farbane_Builder_Edge01_Territory", "Finn" }, { "Farbane_Builder_Edge02_Territory", "Talzur" }, { "Farbane_Builder_Edge03_Territory", "Farbane southeast" }, { "Farbane_Builder_Edge04_Territory", "Farbane north, east of Quincey" }, { "Farbane_Builder_Edge05_Territory", "Farbane north, west of Quincey" }, { "Farbane_Builder_Edge06_Territory", "Clive north" }, { "Farbane_Builder_Edge07_Territory", "Farbane southwest" }, { "Farbane_Builder_Edge08_Territory", "Farbane southeast" }, { "Farbane_Builder_InCorner01_Territory", "Farbane near west Merchant" }, { "Farbane_Builder_InCorner03_Territory", "Bear Cave west" }, { "Farbane_Builder_InCorner04_Territory", "Farbane southwest area" }, { "Farbane_Builder_InCorner05_Territory", "Polora south" }, { "Farbane_Corner03_GrizzlyBearCave_Territory", "Bear Cave" }, { "Farbane_Corner04_Medow_Territory", "Polora" }, { "Farbane_Corner06_Sulfurquarry", "Clive" }, { "Farbane_Edge05", "Farbane south middle" }, { "Farbane_Edge06_BanditFort_Territory", "Quincey" }, { "Farbane_InCorner04_Graveyard_Territory", "Goreswine Left Cemetery" }, { "Farbane_InCorner05_Graveyard_Territory", "Goreswine Right Cemetery" }, { "Farbane_InCorner06_Territory", "Farbane west edge" }, { "Farbane_Mid02_HauntedGraveyard_Territory", "Nicholaus" }, { "Farbane_Mid02_Waypoint_Territory", "near Keely waygate" }, { "Farbane_Mid05_BanditEncampment_Territory", "Nicholaus-Keely road" }, { "Farbane_Mid07_Territory", "Farbane east" }, { "Farbane_Mid09_Territory", "Copper Mine north" }, { "Farbane_Mid10_Territory", "Farbane west" }, { "Farbane_Mid11_Quarry_Territory", "Copper Mine" }, { "Farbane_Mid12_BanditForge_Territory", "Grayson" }, { "Farbane_Mid13_BanditTailor_Territory", "Keely" }, { "Farbane_Mid14_Territory", "Farbane west" }, { "Farbane_Mid15_Territory", "Farbane middle" }, { "Farbane_Mid16_Territory", "Farbane east" }, { "Farbane_Mid17_LumberCamp_Territory", "Rufus" }, { "Farbane_Mid18_Waypoint_Territory", "near Grayson waygate" }, { "Farbane_Snow_TransitionGroup01_Chunk01_Territory", "Farbane-Snow road" }, { "Farbane_Snow_TransitionGroup01_Chunk02_Territory", "Terrorclaw Cave" }, { "Farbane_Snow_TransitionGroup01_Chunk03_Territory", "Snow waygate" }, { "Farbane_Snow_TransitionGroup01_Chunk04_Territory", "Snow northeast" }, { "FarbaneDunley_BridgeGroup01_Chunk01_Territory", "Farbane-Dunley east bridge" }, { "FarbaneDunley_BridgeGroup01_Chunk02_Territory", "Dunley southeast" }, { "FarbaneDunley_BridgeGroup02_Chunk01_Territory", "Farbane-Dunley west bridge" }, { "FarbaneDunley_BridgeGroup02_Chunk02_Territory", "Dunley southwest" }, { "FarbaneSilver_Group_Bridge01_Territory", "Polora waygate" }, { "FarbaneSilver_Group_Bridge02", "SL south" }, { "Gloomrot_Corner01", "Bottom Right Gloom" }, { "Gloomrot_Corner02", "Gloom northeast corner" }, { "Gloomrot_Corner03", "Gloom west waygate" }, { "Gloomrot_Corner04", "Gloom northwest corner" }, { "Gloomrot_Edge01_DraculasRuin", "Styx" }, { "Gloomrot_Edge02_DraculasRuin", "Gloom south waygate" }, { "Gloomrot_Edge03", "Gloom northeast" }, { "Gloomrot_Edge04", "Ziva north" }, { "Gloomrot_Edge05", "Voltatia" }, { "Gloomrot_Edge06", "Adam east" }, { "Gloomrot_Edge07", "Adam" }, { "Gloomrot_Edge08", "Domina south" }, { "Gloomrot_Edge09", "Gloom west waygate" }, { "Gloomrot_Edge10", "Gloom Merchant" }, { "Gloomrot_Edge11", "Gloom northwest corner" }, { "Gloomrot_Mid01", "Adam" }, { "Gloomrot_Mid02", "Sulphur Mine east" }, { "Gloomrot_Mid03", "Gloom Sulphur Mine" }, { "Gloomrot_Mid04", "Domina-Angram area" }, { "Gloomrot_Mid05", "Henry south" }, { "Gloomrot_Mid06", "Henry" }, { "Gloomrot_Mid07", "Henry east" }, { "Gloomrot_Mid08", "Gloom north waygate" }, { "Gloomrot_Mid09", "Ziva" }, { "GloomrotCursed_BridgeGroup01_Chunk01", "Gloom-CF road" }, { "Noctem_Corner01", "Rift #7 east" }, { "Noctem_Corner02", "Small Garden" }, { "Noctem_Corner03", "Rift #1" }, { "Noctem_Corner04", "Dracula's Garden" }, { "Noctem_Edge01", "Rift #7" }, { "Noctem_Edge02", "Mortium South" }, { "Noctem_Edge03", "Dracula's Garden" }, { "Noctem_Edge04", "Rift #4" }, { "Noctem_Edge05", "Mortium top left" }, { "Noctem_Edge06", "Rift #6" }, { "Noctem_Edge07_boss", "Dracula's Throne Room" }, { "Noctem_Edge07_bossDead", "Dracula's Red Portal Room" }, { "Noctem_Edge07_ruined", "Shadow Realm Portal Room" }, { "Noctem_Mid01", "Rift #5" }, { "Noctem_Mid02", "Mortium middle" }, { "Noctem_Mid03", "Rift #2" }, { "Noctem_Mid04", "Rift #3" }, { "Noctem_Mid05", "Mortium top right around Rift #6" }, { "Silver_Builder_Corner01_Territory", "Mairwyn south" }, { "Silver_Builder_Corner02", "SL-Gloom road" }, { "Silver_Builder_Corner03_Territory", "SL southwest corner" }, { "Silver_Builder_Corner04_Territory", "City north plot" }, { "Silver_Builder_Mountain_Edge01_Territory", "SL waygate north" }, { "Silver_City01", "City Docks" }, { "Silver_City02", "City south" }, { "Silver_City03", "City north/east" }, { "Silver_City04_Territory", "City northwest" }, { "Silver_Edge01_Silvermine", "Silver Mine" }, { "Silver_Edge01_SilverMine", "Silver Mine" }, { "Silver_Edge02", "Mairwyn" }, { "Silver_Edge03", "Solarus" }, { "Silver_Mid01", "Morian" }, { "Silver_Mid02", "Baron-Solarus area" }, { "Silver_Mid03", "SL waygate" }, { "Snow_WildlingGroup01_Edge01", "Rift #3 north" }, { "Start_Vault", "The Starting Area" }, { "Strongblade_Corner02", "Oak west of Stavros" }, { "Strongblade_Corner03", "Oak Beach" }, { "Strongblade_Corner04", "Dantos" }, { "Strongblade_Corner05", "Megara" }, { "Strongblade_Edge01", "Oak south" }, { "Strongblade_Edge02", "Oak southwest corner" }, { "Strongblade_Edge03", "Oak east" }, { "Strongblade_Edge04", "Oak east waygate" }, { "Strongblade_InCorner01", "Oak west waygate" }, { "Strongblade_InCorner02", "Stavros" }, { "Strongblade_Mid01", "Lucile" }, { "Strongblade_Mid02", "Dantos south" }, { "Strongblade_SilverGloomTransition01", "Jakira" }, { "Strongblade_SilverTransition01", "SL-Oak road" }, { "Strongblande_SilverGloomTransition01", "Jakira" }, { "Wild_Group_StartGraveyard03", "The Graveyard" }, { "Wild_Group_StartGraveyard03_Copy", "The Graveyard" }, { "Wild_Group_StartGraveyard04_Copy", "The Graveyard" } }; public static Dictionary CHATWHEEL = new Dictionary(); public static Dictionary PLAYER_SETTINGS = new Dictionary(); public static void InitConfig() { CHATWHEEL.Clear(); PLAYER_SETTINGS.Clear(); string json; if (File.Exists(CHUNKMAP_PATH)) { json = File.ReadAllText(CHUNKMAP_PATH); Dictionary dictionary = JsonSerializer.Deserialize>(json); foreach (KeyValuePair item in dictionary) { CHUNKMAP[item.Key] = item.Value; } } else { SaveChunkMap(); } if (File.Exists(CHATWHEEL_PATH)) { json = File.ReadAllText(CHATWHEEL_PATH); Dictionary dictionary = JsonSerializer.Deserialize>(json); foreach (KeyValuePair item2 in dictionary) { string[] array = item2.Value.Split(',', 2); CHATWHEEL[item2.Key] = new ChatWheelMessage { scope = array[0], message = array[1] }; } } else { SaveChatWheel(); } if (!File.Exists(PLAYER_SETTINGS_PATH)) { return; } json = File.ReadAllText(PLAYER_SETTINGS_PATH); Dictionary dictionary2 = JsonSerializer.Deserialize>(json); foreach (KeyValuePair item3 in dictionary2) { PLAYER_SETTINGS[item3.Key] = item3.Value; } } public static void ReloadChunkMap() { if (!File.Exists(CHUNKMAP_PATH)) { return; } string json = File.ReadAllText(CHUNKMAP_PATH); Dictionary dictionary = JsonSerializer.Deserialize>(json); foreach (KeyValuePair item in dictionary) { CHUNKMAP[item.Key] = item.Value; } } public static void SaveChatWheel() { Dictionary dictionary = new Dictionary(); foreach (KeyValuePair item in CHATWHEEL) { dictionary[item.Key] = item.Value.scope + "," + item.Value.message; } WriteConfig(CHATWHEEL_PATH, dictionary); } public static void WriteConfig(string path, Dictionary dict) { if (!Directory.Exists(CONFIG_PATH)) { Directory.CreateDirectory(CONFIG_PATH); } string contents = JsonSerializer.Serialize(dict, new JsonSerializerOptions { WriteIndented = true }); File.WriteAllText(path, contents); } public static void WriteConfig(string path, Dictionary dict) { if (!Directory.Exists(CONFIG_PATH)) { Directory.CreateDirectory(CONFIG_PATH); } string contents = JsonSerializer.Serialize(dict, new JsonSerializerOptions { WriteIndented = true }); File.WriteAllText(path, contents); } public static void SaveChunkMap() { WriteConfig(CHUNKMAP_PATH, CHUNKMAP); } public static void UpdateChunkMap(string chunk, string name) { CHUNKMAP[chunk] = name; SaveChunkMap(); } public static string GetChunkCommonName(string chunk) { return CHUNKMAP.ContainsKey(chunk) ? CHUNKMAP[chunk] : chunk.Replace("_", " "); } public static void SavePlayerSettings() { WriteConfig(PLAYER_SETTINGS_PATH, PLAYER_SETTINGS); } public static void DisableChatWheel(string platformId) { PLAYER_SETTINGS[platformId] = false; SavePlayerSettings(); } public static void EnableChatWheel(string platformId) { PLAYER_SETTINGS[platformId] = true; SavePlayerSettings(); } public static bool IsChatWheelEnabled(string platformId) { return PLAYER_SETTINGS.GetValueOrDefault(platformId, defaultValue: true); } } } namespace ChatWheel.Commands { [CommandGroup("chatwheel", "cw")] internal class ChatWheelCommands { public static Dictionary TO_BIND = new Dictionary(); public static List TO_UNBIND = new List(); [Command("bind", "b", null, "Binds a chat message on the emote wheel", null, false)] public static void BindCommand(ChatCommandContext ctx, string scope, string message) { //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) scope = scope.ToLower(); if (scope == "local" || scope == "l") { scope = "local"; } else { if (!(scope == "clan") && !(scope == "team") && !(scope == "c")) { ctx.Reply("Invalid message scope. Please choose between local or clan."); return; } scope = "clan"; } string key = ctx.Event.User.PlatformId.ToString(); ChatWheelMessage value = new ChatWheelMessage { message = message, scope = scope }; TO_BIND[key] = value; ctx.Reply("ChatWheel: Now choose the emote to bind it to (Hold ALT)."); } [Command("unbind", "ub", null, "Unbinds a chat message on the emote wheel", null, false)] public static void UnbindCommand(ChatCommandContext ctx) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) string item = ctx.Event.User.PlatformId.ToString(); TO_UNBIND.Add(item); ctx.Reply("ChatWheel: Now choose the emote you want to unbind."); } [Command("list", "l", null, "Lists all bound messages", null, false)] public static void ListCommand(ChatCommandContext ctx) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) string text = ctx.Event.User.PlatformId.ToString(); bool flag = false; PrefabGUID prefabGuid = default(PrefabGUID); foreach (KeyValuePair item in Database.CHATWHEEL) { if (item.Key.StartsWith(text)) { flag = true; ((PrefabGUID)(ref prefabGuid))..ctor(int.Parse(item.Key.Split("|")[1])); string value = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(item.Value.scope.ToLower()); ctx.Reply($"Emote {Core.ChatWheelService.GetEmoteName(prefabGuid)} [{value}] {item.Value.message}"); } } if (!Database.IsChatWheelEnabled(text) && flag) { ctx.Reply("Note: ChatWheel is disabled! Enable it by doing .cw enable"); } if (!flag) { ctx.Reply("No chat is bound to the wheel."); } } [Command("clear", null, null, "Removes all bound messages", null, false)] public static void ClearCommand(ChatCommandContext ctx) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) string value = ctx.Event.User.PlatformId.ToString(); int num = 0; foreach (KeyValuePair item in Database.CHATWHEEL) { if (item.Key.StartsWith(value)) { num++; Database.CHATWHEEL.Remove(item.Key); } } if (num > 0) { Database.SaveChatWheel(); ctx.Reply($"Cleared {num} message(s)."); } else { ctx.Reply("Nothing to clear."); } } [Command("enable", null, null, "Enables chatwheel", null, false)] public static void EnableCommand(ChatCommandContext ctx) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) string platformId = ctx.Event.User.PlatformId.ToString(); Database.EnableChatWheel(platformId); ctx.Reply("ChatWheel enabled."); } [Command("disable", null, null, "Disables chatwheel", null, false)] public static void DisableCommand(ChatCommandContext ctx) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) string platformId = ctx.Event.User.PlatformId.ToString(); Database.DisableChatWheel(platformId); ctx.Reply("ChatWheel disabled."); } [Command("reload", "r", null, "Reload the chunk map if file was manually updated", null, true)] public static void ReloadChunkMapCommand(ChatCommandContext ctx) { Database.ReloadChunkMap(); ctx.Reply("Reloaded."); } [Command("renamechunk", "rc", null, "Updates the chunk map", null, true)] public static void UpdateChunkMapCommand(ChatCommandContext ctx, string name) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //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_0025: 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_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Expected O, but got Unknown //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_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_0068: 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_0077: 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_0082: 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_008a: Unknown result type (might be due to invalid IL or missing references) //IL_009c: 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) CurrentMapZone val = ctx.Event.SenderUserEntity.Read(); string text = ((object)(TerrainChunk)(ref val.TerrainChunk)).ToString(); EntityManager entityManager = Core.EntityManager; EntityQueryDesc[] array = new EntityQueryDesc[1]; EntityQueryDesc val2 = new EntityQueryDesc(); val2.All = Il2CppStructArray.op_Implicit((ComponentType[])(object)new ComponentType[1] { ComponentType.ReadOnly() }); array[0] = val2; EntityQuery val3 = ((EntityManager)(ref entityManager)).CreateEntityQuery((EntityQueryDesc[])(object)array); NativeArray val4 = ((EntityQuery)(ref val3)).ToEntityArray(AllocatorHandle.op_Implicit((Allocator)2)); try { Enumerator enumerator = val4.GetEnumerator(); while (enumerator.MoveNext()) { Entity current = enumerator.Current; if (current.TryRead(out TerrainChunkMetadata componentData) && ((TerrainChunk)(ref componentData.Coordinate)).Equals(val.TerrainChunk)) { text = ((object)(FixedString128Bytes)(ref componentData.ChunkName)).ToString(); break; } } } finally { val4.Dispose(); } Database.UpdateChunkMap(text, name); ctx.Reply($"Updated name for \"{text}\" to \"{name}\""); } } }