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 ResourceStashWithdrawal v1.3.0
VMods.ResourceStashWithdrawal.dll
Decompiled a year agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Threading.Tasks; using BepInEx; using BepInEx.Configuration; using BepInEx.Core.Logging.Interpolation; using BepInEx.Logging; using BepInEx.Unity.IL2CPP; using BepInEx.Unity.IL2CPP.Utils; using Bloodstone.API; using HarmonyLib; using Il2CppInterop.Runtime; using Il2CppInterop.Runtime.InteropTypes.Arrays; using Il2CppSystem; using Il2CppSystem.Collections.Generic; using Microsoft.CodeAnalysis; using ProjectM; using ProjectM.CastleBuilding; using ProjectM.Network; using ProjectM.Scripting; using ProjectM.Shared; using ProjectM.UI; using StunShared.UI; using Stunlock.Core; using Stunlock.Localization; using TMPro; using Unity.Collections; using Unity.Collections.LowLevel.Unsafe; using Unity.Entities; using UnityEngine; using UnityEngine.EventSystems; using VMods.Shared; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")] [assembly: AssemblyCompany("VMods.ResourceStashWithdrawal")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyDescription("Allows a player to withdraw required resources from their stash when clicking a recipe at a work or refinement station")] [assembly: AssemblyFileVersion("1.3.0.0")] [assembly: AssemblyInformationalVersion("1.3.0+15ef3da5b4c8389e967e8ee73634b79c7fd66d91")] [assembly: AssemblyProduct("VMods.ResourceStashWithdrawal")] [assembly: AssemblyTitle("VMods.ResourceStashWithdrawal")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.3.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 VMods.Shared { public static class Utils { private struct FakeNull { public int value; public bool has_value; } private static ComponentType[] _containerComponents; public static World CurrentWorld => VWorld.Game; public static ManualLogSource Logger { get; private set; } public static string PluginName { get; private set; } private static ComponentType[] ContainerComponents { get { //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_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_003b: 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) if (_containerComponents == null) { _containerComponents = (ComponentType[])(object)new ComponentType[4] { ComponentType.ReadOnly(Il2CppType.Of<Team>()), ComponentType.ReadOnly(Il2CppType.Of<CastleHeartConnection>()), ComponentType.ReadOnly(Il2CppType.Of<InventoryBuffer>()), ComponentType.ReadOnly(Il2CppType.Of<NameableInteractable>()) }; } return _containerComponents; } } public static void Initialize(ManualLogSource logger, string pluginName) { Logger = logger; PluginName = pluginName; } public static void Deinitialize() { Logger = null; } public static NativeArray<Entity> GetStashEntities(EntityManager entityManager) { //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_0010: Unknown result type (might be due to invalid IL or missing references) EntityQuery val = ((EntityManager)(ref entityManager)).CreateEntityQuery(ContainerComponents); return ((EntityQuery)(ref val)).ToEntityArray((Allocator)2); } public static IEnumerable<Entity> GetAlliedStashes(EntityManager entityManager, Entity character) { //IL_0008: 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_000f: 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) ComponentDataFromEntity<Team> getTeam = ((EntityManager)(ref entityManager)).GetComponentDataFromEntity<Team>(false); Enumerator<Entity> enumerator = GetStashEntities(entityManager).GetEnumerator(); while (enumerator.MoveNext()) { Entity current = enumerator.Current; if (((EntityManager)(ref entityManager)).HasComponent<Team>(current) && ((EntityManager)(ref entityManager)).HasComponent<Team>(character)) { Team val = getTeam[current]; Team val2 = getTeam[character]; if (Team.IsAllies(val, val2)) { yield return current; } } } } public static int GetStashItemCount(EntityManager entityManager, Entity character, PrefabGUID itemGUID, StoredBlood? storedBlood = null) { //IL_0004: Unknown result type (might be due to invalid IL or missing references) //IL_0005: 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_001c: 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_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_0038: 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_0096: 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_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_0074: 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_008c: Unknown result type (might be due to invalid IL or missing references) int num = 0; int num2 = 0; DynamicBuffer<InventoryBuffer> val = default(DynamicBuffer<InventoryBuffer>); StoredBlood val3 = default(StoredBlood); foreach (Entity alliedStash in GetAlliedStashes(entityManager, character)) { ((EntityManager)(ref entityManager)).TryGetBuffer<InventoryBuffer>(alliedStash, ref val); for (int i = 0; i < val.Length; i++) { InventoryBuffer val2 = val[i]; if (!(val2.ItemType == itemGUID)) { continue; } if (storedBlood.HasValue) { ((EntityManager)(ref entityManager)).TryGetComponentData<StoredBlood>(val2.ItemEntity._Entity, ref val3); if (storedBlood.Value.BloodType != val3.BloodType || storedBlood.Value.BloodQuality != val3.BloodQuality) { continue; } } num += val2.Amount; } num2++; } if (num2 != 0) { return num; } return -1; } public static string GetItemName(PrefabGUID itemGUID, GameDataSystem gameDataSystem = null, EntityManager? entityManager = null, PrefabLookupMap? prefabLookupMap = null) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: 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_001a: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: 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_002e: 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_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_0061: 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_0069: 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_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_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_0086: 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) if (itemGUID == PrefabGUID.Empty) { return string.Empty; } EntityManager valueOrDefault = entityManager.GetValueOrDefault(); if (!entityManager.HasValue) { valueOrDefault = CurrentWorld.EntityManager; entityManager = valueOrDefault; } if (gameDataSystem == null) { gameDataSystem = CurrentWorld.GetExistingSystem<GameDataSystem>(); } PrefabLookupMap valueOrDefault2 = prefabLookupMap.GetValueOrDefault(); if (!prefabLookupMap.HasValue) { valueOrDefault2 = ((PrefabCollectionSystem_Base)CurrentWorld.GetExistingSystem<PrefabCollectionSystem>()).PrefabLookupMap; prefabLookupMap = valueOrDefault2; } try { AssetGuid val = GameplayHelper.TryGetItemName(gameDataSystem, entityManager.Value, prefabLookupMap.Value, itemGUID); if (Localization.HasKey(val)) { return Localization.Get(val, true); } } catch (Exception) { } return $"[{itemGUID}]"; } public static void SendMessage(Entity userEntity, string message, ServerChatMessageType messageType) { //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_0025: 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_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_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0056: 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_0067: 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_0070: 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_0085: 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_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_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_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) if (VWorld.IsServer) { EntityManager entityManager = VWorld.Server.EntityManager; User val = default(User); ((EntityManager)(ref entityManager)).TryGetComponentData<User>(userEntity, ref val); int index = val.Index; NetworkId fromUser = default(NetworkId); ((EntityManager)(ref entityManager)).TryGetComponentData<NetworkId>(userEntity, ref fromUser); Entity val2 = ((EntityManager)(ref entityManager)).CreateEntity((ComponentType[])(object)new ComponentType[3] { ComponentType.ReadOnly<NetworkEventType>(), ComponentType.ReadOnly<SendEventToUser>(), ComponentType.ReadOnly<ChatMessageServerEvent>() }); ChatMessageServerEvent val3 = default(ChatMessageServerEvent); val3.MessageText = FixedString512.op_Implicit(message); val3.MessageType = messageType; val3.FromUser = fromUser; val3.TimeUTC = DateTime.Now.ToFileTimeUtc(); ChatMessageServerEvent val4 = val3; val2.WithComponentDataVmodAOT<SendEventToUser>((VModsVExtensionsOverride.ActionRefVmod<SendEventToUser>)delegate(ref SendEventToUser us) { us.UserIndex = index; }); val2.WithComponentDataVmodAOT<NetworkEventType>((VModsVExtensionsOverride.ActionRefVmod<NetworkEventType>)delegate(ref NetworkEventType ev) { ev.EventId = NetworkEvents.EventId_ChatMessageServerEvent; ev.IsAdminEvent = false; ev.IsDebugEvent = false; }); ((EntityManager)(ref entityManager)).SetComponentData<ChatMessageServerEvent>(val2, val4); } } public static bool TryGetPrefabGUIDForItemName(GameDataSystem gameDataSystem, LocalizationKey itemName, out PrefabGUID prefabGUID) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return TryGetPrefabGUIDForItemName(gameDataSystem, Localization.Get(itemName, true), out prefabGUID); } public static bool TryGetPrefabGUIDForItemName(GameDataSystem gameDataSystem, string itemName, out PrefabGUID prefabGUID) { //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_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_0018: 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_002c: 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_005d: 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) Enumerator<PrefabGUID, ItemData> enumerator = gameDataSystem.ItemHashLookupMap.GetEnumerator(); while (enumerator.MoveNext()) { KeyValue<PrefabGUID, ItemData> current = enumerator.Current; if (Localization.Get(gameDataSystem.ManagedDataRegistry.GetOrDefault<ManagedItemData>(current.Key, (ManagedItemData)null).Name, false) == itemName) { prefabGUID = current.Key; return true; } } prefabGUID = PrefabGUID.Empty; return false; } public static bool TryGiveItem(EntityManager entityManager, NativeHashMap<PrefabGUID, ItemData>? itemDataMap, Entity recipient, PrefabGUID itemType, int amount, out int remainingitems, bool dropRemainder = false) { //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_0029: 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_0034: 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_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_004a: 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_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_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_0062: 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_0020: 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) NativeHashMap<PrefabGUID, ItemData> valueOrDefault = itemDataMap.GetValueOrDefault(); if (!itemDataMap.HasValue) { valueOrDefault = CurrentWorld.GetExistingSystem<GameDataSystem>().ItemHashLookupMap; itemDataMap = valueOrDefault; } AddItemResponse val = InventoryUtilitiesServer.TryAddItem(AddItemSettings.Create(entityManager, itemDataMap.Value, false, default(Entity), default(Nullable_Unboxed<int>), false, false, dropRemainder, default(Nullable_Unboxed<int>)), recipient, itemType, amount); remainingitems = val.RemainingAmount; return ((AddItemResponse)(ref val)).Success; } public static void ApplyBuff(Entity user, Entity character, PrefabGUID buffGUID) { //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_000b: 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_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_0019: Unknown result type (might be due to invalid IL or missing references) FromCharacter fromCharacter = default(FromCharacter); fromCharacter.User = user; fromCharacter.Character = character; ApplyBuff(fromCharacter, buffGUID); } public static void ApplyBuff(FromCharacter fromCharacter, PrefabGUID buffGUID) { //IL_000c: 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_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_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_001d: Unknown result type (might be due to invalid IL or missing references) DebugEventsSystem existingSystem = VWorld.Server.GetExistingSystem<DebugEventsSystem>(); ApplyBuffDebugEvent val = new ApplyBuffDebugEvent { BuffPrefabGUID = buffGUID }; existingSystem.ApplyBuff(fromCharacter, val); } public static void RemoveBuff(FromCharacter fromCharacter, PrefabGUID buffGUID) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //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) RemoveBuff(fromCharacter.Character, buffGUID); } public static void RemoveBuff(Entity charEntity, PrefabGUID buffGUID, EntityManager? entityManager = null) { //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_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_002c: 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_001e: 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_003b: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_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_004f: Unknown result type (might be due to invalid IL or missing references) EntityManager value = entityManager.GetValueOrDefault(); if (!entityManager.HasValue) { value = CurrentWorld.EntityManager; entityManager = value; } if (BuffUtility.HasBuff(entityManager.Value, charEntity, buffGUID)) { Entity val = default(Entity); BuffUtility.TryGetBuff(entityManager.Value, charEntity, buffGUID, ref val); value = entityManager.Value; ((EntityManager)(ref value)).AddComponent<DestroyTag>(val); } } public static string GetCharacterName(ulong platformId, EntityManager? entityManager = null) { //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_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_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_0040: 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_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_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0056: 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_001e: 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_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) EntityManager value = entityManager.GetValueOrDefault(); if (!entityManager.HasValue) { value = CurrentWorld.EntityManager; entityManager = value; } value = entityManager.Value; EntityQuery val = ((EntityManager)(ref value)).CreateEntityQuery((ComponentType[])(object)new ComponentType[1] { ComponentType.ReadOnly<User>() }); Enumerator<Entity> enumerator = ((EntityQuery)(ref val)).ToEntityArray((Allocator)2).GetEnumerator(); User val2 = default(User); while (enumerator.MoveNext()) { Entity current = enumerator.Current; value = entityManager.Value; ((EntityManager)(ref value)).TryGetComponentData<User>(current, ref val2); if (val2.PlatformId == platformId) { return ((object)(FixedString64)(ref val2.CharacterName)).ToString(); } } return null; } public static AdminLevel GetAdminLevel(Entity userEntity, EntityManager? entityManager = null) { //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_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_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_001e: 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_0039: Unknown result type (might be due to invalid IL or missing references) EntityManager value = entityManager.GetValueOrDefault(); if (!entityManager.HasValue) { value = CurrentWorld.EntityManager; entityManager = value; } value = entityManager.Value; AdminUser val = default(AdminUser); if (((EntityManager)(ref value)).TryGetComponentData<AdminUser>(userEntity, ref val)) { return val.Level; } return (AdminLevel)0; } public static void LogAllComponentTypes(Entity entity, EntityManager? entityManager = null) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: 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_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Expected O, but got Unknown //IL_0024: 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_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005c: 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_0066: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0074: 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_0085: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Expected O, but got Unknown //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: Expected O, but got Unknown //IL_009a: Unknown result type (might be due to invalid IL or missing references) if (entity == Entity.Null) { return; } EntityManager value = entityManager.GetValueOrDefault(); if (!entityManager.HasValue) { value = CurrentWorld.EntityManager; entityManager = value; } ManualLogSource logger = Logger; bool flag = default(bool); BepInExMessageLogInterpolatedStringHandler val = new BepInExMessageLogInterpolatedStringHandler(3, 0, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val).AppendLiteral("---"); } logger.LogMessage(val); value = entityManager.Value; Enumerator<ComponentType> enumerator = ((EntityManager)(ref value)).GetComponentTypes(entity, (Allocator)2).GetEnumerator(); while (enumerator.MoveNext()) { ComponentType current = enumerator.Current; ManualLogSource logger2 = Logger; val = new BepInExMessageLogInterpolatedStringHandler(30, 3, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val).AppendLiteral("Component Type: "); ((BepInExLogInterpolatedStringHandler)val).AppendFormatted<ComponentType>(current); ((BepInExLogInterpolatedStringHandler)val).AppendLiteral(" (Shared? "); ((BepInExLogInterpolatedStringHandler)val).AppendFormatted<bool>(((ComponentType)(ref current)).IsSharedComponent); ((BepInExLogInterpolatedStringHandler)val).AppendLiteral(") | "); ((BepInExLogInterpolatedStringHandler)val).AppendFormatted<string>(((ComponentType)(ref current)).GetManagedType().FullName); } logger2.LogMessage(val); } ManualLogSource logger3 = Logger; val = new BepInExMessageLogInterpolatedStringHandler(3, 0, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val).AppendLiteral("---"); } logger3.LogMessage(val); } public static void LogAllComponentTypes(EntityQuery entityQuery) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Expected O, but got Unknown //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_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Expected O, but got Unknown //IL_0058: 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_0087: Expected O, but got Unknown Il2CppStructArray<ComponentType> queryTypes = ((EntityQuery)(ref entityQuery)).GetQueryTypes(); ManualLogSource logger = Logger; bool flag = default(bool); BepInExMessageLogInterpolatedStringHandler val = new BepInExMessageLogInterpolatedStringHandler(3, 0, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val).AppendLiteral("---"); } logger.LogMessage(val); foreach (ComponentType item in (Il2CppArrayBase<ComponentType>)(object)queryTypes) { ManualLogSource logger2 = Logger; val = new BepInExMessageLogInterpolatedStringHandler(22, 1, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val).AppendLiteral("Query Component Type: "); ((BepInExLogInterpolatedStringHandler)val).AppendFormatted<ComponentType>(item); } logger2.LogMessage(val); } ManualLogSource logger3 = Logger; val = new BepInExMessageLogInterpolatedStringHandler(3, 0, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val).AppendLiteral("---"); } logger3.LogMessage(val); } } public static class VModsVExtensionsOverride { public delegate void ActionRefVmod<T>(ref T item); public static void WithComponentDataVmod<T>(this Entity entity, ActionRefVmod<T> action) where T : struct { //IL_0005: 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_000d: 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_002b: Unknown result type (might be due to invalid IL or missing references) EntityManager entityManager = VWorld.Game.EntityManager; T item = default(T); ((EntityManager)(ref entityManager)).TryGetComponentData<T>(entity, ref item); action(ref item); entityManager = VWorld.Game.EntityManager; ((EntityManager)(ref entityManager)).SetComponentData<T>(entity, item); } public static void WithComponentDataVmodAOT<T>(this Entity entity, ActionRefVmod<T> action) where T : unmanaged { //IL_0005: 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_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_0026: Unknown result type (might be due to invalid IL or missing references) T item = VWorld.Game.EntityManager.GetComponentDataAOT<T>(entity); action(ref item); EntityManager entityManager = VWorld.Game.EntityManager; ((EntityManager)(ref entityManager)).SetComponentData<T>(entity, item); } private static Type GetType<T>() { return Il2CppType.Of<T>(); } public unsafe static T GetComponentDataAOT<T>(this EntityManager entityManager, Entity entity) where T : unmanaged { //IL_000d: 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; } } } namespace VMods.ResourceStashWithdrawal { public static class ResourceStashWithdrawalConfig { public static ConfigEntry<bool> ResourceStashWithdrawalEnabled { get; private set; } public static void Initialize(ConfigFile config) { ResourceStashWithdrawalEnabled = config.Bind<bool>("Server", "ResourceStashWithdrawalEnabled", true, "Enabled/disable the resource stash withdrawal system."); } } [HarmonyPatch] public class UIClickHook { private static DateTime _lastResourceRequest = DateTime.UtcNow; public static void Reset() { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) _lastResourceRequest = DateTime.UtcNow; } [HarmonyPatch(typeof(GridSelectionEntry), "OnPointerClick")] [HarmonyPostfix] public static void OnPointerClick(GridSelectionEntry __instance, PointerEventData eventData) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Invalid comparison between Unknown and I4 //IL_0017: 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_0020: 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_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_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_008f: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: 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) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_0106: 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_0112: Unknown result type (might be due to invalid IL or missing references) //IL_0185: Unknown result type (might be due to invalid IL or missing references) //IL_018a: Unknown result type (might be due to invalid IL or missing references) //IL_018e: Unknown result type (might be due to invalid IL or missing references) //IL_0193: Unknown result type (might be due to invalid IL or missing references) //IL_0288: Unknown result type (might be due to invalid IL or missing references) //IL_028d: 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_01ee: Unknown result type (might be due to invalid IL or missing references) //IL_01f3: Unknown result type (might be due to invalid IL or missing references) //IL_01f7: Unknown result type (might be due to invalid IL or missing references) //IL_01fc: Unknown result type (might be due to invalid IL or missing references) //IL_05c0: Unknown result type (might be due to invalid IL or missing references) //IL_05c5: 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_0384: Unknown result type (might be due to invalid IL or missing references) //IL_0389: Unknown result type (might be due to invalid IL or missing references) //IL_038d: Unknown result type (might be due to invalid IL or missing references) //IL_0392: Unknown result type (might be due to invalid IL or missing references) //IL_0199: Unknown result type (might be due to invalid IL or missing references) //IL_019e: Unknown result type (might be due to invalid IL or missing references) //IL_01b0: Unknown result type (might be due to invalid IL or missing references) //IL_05e0: Unknown result type (might be due to invalid IL or missing references) //IL_05e5: Unknown result type (might be due to invalid IL or missing references) //IL_05eb: Unknown result type (might be due to invalid IL or missing references) //IL_05f0: Unknown result type (might be due to invalid IL or missing references) //IL_05f5: Unknown result type (might be due to invalid IL or missing references) //IL_05fe: Unknown result type (might be due to invalid IL or missing references) //IL_0600: Unknown result type (might be due to invalid IL or missing references) //IL_046e: Unknown result type (might be due to invalid IL or missing references) //IL_0473: Unknown result type (might be due to invalid IL or missing references) //IL_0479: Unknown result type (might be due to invalid IL or missing references) //IL_029c: Unknown result type (might be due to invalid IL or missing references) //IL_02a1: Unknown result type (might be due to invalid IL or missing references) //IL_02a3: Unknown result type (might be due to invalid IL or missing references) //IL_02a5: Unknown result type (might be due to invalid IL or missing references) //IL_02ac: Unknown result type (might be due to invalid IL or missing references) //IL_02e4: Unknown result type (might be due to invalid IL or missing references) //IL_02e9: Unknown result type (might be due to invalid IL or missing references) //IL_02ed: Unknown result type (might be due to invalid IL or missing references) //IL_02f2: Unknown result type (might be due to invalid IL or missing references) //IL_0202: Unknown result type (might be due to invalid IL or missing references) //IL_0207: Unknown result type (might be due to invalid IL or missing references) //IL_0219: Unknown result type (might be due to invalid IL or missing references) //IL_0616: Unknown result type (might be due to invalid IL or missing references) //IL_061b: Unknown result type (might be due to invalid IL or missing references) //IL_048e: Unknown result type (might be due to invalid IL or missing references) //IL_0493: Unknown result type (might be due to invalid IL or missing references) //IL_0499: Unknown result type (might be due to invalid IL or missing references) //IL_049e: Unknown result type (might be due to invalid IL or missing references) //IL_04a3: 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_0398: Unknown result type (might be due to invalid IL or missing references) //IL_039d: Unknown result type (might be due to invalid IL or missing references) //IL_039f: Unknown result type (might be due to invalid IL or missing references) //IL_03a1: Unknown result type (might be due to invalid IL or missing references) //IL_03a8: Unknown result type (might be due to invalid IL or missing references) //IL_02c8: 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_04c6: Unknown result type (might be due to invalid IL or missing references) //IL_03c4: Unknown result type (might be due to invalid IL or missing references) //IL_02f8: Unknown result type (might be due to invalid IL or missing references) //IL_02fd: Unknown result type (might be due to invalid IL or missing references) //IL_02ff: Unknown result type (might be due to invalid IL or missing references) //IL_0301: Unknown result type (might be due to invalid IL or missing references) //IL_0308: Unknown result type (might be due to invalid IL or missing references) //IL_0621: Unknown result type (might be due to invalid IL or missing references) //IL_0626: Unknown result type (might be due to invalid IL or missing references) //IL_0635: Unknown result type (might be due to invalid IL or missing references) //IL_063a: Unknown result type (might be due to invalid IL or missing references) //IL_0314: Unknown result type (might be due to invalid IL or missing references) //IL_0327: Unknown result type (might be due to invalid IL or missing references) //IL_0329: Unknown result type (might be due to invalid IL or missing references) //IL_064b: Unknown result type (might be due to invalid IL or missing references) //IL_04cf: Unknown result type (might be due to invalid IL or missing references) //IL_04d4: Unknown result type (might be due to invalid IL or missing references) //IL_04e7: Unknown result type (might be due to invalid IL or missing references) //IL_04ec: Unknown result type (might be due to invalid IL or missing references) //IL_057d: Unknown result type (might be due to invalid IL or missing references) //IL_051b: Unknown result type (might be due to invalid IL or missing references) //IL_0520: Unknown result type (might be due to invalid IL or missing references) //IL_054f: Unknown result type (might be due to invalid IL or missing references) //IL_0555: Unknown result type (might be due to invalid IL or missing references) //IL_055a: Unknown result type (might be due to invalid IL or missing references) //IL_055e: Unknown result type (might be due to invalid IL or missing references) //IL_0564: Unknown result type (might be due to invalid IL or missing references) UITooltipHook.OnPointerEnter(__instance, eventData); if (!VWorld.IsClient || (int)eventData.button != 2) { return; } DateTime utcNow = DateTime.UtcNow; TimeSpan val = ((DateTime)(ref utcNow)).Subtract(_lastResourceRequest); if (((TimeSpan)(ref val)).TotalSeconds <= 0.20000000298023224) { return; } _lastResourceRequest = DateTime.UtcNow; bool withdrawFullAmount = Input.GetKey((KeyCode)306) || Input.GetKey((KeyCode)305); World client = VWorld.Client; EntityManager entityManager = client.EntityManager; GameDataSystem gameDataSystem = client.GetExistingSystem<GameDataSystem>(); _ = gameDataSystem.ItemHashLookupMap; PrefabCollectionSystem existingSystem = client.GetExistingSystem<PrefabCollectionSystem>(); PrefabLookupMap prefabLookupMap = ((PrefabCollectionSystem_Base)existingSystem).PrefabLookupMap; Entity userCharEntity = Entity.Null; EntityQuery val2 = ((EntityManager)(ref entityManager)).CreateEntityQuery((ComponentType[])(object)new ComponentType[1] { ComponentType.ReadOnly<User>() }); Enumerator<Entity> enumerator = ((EntityQuery)(ref val2)).ToEntityArray((Allocator)2).GetEnumerator(); User val3 = default(User); while (enumerator.MoveNext()) { Entity current = enumerator.Current; ((EntityManager)(ref entityManager)).TryGetComponentData<User>(current, ref val3); userCharEntity = val3.LocalCharacter._Entity; } RefinementstationRecipeEntry component = ((Component)__instance).GetComponent<RefinementstationRecipeEntry>(); RefinementstationRecipeItem component2 = ((Component)__instance).GetComponent<RefinementstationRecipeItem>(); WorkstationRecipeGridSelectionEntry component3 = ((Component)__instance).GetComponent<WorkstationRecipeGridSelectionEntry>(); BuildMenu_StructureEntry component4 = ((Component)__instance).GetComponent<BuildMenu_StructureEntry>(); if ((Object)(object)component != (Object)null) { RefinementstationSubMenu componentInParent = ((Component)__instance).GetComponentInParent<RefinementstationSubMenu>(); UnitSpawnerstationSubMenu componentInParent2 = ((Component)__instance).GetComponentInParent<UnitSpawnerstationSubMenu>(); if ((Object)(object)componentInParent != (Object)null) { Data val4 = componentInParent.RecipesSelectionGroup.Entries._items[((UIEntry)component).EntryIndex]; Enumerator<RecipeRequirementBuffer> enumerator2 = val4.Requirements.GetEnumerator(); while (enumerator2.MoveNext()) { RecipeRequirementBuffer current2 = enumerator2.Current; SendWithdrawRequest(componentInParent.InputInventorySelectionGroup, componentInParent.OutputInventorySelectionGroup, val4, current2); } } else { if (!((Object)(object)componentInParent2 != (Object)null)) { return; } Data val5 = componentInParent2.RecipesSelectionGroup.Entries._items[((UIEntry)component).EntryIndex]; Enumerator<RecipeRequirementBuffer> enumerator2 = val5.Requirements.GetEnumerator(); while (enumerator2.MoveNext()) { RecipeRequirementBuffer current3 = enumerator2.Current; SendWithdrawRequest(componentInParent2.InputInventorySelectionGroup, componentInParent2.OutputInventorySelectionGroup, val5, current3); } } UITooltipHook.OnPointerEnter(__instance, eventData); } else if ((Object)(object)component2 != (Object)null) { component = ((Component)component2).GetComponentInParent<RefinementstationRecipeEntry>(); RefinementstationSubMenu componentInParent3 = ((Component)__instance).GetComponentInParent<RefinementstationSubMenu>(); UnitSpawnerstationSubMenu componentInParent4 = ((Component)__instance).GetComponentInParent<UnitSpawnerstationSubMenu>(); if ((Object)(object)componentInParent3 != (Object)null) { Data val6 = componentInParent3.RecipesSelectionGroup.Entries._items[((UIEntry)component).EntryIndex]; Enumerator<RecipeRequirementBuffer> enumerator2 = val6.Requirements.GetEnumerator(); while (enumerator2.MoveNext()) { RecipeRequirementBuffer current4 = enumerator2.Current; if (current4.Guid == component2.Guid) { SendWithdrawRequest(componentInParent3.InputInventorySelectionGroup, componentInParent3.OutputInventorySelectionGroup, val6, current4); UITooltipHook.OnPointerEnter(__instance, eventData); return; } } Enumerator<RecipeOutputBuffer> enumerator3 = val6.OutputItems.GetEnumerator(); while (enumerator3.MoveNext()) { RecipeOutputBuffer current5 = enumerator3.Current; if (current5.Guid == component2.Guid) { int amount = current5.Amount; ResourceStashWithdrawalRequest request = default(ResourceStashWithdrawalRequest); request.ItemGUIDHash = current5.Guid.GuidHash; request.Amount = amount; ResourceStashWithDrawalRequester.StartTask(request); UITooltipHook.OnPointerEnter(__instance, eventData); break; } } } else { if (!((Object)(object)componentInParent4 != (Object)null)) { return; } Data val7 = componentInParent4.RecipesSelectionGroup.Entries._items[((UIEntry)component).EntryIndex]; Enumerator<RecipeRequirementBuffer> enumerator2 = val7.Requirements.GetEnumerator(); while (enumerator2.MoveNext()) { RecipeRequirementBuffer current6 = enumerator2.Current; if (current6.Guid == component2.Guid) { SendWithdrawRequest(componentInParent4.InputInventorySelectionGroup, componentInParent4.OutputInventorySelectionGroup, val7, current6); UITooltipHook.OnPointerEnter(__instance, eventData); break; } } } } else if ((Object)(object)component3 != (Object)null) { WorkstationSubMenu componentInParent5 = ((Component)__instance).GetComponentInParent<WorkstationSubMenu>(); if ((Object)(object)componentInParent5 == (Object)null) { return; } float num = 1f; Il2CppArrayBase<Data> items = componentInParent5.BonusesSelectionGroup.Entries._items; int num2 = items.Count - 1; Data val8 = items[num2]; if (val8.Unlocked) { num = 1f - val8.Value / 100f; } Data val9 = componentInParent5.RecipesGridSelectionGroup.Entries._items[((UIEntry)component3).EntryIndex]; if (!gameDataSystem.RecipeHashLookupMap.ContainsKey(val9.EntryId)) { return; } RecipeData val10 = gameDataSystem.RecipeHashLookupMap[val9.EntryId]; DynamicBuffer<RecipeRequirementBuffer> val11 = default(DynamicBuffer<RecipeRequirementBuffer>); if (!((EntityManager)(ref entityManager)).TryGetBuffer<RecipeRequirementBuffer>(val10.Entity, ref val11)) { return; } Enumerator<RecipeRequirementBuffer> enumerator2 = val11.GetEnumerator(); while (enumerator2.MoveNext()) { RecipeRequirementBuffer current7 = enumerator2.Current; int num3 = (int)Math.Ceiling((double)((float)current7.Amount * num)); PrefabGUID guid = current7.Guid; if (!withdrawFullAmount) { foreach (Data item in componentInParent5.ItemOutputGridSelectionGroup.Entries._items) { if (item.EntryId == guid) { num3 -= item.Stacks; } } num3 -= InventoryUtilities.GetItemAmount(entityManager, userCharEntity, guid, default(Nullable_Unboxed<int>)); } if (num3 > 0) { ResourceStashWithdrawalRequest request = default(ResourceStashWithdrawalRequest); request.ItemGUIDHash = guid.GuidHash; request.Amount = num3; ResourceStashWithDrawalRequester.StartTask(request); } } UITooltipHook.OnPointerEnter(__instance, eventData); } else { if (!((Object)(object)component4 != (Object)null) || !gameDataSystem.BlueprintHashLookupMap.ContainsKey(component4.PrefabGuid)) { return; } BlueprintData val12 = gameDataSystem.BlueprintHashLookupMap[component4.PrefabGuid]; DynamicBuffer<BlueprintRequirementBuffer> val13 = default(DynamicBuffer<BlueprintRequirementBuffer>); if (!((EntityManager)(ref entityManager)).TryGetBuffer<BlueprintRequirementBuffer>(val12.Entity, ref val13)) { return; } new List<PrefabGUID>(); Enumerator<BlueprintRequirementBuffer> enumerator5 = val13.GetEnumerator(); while (enumerator5.MoveNext()) { BlueprintRequirementBuffer current9 = enumerator5.Current; int num4 = (int)Math.Ceiling((double)current9.Amount); PrefabGUID prefabGUID = current9.PrefabGUID; if (num4 > 0) { ResourceStashWithdrawalRequest request = default(ResourceStashWithdrawalRequest); request.ItemGUIDHash = prefabGUID.GuidHash; request.Amount = num4; ResourceStashWithDrawalRequester.StartTask(request); } } UITooltipHook.OnPointerEnter(__instance, eventData); } void SendWithdrawRequest(GridSelectionGroup<ItemGridSelectionEntry, Data> inputInventorySelectionGroup, GridSelectionGroup<ItemGridSelectionEntry, Data> outputInventorySelectionGroup, Data recipe, RecipeRequirementBuffer requirement) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0228: Unknown result type (might be due to invalid IL or missing references) //IL_0229: 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_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_0093: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Expected O, but got Unknown //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_012e: Unknown result type (might be due to invalid IL or missing references) //IL_012f: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_01f7: Unknown result type (might be due to invalid IL or missing references) //IL_01fe: Unknown result type (might be due to invalid IL or missing references) //IL_0203: Unknown result type (might be due to invalid IL or missing references) //IL_0204: Unknown result type (might be due to invalid IL or missing references) //IL_020b: Unknown result type (might be due to invalid IL or missing references) //IL_0211: Unknown result type (might be due to invalid IL or missing references) //IL_0148: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Expected O, but got Unknown //IL_0162: Unknown result type (might be due to invalid IL or missing references) //IL_0170: Unknown result type (might be due to invalid IL or missing references) //IL_017c: Unknown result type (might be due to invalid IL or missing references) //IL_019e: Unknown result type (might be due to invalid IL or missing references) //IL_019f: Unknown result type (might be due to invalid IL or missing references) //IL_01ad: Unknown result type (might be due to invalid IL or missing references) //IL_01b9: Unknown result type (might be due to invalid IL or missing references) int num5 = (int)Math.Ceiling((double)((float)requirement.Amount * recipe.ResourceMultiplier)); if (!withdrawFullAmount) { foreach (Data item2 in inputInventorySelectionGroup.Entries._items) { if (item2.EntryId == requirement.Guid) { num5 -= item2.Stacks; } } bool flag = default(bool); foreach (Data item3 in outputInventorySelectionGroup.Entries._items) { ManualLogSource logger = Utils.Logger; BepInExMessageLogInterpolatedStringHandler val14 = new BepInExMessageLogInterpolatedStringHandler(26, 3, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val14).AppendLiteral("Output Station Item: "); ((BepInExLogInterpolatedStringHandler)val14).AppendFormatted<int>(item3.Stacks); ((BepInExLogInterpolatedStringHandler)val14).AppendLiteral("x "); ((BepInExLogInterpolatedStringHandler)val14).AppendFormatted<string>(Utils.GetItemName(item3.EntryId, gameDataSystem, entityManager, prefabLookupMap)); ((BepInExLogInterpolatedStringHandler)val14).AppendLiteral(" ("); ((BepInExLogInterpolatedStringHandler)val14).AppendFormatted<int>(item3.EntryId.GuidHash); ((BepInExLogInterpolatedStringHandler)val14).AppendLiteral(")"); } logger.LogMessage(val14); if (item3.EntryId == requirement.Guid) { ManualLogSource logger2 = Utils.Logger; val14 = new BepInExMessageLogInterpolatedStringHandler(25, 2, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val14).AppendLiteral("Output Station Item: "); ((BepInExLogInterpolatedStringHandler)val14).AppendFormatted<string>(Utils.GetItemName(item3.EntryId, gameDataSystem, entityManager, prefabLookupMap)); ((BepInExLogInterpolatedStringHandler)val14).AppendLiteral(" == "); ((BepInExLogInterpolatedStringHandler)val14).AppendFormatted<string>(Utils.GetItemName(requirement.Guid, gameDataSystem, entityManager, prefabLookupMap)); } logger2.LogMessage(val14); num5 -= item3.Stacks; } } num5 -= InventoryUtilities.GetItemAmount(entityManager, userCharEntity, requirement.Guid, default(Nullable_Unboxed<int>)); } if (num5 > 0) { ResourceStashWithdrawalRequest request2 = default(ResourceStashWithdrawalRequest); request2.ItemGUIDHash = requirement.Guid.GuidHash; request2.Amount = num5; ResourceStashWithDrawalRequester.StartTask(request2); } } } } [HarmonyPatch] public class UITooltipHook { private static readonly Dictionary<int, (DateTime creationTime, int? stashCount, List<int> requiredItemStashCount, List<int> repairItemStashCount)> _tooltipInfo = new Dictionary<int, (DateTime, int?, List<int>, List<int>)>(); [HarmonyPatch(typeof(GridSelectionEntry), "OnPointerEnter")] [HarmonyPostfix] public static void OnPointerEnter(GridSelectionEntry __instance, PointerEventData eventData) { //IL_016d: Unknown result type (might be due to invalid IL or missing references) //IL_0172: Unknown result type (might be due to invalid IL or missing references) //IL_018d: Unknown result type (might be due to invalid IL or missing references) //IL_0193: Unknown result type (might be due to invalid IL or missing references) //IL_0198: Unknown result type (might be due to invalid IL or missing references) //IL_01a8: Unknown result type (might be due to invalid IL or missing references) //IL_01ad: Unknown result type (might be due to invalid IL or missing references) //IL_01b2: Unknown result type (might be due to invalid IL or missing references) //IL_01b7: Unknown result type (might be due to invalid IL or missing references) //IL_01bc: Unknown result type (might be due to invalid IL or missing references) //IL_01c1: Unknown result type (might be due to invalid IL or missing references) //IL_01c5: Unknown result type (might be due to invalid IL or missing references) //IL_01ca: Unknown result type (might be due to invalid IL or missing references) //IL_01d0: Unknown result type (might be due to invalid IL or missing references) //IL_01d5: Unknown result type (might be due to invalid IL or missing references) //IL_01dd: Unknown result type (might be due to invalid IL or missing references) //IL_01e7: Unknown result type (might be due to invalid IL or missing references) //IL_01e9: Unknown result type (might be due to invalid IL or missing references) //IL_01ee: Unknown result type (might be due to invalid IL or missing references) //IL_01f3: Unknown result type (might be due to invalid IL or missing references) //IL_01ff: Unknown result type (might be due to invalid IL or missing references) //IL_0201: Unknown result type (might be due to invalid IL or missing references) //IL_02e6: 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_0286: Unknown result type (might be due to invalid IL or missing references) //IL_028b: Unknown result type (might be due to invalid IL or missing references) //IL_028f: Unknown result type (might be due to invalid IL or missing references) //IL_0294: Unknown result type (might be due to invalid IL or missing references) //IL_031a: Unknown result type (might be due to invalid IL or missing references) //IL_0669: Unknown result type (might be due to invalid IL or missing references) //IL_066f: Unknown result type (might be due to invalid IL or missing references) //IL_0676: Unknown result type (might be due to invalid IL or missing references) //IL_0333: Unknown result type (might be due to invalid IL or missing references) //IL_0338: Unknown result type (might be due to invalid IL or missing references) //IL_029a: 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_02a3: Unknown result type (might be due to invalid IL or missing references) //IL_02a5: Unknown result type (might be due to invalid IL or missing references) //IL_02bc: Unknown result type (might be due to invalid IL or missing references) //IL_02c1: 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_05e4: Unknown result type (might be due to invalid IL or missing references) //IL_05e9: Unknown result type (might be due to invalid IL or missing references) //IL_05ef: Unknown result type (might be due to invalid IL or missing references) //IL_043b: Unknown result type (might be due to invalid IL or missing references) //IL_0440: Unknown result type (might be due to invalid IL or missing references) //IL_0446: Unknown result type (might be due to invalid IL or missing references) //IL_034f: 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_0602: 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_060d: Unknown result type (might be due to invalid IL or missing references) //IL_0612: Unknown result type (might be due to invalid IL or missing references) //IL_061a: Unknown result type (might be due to invalid IL or missing references) //IL_061c: Unknown result type (might be due to invalid IL or missing references) //IL_0457: Unknown result type (might be due to invalid IL or missing references) //IL_045c: Unknown result type (might be due to invalid IL or missing references) //IL_0462: Unknown result type (might be due to invalid IL or missing references) //IL_0467: Unknown result type (might be due to invalid IL or missing references) //IL_046c: Unknown result type (might be due to invalid IL or missing references) //IL_0474: Unknown result type (might be due to invalid IL or missing references) //IL_0476: Unknown result type (might be due to invalid IL or missing references) //IL_03b6: Unknown result type (might be due to invalid IL or missing references) //IL_0364: Unknown result type (might be due to invalid IL or missing references) //IL_0369: Unknown result type (might be due to invalid IL or missing references) //IL_0374: Unknown result type (might be due to invalid IL or missing references) //IL_0377: Unknown result type (might be due to invalid IL or missing references) //IL_037c: 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_0385: Unknown result type (might be due to invalid IL or missing references) //IL_038a: Unknown result type (might be due to invalid IL or missing references) //IL_0633: Unknown result type (might be due to invalid IL or missing references) //IL_0638: Unknown result type (might be due to invalid IL or missing references) //IL_0550: Unknown result type (might be due to invalid IL or missing references) //IL_0557: Unknown result type (might be due to invalid IL or missing references) //IL_04bc: Unknown result type (might be due to invalid IL or missing references) //IL_04be: Unknown result type (might be due to invalid IL or missing references) //IL_048d: Unknown result type (might be due to invalid IL or missing references) //IL_0492: Unknown result type (might be due to invalid IL or missing references) //IL_03c9: Unknown result type (might be due to invalid IL or missing references) //IL_04d4: Unknown result type (might be due to invalid IL or missing references) //IL_04d9: Unknown result type (might be due to invalid IL or missing references) //IL_0390: Unknown result type (might be due to invalid IL or missing references) //IL_0395: Unknown result type (might be due to invalid IL or missing references) //IL_0399: Unknown result type (might be due to invalid IL or missing references) //IL_039b: Unknown result type (might be due to invalid IL or missing references) //IL_063e: Unknown result type (might be due to invalid IL or missing references) //IL_0643: Unknown result type (might be due to invalid IL or missing references) //IL_0647: Unknown result type (might be due to invalid IL or missing references) //IL_0649: Unknown result type (might be due to invalid IL or missing references) //IL_0498: Unknown result type (might be due to invalid IL or missing references) //IL_049d: Unknown result type (might be due to invalid IL or missing references) //IL_04a1: Unknown result type (might be due to invalid IL or missing references) //IL_04a3: Unknown result type (might be due to invalid IL or missing references) //IL_05a2: Unknown result type (might be due to invalid IL or missing references) //IL_05b2: Unknown result type (might be due to invalid IL or missing references) if (!VWorld.IsClient) { return; } RefinementstationRecipeEntry val = default(RefinementstationRecipeEntry); bool num = ((Component)__instance).TryGetComponent<RefinementstationRecipeEntry>(ref val); RefinementstationRecipeItem val2 = default(RefinementstationRecipeItem); bool flag = ((Component)__instance).TryGetComponent<RefinementstationRecipeItem>(ref val2); ItemGridSelectionEntry val3 = default(ItemGridSelectionEntry); bool flag2 = ((Component)__instance).TryGetComponent<ItemGridSelectionEntry>(ref val3); WorkstationRecipeGridSelectionEntry val4 = default(WorkstationRecipeGridSelectionEntry); bool flag3 = ((Component)__instance).TryGetComponent<WorkstationRecipeGridSelectionEntry>(ref val4); ResearchEntry val5 = default(ResearchEntry); bool flag4 = ((Component)__instance).TryGetComponent<ResearchEntry>(ref val5); BuildMenu_StructureEntry val6 = default(BuildMenu_StructureEntry); bool flag5 = ((Component)__instance).TryGetComponent<BuildMenu_StructureEntry>(ref val6); if (!num && !flag && !flag2 && !flag3 && !flag4 && !flag5) { return; } RefinementstationSubMenu componentInParent = ((Component)__instance).GetComponentInParent<RefinementstationSubMenu>(); UnitSpawnerstationSubMenu componentInParent2 = ((Component)__instance).GetComponentInParent<UnitSpawnerstationSubMenu>(); WorkstationSubMenu componentInParent3 = ((Component)__instance).GetComponentInParent<WorkstationSubMenu>(); ResearchstationSubMenu componentInParent4 = ((Component)__instance).GetComponentInParent<ResearchstationSubMenu>(); InventorySubMenu componentInParent5 = ((Component)__instance).GetComponentInParent<InventorySubMenu>(); BuildMenu componentInParent6 = ((Component)__instance).GetComponentInParent<BuildMenu>(); ServantInventorySubMenu componentInParent7 = ((Component)__instance).GetComponentInParent<ServantInventorySubMenu>(); SalvagestationSubMenu componentInParent8 = ((Component)__instance).GetComponentInParent<SalvagestationSubMenu>(); FakeTooltip val7 = null; if ((Object)(object)componentInParent != (Object)null) { val7 = componentInParent.FakeTooltip; } else if ((Object)(object)componentInParent2 != (Object)null) { val7 = componentInParent2.FakeTooltip; } else if ((Object)(object)componentInParent3 != (Object)null) { val7 = componentInParent3.FakeTooltip; } else if ((Object)(object)componentInParent4 != (Object)null) { val7 = componentInParent4.FakeTooltip; } else if ((Object)(object)componentInParent5 != (Object)null) { val7 = componentInParent5.FakeTooltip; } else if ((Object)(object)componentInParent6 != (Object)null) { val7 = componentInParent6.FakeTooltip; } else if ((Object)(object)componentInParent7 != (Object)null) { val7 = componentInParent7.FakeTooltip; } else if ((Object)(object)componentInParent8 != (Object)null) { val7 = componentInParent8.FakeTooltip; } if ((Object)(object)val7 == (Object)null) { return; } World client = VWorld.Client; if (client.Systems.Count == 0) { return; } EntityManager entityManager = client.EntityManager; GameDataSystem existingSystem = client.GetExistingSystem<GameDataSystem>(); ClientScriptMapper existingSystem2 = client.GetExistingSystem<ClientScriptMapper>(); if (existingSystem2 != null) { _ = existingSystem2._ClientGameManager; } Entity val8 = Entity.Null; EntityQuery val9 = ((EntityManager)(ref entityManager)).CreateEntityQuery((ComponentType[])(object)new ComponentType[1] { ComponentType.ReadOnly<User>() }); Enumerator<Entity> enumerator = ((EntityQuery)(ref val9)).ToEntityArray((Allocator)2).GetEnumerator(); User val10 = default(User); while (enumerator.MoveNext()) { Entity current = enumerator.Current; ((EntityManager)(ref entityManager)).TryGetComponentData<User>(current, ref val10); val8 = val10.LocalCharacter._Entity; } Entity character = val8; PrefabGUID? val11 = null; StoredBlood? storedBlood = null; List<PrefabGUID> list = null; List<PrefabGUID> list2 = null; if ((Object)(object)val != (Object)null) { Data val12; if ((Object)(object)componentInParent != (Object)null) { val12 = componentInParent.RecipesSelectionGroup.Entries._items[((UIEntry)val).EntryIndex]; } else { if (!((Object)(object)componentInParent2 != (Object)null)) { return; } val12 = componentInParent2.RecipesSelectionGroup.Entries._items[((UIEntry)val).EntryIndex]; } list = new List<PrefabGUID>(); Enumerator<RecipeRequirementBuffer> enumerator2 = val12.Requirements.GetEnumerator(); while (enumerator2.MoveNext()) { RecipeRequirementBuffer current2 = enumerator2.Current; list.Add(current2.Guid); } val11 = val12.OutputItems[0].Guid; } else if ((Object)(object)val2 != (Object)null) { val11 = val2.Guid; } else if ((Object)(object)val3 != (Object)null) { if (val3.EntryId == PrefabGUID.Empty) { return; } val11 = val3.EntryId; if ((Object)(object)componentInParent5 != (Object)null && val3.SyncedEntity != Entity.Null) { Durability val13 = default(Durability); if (((EntityManager)(ref entityManager)).TryGetComponentData<Durability>(val3.SyncedEntity, ref val13)) { PrefabLookupMap prefabLookupMap = ((PrefabCollectionSystem_Base)client.GetExistingSystem<PrefabCollectionSystem>()).PrefabLookupMap; list2 = new List<PrefabGUID>(); Enumerator<ItemRepairBuffer> enumerator3 = ((Durability)(ref val13)).GetRepairCost(prefabLookupMap, entityManager).GetEnumerator(); while (enumerator3.MoveNext()) { ItemRepairBuffer current3 = enumerator3.Current; list2.Add(current3.Guid); } } StoredBlood value = default(StoredBlood); if (((EntityManager)(ref entityManager)).TryGetComponentData<StoredBlood>(val3.SyncedEntity, ref value)) { storedBlood = value; } } } else if ((Object)(object)val4 != (Object)null) { Data val14; if ((Object)(object)componentInParent3 != (Object)null) { val14 = componentInParent3.RecipesGridSelectionGroup.Entries._items[((UIEntry)val4).EntryIndex]; } else { if (!((Object)(object)componentInParent5 != (Object)null)) { return; } val14 = componentInParent5.RecipesGridSelectionGroup.Entries._items[((UIEntry)val4).EntryIndex]; } if (existingSystem.RecipeHashLookupMap.ContainsKey(val14.EntryId)) { RecipeData val15 = existingSystem.RecipeHashLookupMap[val14.EntryId]; DynamicBuffer<RecipeRequirementBuffer> val16 = default(DynamicBuffer<RecipeRequirementBuffer>); if (((EntityManager)(ref entityManager)).TryGetBuffer<RecipeRequirementBuffer>(val15.Entity, ref val16)) { list = new List<PrefabGUID>(); Enumerator<RecipeRequirementBuffer> enumerator2 = val16.GetEnumerator(); while (enumerator2.MoveNext()) { RecipeRequirementBuffer current4 = enumerator2.Current; list.Add(current4.Guid); } } DynamicBuffer<RecipeOutputBuffer> val17 = default(DynamicBuffer<RecipeOutputBuffer>); if (((EntityManager)(ref entityManager)).TryGetBuffer<RecipeOutputBuffer>(val15.Entity, ref val17)) { val11 = val17[0].Guid; } } } else if ((Object)(object)val5 != (Object)null) { Enumerator<ResearchGroupEntry> enumerator4 = componentInParent4.ResearchCategories.GetEnumerator(); while (enumerator4.MoveNext()) { ResearchGroupEntry current5 = enumerator4.Current; if (current5.ResearchGridSelectionGroup.Entries._items.Count <= ((UIEntry)val5).EntryIndex || !(current5.ResearchGridSelectionGroup.Entries._items[((UIEntry)val5).EntryIndex].EntryId == val5.EntryId)) { continue; } Data obj = current5.ResearchGridSelectionGroup.Entries._items[((UIEntry)val5).EntryIndex]; list = new List<PrefabGUID>(); Enumerator<CostData> enumerator5 = obj.Requirements.GetEnumerator(); while (enumerator5.MoveNext()) { CostData current6 = enumerator5.Current; if (Utils.TryGetPrefabGUIDForItemName(existingSystem, current6.ItemName, out var prefabGUID)) { list.Add(prefabGUID); } } break; } } else { if (!((Object)(object)val6 != (Object)null)) { return; } if (existingSystem.BlueprintHashLookupMap.ContainsKey(val6.PrefabGuid)) { BlueprintData val18 = existingSystem.BlueprintHashLookupMap[val6.PrefabGuid]; DynamicBuffer<BlueprintRequirementBuffer> val19 = default(DynamicBuffer<BlueprintRequirementBuffer>); if (((EntityManager)(ref entityManager)).TryGetBuffer<BlueprintRequirementBuffer>(val18.Entity, ref val19)) { list = new List<PrefabGUID>(); Enumerator<BlueprintRequirementBuffer> enumerator6 = val19.GetEnumerator(); while (enumerator6.MoveNext()) { BlueprintRequirementBuffer current7 = enumerator6.Current; list.Add(current7.PrefabGUID); } } } } int? item = ((!val11.HasValue) ? null : new int?(Utils.GetStashItemCount(entityManager, character, val11.Value, storedBlood))); List<int> list3 = list?.Select((PrefabGUID x) => Utils.GetStashItemCount(entityManager, character, x)).ToList(); List<int> list4 = list2?.Select((PrefabGUID x) => Utils.GetStashItemCount(entityManager, character, x)).ToList(); if ((!item.HasValue || item.Value != -1) && (list3 == null || !list3.Contains(-1)) && (list4 == null || !list4.Contains(-1))) { int instanceID = ((Object)val7).GetInstanceID(); (DateTime, int?, List<int>, List<int>) value2; bool num2 = _tooltipInfo.TryGetValue(instanceID, out value2); _tooltipInfo[instanceID] = (DateTime.UtcNow, item, list3, list4); if (num2 || DateTime.UtcNow.Subtract(value2.Item1).TotalSeconds >= 0.20000000298023224) { MonoBehaviourExtensions.StartCoroutine((MonoBehaviour)(object)__instance, UpdateTooltip(val7)); } } } private static IEnumerator UpdateTooltip(FakeTooltip tooltip) { int id = ((Object)tooltip).GetInstanceID(); DateTime lastUpdateTime = DateTime.MinValue; (DateTime, int?, List<int>, List<int>) value; while (_tooltipInfo.TryGetValue(id, out value) && (lastUpdateTime != value.Item1 || (!AllTextsContainStashInfo() && DateTime.UtcNow.Subtract(lastUpdateTime).TotalSeconds < 10.0))) { yield return null; if ((Object)(object)tooltip == (Object)null || (Object)(object)tooltip.SubText == (Object)null || (Object)(object)tooltip.SubText.Text == (Object)null || !_tooltipInfo.ContainsKey(id)) { break; } int? num; List<int> list; List<int> list2; (lastUpdateTime, num, list, list2) = _tooltipInfo[id]; if (num.HasValue) { ((TMP_Text)tooltip.SubText.Text).SetText($"{tooltip.SubText._LocalizedString.Text} <size=14><color=white>(Stash: <color=yellow>{num.Value}</color>)</color></size>", true); } if (list != null) { for (int i = 0; i < list.Count; i++) { WorkstationRequirementEntry val = tooltip.RecipeRequiredItems.RequiredItemsList._items[i]; ((TMP_Text)val.Name.Text).SetText($"{val.Name._LocalizedString.Text} <size=12><color=white>(Stash: <color=yellow>{list[i]}</color>)</color></size>", true); } } if (list2 != null) { for (int j = 0; j < list2.Count; j++) { WorkstationRequirementEntry val2 = tooltip.ItemRepairCost.RepairCostList._items[j]; ((TMP_Text)val2.Name.Text).SetText($"{val2.Name._LocalizedString.Text} <size=12><color=white>(Stash: <color=yellow>{list2[j]}</color>)</color></size>", true); } } float endTime = Time.realtimeSinceStartup + 0.2f; while (endTime > Time.realtimeSinceStartup && _tooltipInfo.TryGetValue(id, out value) && lastUpdateTime == value.Item1 && AllTextsContainStashInfo()) { yield return null; } } _tooltipInfo.Remove(id); bool AllTextsContainStashInfo() { if ((Object)(object)tooltip == (Object)null || (Object)(object)tooltip.SubText == (Object)null || (Object)(object)tooltip.SubText.Text == (Object)null || !((Behaviour)tooltip).isActiveAndEnabled) { return true; } string value2 = "</size>"; if (!((TMP_Text)tooltip.SubText.Text).text.EndsWith(value2)) { return false; } return true; } } } [BepInPlugin("VMods.ResourceStashWithdrawal", "VMods.ResourceStashWithdrawal", "1.3.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] [Reloadable] public class Plugin : BasePlugin, IRunOnInitialized { private Harmony _hooks; public sealed override void Load() { Utils.Initialize(((BasePlugin)this).Log, "VMods.ResourceStashWithdrawal"); ResourceStashWithdrawalConfig.Initialize(((BasePlugin)this).Config); } public void OnGameInitialized() { //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Expected O, but got Unknown if (VWorld.IsClient) { UIClickHook.Reset(); } ResourceStashWithdrawalSystem.Initialize(); _hooks = Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), (string)null); ManualLogSource log = ((BasePlugin)this).Log; bool flag = default(bool); BepInExInfoLogInterpolatedStringHandler val = new BepInExInfoLogInterpolatedStringHandler(22, 2, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val).AppendLiteral("Plugin "); ((BepInExLogInterpolatedStringHandler)val).AppendFormatted<string>("VMods.ResourceStashWithdrawal"); ((BepInExLogInterpolatedStringHandler)val).AppendLiteral(" (v"); ((BepInExLogInterpolatedStringHandler)val).AppendFormatted<string>("1.3.0"); ((BepInExLogInterpolatedStringHandler)val).AppendLiteral(") is loaded!"); } log.LogInfo(val); } public sealed override bool Unload() { Harmony hooks = _hooks; if (hooks != null) { hooks.UnpatchSelf(); } ResourceStashWithdrawalSystem.Deinitialize(); ((BasePlugin)this).Config.Clear(); Utils.Deinitialize(); return true; } } public struct ResourceStashWithdrawalRequest { public int ItemGUIDHash; public int Amount; } public class ResourceStashWithDrawalRequester { private static Queue<ResourceStashWithdrawalRequest> requests = new Queue<ResourceStashWithdrawalRequest>(); private static bool running = false; private static int fps = 30; private static int frameDelay = 1000 / fps; public static void StartTask(ResourceStashWithdrawalRequest request) { lock (requests) { requests.Enqueue(request); if (!running) { running = true; RunActionsAsync(); } } } private static async void RunActionsAsync() { while (requests.Count > 0) { ResourceStashWithdrawalRequest resourceStashWithdrawalRequest; lock (requests) { resourceStashWithdrawalRequest = requests.Dequeue(); } VNetwork.SendToServerStruct<ResourceStashWithdrawalRequest>(resourceStashWithdrawalRequest); await Task.Delay(frameDelay); } running = false; } } public static class ResourceStashWithdrawalSystem { public static void Initialize() { VNetworkRegistry.RegisterServerboundStruct<ResourceStashWithdrawalRequest>((Action<FromCharacter, ResourceStashWithdrawalRequest>)OnResourceStashWithdrawalRequest); } public static void Deinitialize() { VNetworkRegistry.UnregisterStruct<ResourceStashWithdrawalRequest>(); } private static void OnResourceStashWithdrawalRequest(FromCharacter fromCharacter, ResourceStashWithdrawalRequest request) { //IL_0007: 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) //IL_000d: 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_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_0039: 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_0040: 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_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_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_0069: 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_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_00a7: 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_018a: Unknown result type (might be due to invalid IL or missing references) //IL_0190: Unknown result type (might be due to invalid IL or missing references) //IL_0196: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_01cb: 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_01ad: Unknown result type (might be due to invalid IL or missing references) //IL_01ae: 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_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: 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_0120: Unknown result type (might be due to invalid IL or missing references) //IL_0121: Unknown result type (might be due to invalid IL or missing references) //IL_0122: Unknown result type (might be due to invalid IL or missing references) //IL_0127: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_012e: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) if (!VWorld.IsServer || fromCharacter.Character == Entity.Null) { return; } World server = VWorld.Server; GameDataSystem existingSystem = server.GetExistingSystem<GameDataSystem>(); NativeHashMap<PrefabGUID, ItemData> itemHashLookupMap = existingSystem.ItemHashLookupMap; PrefabLookupMap prefabLookupMap = ((PrefabCollectionSystem_Base)server.GetExistingSystem<PrefabCollectionSystem>()).PrefabLookupMap; EntityManager entityManager = server.EntityManager; Entity val = default(Entity); if (!InventoryUtilities.TryGetInventoryEntity(entityManager, fromCharacter.Character, ref val, 0) || val == Entity.Null) { return; } int num = request.Amount; DynamicBuffer<InventoryBuffer> val2 = default(DynamicBuffer<InventoryBuffer>); foreach (Entity alliedStash in Utils.GetAlliedStashes(entityManager, fromCharacter.Character)) { ((EntityManager)(ref entityManager)).TryGetBuffer<InventoryBuffer>(alliedStash, ref val2); for (int i = 0; i < val2.Length; i++) { InventoryBuffer val3 = val2[i]; if (val3.ItemType.GuidHash == request.ItemGUIDHash) { int num2 = Math.Min(num, val3.Amount); if (!Utils.TryGiveItem(entityManager, itemHashLookupMap, val, val3.ItemType, num2, out var remainingitems)) { return; } num2 -= remainingitems; if (!InventoryUtilitiesServer.TryRemoveItem(entityManager, alliedStash, val3.ItemType, num2)) { InventoryUtilitiesServer.TryRemoveItem(entityManager, val, val3.ItemType, num2); return; } InventoryUtilitiesServer.CreateInventoryChangedEvent(entityManager, fromCharacter.Character, val3.ItemType, val3.Amount, (InventoryChangedEventType)2); num -= num2; if (num <= 0) { break; } } } if (num <= 0) { break; } } if (num > 0) { string itemName = Utils.GetItemName(new PrefabGUID(request.ItemGUIDHash), existingSystem, entityManager, prefabLookupMap); if (num == request.Amount) { Utils.SendMessage(fromCharacter.User, "Couldn't find any " + itemName + " in the stash(es).", (ServerChatMessageType)6); return; } Utils.SendMessage(fromCharacter.User, $"Couldn't find all {itemName} in the stash(es). {num} {((num == 1) ? "is" : "are")} missing.", (ServerChatMessageType)6); } } } public static class MyPluginInfo { public const string PLUGIN_GUID = "VMods.ResourceStashWithdrawal"; public const string PLUGIN_NAME = "VMods.ResourceStashWithdrawal"; public const string PLUGIN_VERSION = "1.3.0"; } }