Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of Item Vacuum v1.1.3
Valheim Item Vacuum.dll
Decompiled 2 months agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("Valheim Item Vacuum")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("Valheim Item Vacuum")] [assembly: AssemblyCopyright("Copyright © 2026")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("a0ea8960-687f-4860-821c-01a3e40c5dd8")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyVersion("1.0.0.0")] namespace MasterVacuumMod; [BepInPlugin("com.peep.mastervacuum", "Item Vacuum", "1.1.3")] public class MasterVacuumPlugin : BaseUnityPlugin { [HarmonyPatch(typeof(ZNet), "Awake")] private static class ZNet_Awake_Patch { private static void Postfix(ZNet __instance) { ZRoutedRpc.instance.Register<long, uint, ZPackage>("MasterVacuum_ConfirmRemoval", (Action<long, long, uint, ZPackage>)Instance.RPC_MasterVacuum_ConfirmRemoval); } } [HarmonyPatch(typeof(Terminal), "InitTerminal")] private static class ConsolePatch { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static Func<string, bool> <>9__0_1; public static ConsoleEvent <>9__0_0; internal void <Postfix>b__0_0(ConsoleEventArgs args) { string text = ZoneSystem.instance.m_globalKeysValues.Keys.FirstOrDefault((string k) => k.StartsWith("mastervacuum_zdoid")); if (!string.IsNullOrEmpty(text)) { ZoneSystem.instance.RemoveGlobalKey(text); args.Context.AddString("Master Vacuum key cleared."); } else { args.Context.AddString("No vacuum key found."); } } internal bool <Postfix>b__0_1(string k) { return k.StartsWith("mastervacuum_zdoid"); } } private static void Postfix(Terminal __instance) { //IL_0032: 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_0029: Expected O, but got Unknown object obj = <>c.<>9__0_0; if (obj == null) { ConsoleEvent val = delegate(ConsoleEventArgs args) { string text = ZoneSystem.instance.m_globalKeysValues.Keys.FirstOrDefault((string k) => k.StartsWith("mastervacuum_zdoid")); if (!string.IsNullOrEmpty(text)) { ZoneSystem.instance.RemoveGlobalKey(text); args.Context.AddString("Master Vacuum key cleared."); } else { args.Context.AddString("No vacuum key found."); } }; <>c.<>9__0_0 = val; obj = (object)val; } new ConsoleCommand("resetvacuum", "Manual wipe of the vacuum global key.", (ConsoleEvent)obj, false, false, false, false, false, (ConsoleOptionsFetcher)null, false, false, false); } } [HarmonyPatch(typeof(Container), "Awake")] private static class Container_Track_Patch { private static void Postfix(Container __instance) { //IL_0144: Unknown result type (might be due to invalid IL or missing references) //IL_0149: Unknown result type (might be due to invalid IL or missing references) ZNetView nview = Traverse.Create((object)__instance).Field("m_nview").GetValue<ZNetView>(); if ((Object)(object)nview == (Object)null || !nview.IsValid()) { return; } nview.Register("OnInventoryChanged", (Action<long>)delegate { }); nview.Register<long, uint, ZPackage>("MasterVacuum_RequestAdd", (Action<long, long, uint, ZPackage>)delegate(long sender, long vacUserId, uint vacId, ZPackage pkg) { //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Expected O, but got Unknown //IL_00a3: 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_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: 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_00fd: Expected O, but got Unknown if (nview.IsOwner()) { Inventory inventory3 = __instance.GetInventory(); Inventory val2 = new Inventory("temp", (Sprite)null, inventory3.GetWidth(), inventory3.GetHeight()); val2.Load(pkg); Inventory val3 = new Inventory("success", (Sprite)null, inventory3.GetWidth(), inventory3.GetHeight()); bool flag = false; foreach (ItemData allItem in val2.GetAllItems()) { if (inventory3.CanAddItem(allItem, -1)) { inventory3.AddItem(allItem); val3.AddItem(allItem.Clone()); flag = true; } else { ItemDrop.DropItem(allItem, allItem.m_stack, ((Component)__instance).transform.position + Vector3.up, Quaternion.identity); } } if (flag) { nview.InvokeRPC(ZNetView.Everybody, "OnInventoryChanged", Array.Empty<object>()); if (vacUserId != 0L) { ZPackage val4 = new ZPackage(); val3.Save(val4); ZRoutedRpc.instance.InvokeRoutedRPC(sender, "MasterVacuum_ConfirmRemoval", new object[3] { vacUserId, vacId, val4 }); } } } }); nview.Register<ZPackage>("MasterVacuum_RequestRemove", (Action<long, ZPackage>)delegate(long uid, ZPackage pkg) { //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) if (!nview.IsOwner()) { return; } Inventory inventory2 = __instance.GetInventory(); Inventory val = new Inventory("temp", (Sprite)null, inventory2.GetWidth(), inventory2.GetHeight()); val.Load(pkg); foreach (ItemData allItem2 in val.GetAllItems()) { inventory2.RemoveItem(allItem2.m_shared.m_name, allItem2.m_stack, -1, true); } }); if (!TrackedContainers.Contains(__instance)) { TrackedContainers.Add(__instance); } Inventory inventory = __instance.GetInventory(); nview.GetZDO().Set(HashWidth, inventory.GetWidth(), false); nview.GetZDO().Set(HashHeight, inventory.GetHeight(), false); if (((Object)__instance).name.Contains("Item_Vacuum") && ZNet.instance.IsServer()) { ZDOID uid2 = nview.GetZDO().m_uid; ZoneSystem.instance.SetGlobalKey(string.Format("{0}={1}:{2}", "mastervacuum_zdoid", ((ZDOID)(ref uid2)).UserID, ((ZDOID)(ref uid2)).ID)); } } } [HarmonyPatch(typeof(ZoneSystem), "Start")] private static class ZoneSystem_Start_Persistent_Patch { private static void Postfix() { //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) if (ZNet.instance.IsServer() && !ZoneSystem.instance.m_globalKeysValues.Keys.Any((string k) => k.StartsWith("mastervacuum_zdoid="))) { logger.LogInfo((object)"Server started: No Master Vacuum link found. Scanning world database..."); string text = "Item_Vacuum"; List<ZDO> list = new List<ZDO>(); int num = 0; while (!ZDOMan.instance.GetAllZDOsWithPrefabIterative(text, list, ref num)) { } if (list.Count > 0) { ZDOID uid = list[0].m_uid; string globalKey = $"mastervacuum_zdoid={((ZDOID)(ref uid)).UserID}:{((ZDOID)(ref uid)).ID}"; ZoneSystem.instance.SetGlobalKey(globalKey); logger.LogInfo((object)$"Successfully restored Master Vacuum Link: {((ZDOID)(ref uid)).UserID}:{((ZDOID)(ref uid)).ID}"); } else { logger.LogInfo((object)"No Master Vacuum objects found in the world."); } } } } [HarmonyPatch(typeof(Container), "OnDestroyed")] private static class Container_Cleanup_Patch { private static void Prefix(Container __instance) { TrackedContainers.RemoveAll((Container c) => (Object)(object)c == (Object)null); if (((Object)__instance).name.Contains("Item_Vacuum") && ZNet.instance.IsServer()) { string text = ZoneSystem.instance.m_globalKeysValues.Keys.FirstOrDefault((string k) => k.StartsWith("mastervacuum_zdoid")); if (!string.IsNullOrEmpty(text)) { ZoneSystem.instance.RemoveGlobalKey(text); } } } } [HarmonyPatch(typeof(ItemDrop), "SlowUpdate")] private static class ItemDrop_SlowUpdate_Patch { private static Dictionary<ZDOID, float> m_attemptTracker = new Dictionary<ZDOID, float>(); private static void Postfix(ItemDrop __instance, ZNetView ___m_nview) { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0032: 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_00af: 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_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: 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_00e8: Expected O, but got Unknown //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_011a: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)___m_nview == (Object)null || !___m_nview.IsValid() || !___m_nview.IsOwner()) { return; } ZDOID uid = ___m_nview.GetZDO().m_uid; float time = Time.time; if ((!m_attemptTracker.TryGetValue(uid, out var value) || !(time - value < 10f)) && IsItemTypeAllowed(__instance.m_itemData.m_shared.m_itemType)) { string text = ZoneSystem.instance.m_globalKeysValues.Keys.FirstOrDefault((string k) => k.StartsWith("mastervacuum_zdoid")); if (!string.IsNullOrEmpty(text)) { ZDOID val = ParseZDOID(text.Split(new char[1] { '=' })[1]); m_attemptTracker[uid] = time; Inventory val2 = new Inventory("temp", (Sprite)null, 1, 1); val2.AddItem(__instance.m_itemData.Clone()); ZPackage val3 = new ZPackage(); val2.Save(val3); ZRoutedRpc.instance.InvokeRoutedRPC(ZRoutedRpc.instance.GetServerPeerID(), "MasterVacuum_RequestIntake", new object[3] { val, val3, uid }); } } } } [HarmonyPatch(typeof(Player), "UpdatePlacement")] private static class Placement_Blocker_Patch { private static bool Prefix(Player __instance) { //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) GameObject value = Traverse.Create((object)__instance).Field("m_placementGhost").GetValue<GameObject>(); if ((Object)(object)value == (Object)null || !((Object)value).name.Contains("Item_Vacuum")) { return true; } string text = ZoneSystem.instance.m_globalKeysValues.Keys.FirstOrDefault((string k) => k.StartsWith("mastervacuum_zdoid")); if (!string.IsNullOrEmpty(text)) { string[] array = text.Split(new char[1] { '=' }); if (array.Length >= 2) { ZDOID val = ParseZDOID(array[1]); if (ZDOMan.instance.GetZDO(val) == null) { ZoneSystem.instance.RemoveGlobalKey(text); return true; } } SetPlacementGhostValidDelegate?.Invoke(__instance, arg2: false); if (ZInput.GetButtonDown("Attack") || ZInput.GetButton("Attack")) { ((Character)__instance).Message((MessageType)2, "A Master Vacuum already exists!", 0, (Sprite)null); return false; } } return true; } } [HarmonyPatch(typeof(ZNetScene), "Awake")] public static class ZNetSceneAwakePatch_Post { public static void Postfix(ZNetScene __instance, Dictionary<int, GameObject> ___m_namedPrefabs) { //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_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Expected O, but got Unknown //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: 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_0102: Expected O, but got Unknown ZRoutedRpc.instance.Register<ZDOID, ZPackage, ZDOID>("MasterVacuum_RequestIntake", (Action<long, ZDOID, ZPackage, ZDOID>)Instance.RPC_MasterVacuum_RequestIntake); ZRoutedRpc.instance.Register<ZDOID>("MasterVacuum_ConfirmIntake", (Action<long, ZDOID>)Instance.RPC_MasterVacuum_ConfirmIntake); if ((Object)(object)vacuumPrefab != (Object)null) { if (!__instance.m_prefabs.Contains(vacuumPrefab)) { __instance.m_prefabs.Add(vacuumPrefab); } int stableHashCode = StringExtensionMethods.GetStableHashCode(((Object)vacuumPrefab).name); if (!___m_namedPrefabs.ContainsKey(stableHashCode)) { ___m_namedPrefabs[stableHashCode] = vacuumPrefab; } Piece component = vacuumPrefab.GetComponent<Piece>(); GameObject prefab = __instance.GetPrefab("vfx_Place_chest"); GameObject prefab2 = __instance.GetPrefab("sfx_build_hammer_wood"); if ((Object)(object)component != (Object)null && (Object)(object)prefab != (Object)null) { component.m_placeEffect.m_effectPrefabs = (EffectData[])(object)new EffectData[2] { new EffectData { m_prefab = prefab, m_enabled = true }, new EffectData { m_prefab = prefab2, m_enabled = true } }; } } } } [HarmonyPatch(typeof(ZNet), "OnNewConnection")] private static class RegisterAndSyncRPC { private static void Postfix(ZNet __instance, ZNetPeer peer) { //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Expected O, but got Unknown peer.m_rpc.Register<ZPackage>("MasterVacuum_RPC_SyncConfig", (Action<ZRpc, ZPackage>)RPC_MasterVacuum_SyncConfig); if (ZNet.instance.IsServer()) { logger.LogInfo((object)("Sending config to peer: " + peer.m_playerName)); ZPackage val = new ZPackage(); val.Write(PickUpMaterials.Value); val.Write(PickUpConsumables.Value); val.Write(PickUpTrophies.Value); val.Write(PickUpEquipment.Value); val.Write(PickUpMisc.Value); peer.m_rpc.Invoke("MasterVacuum_RPC_SyncConfig", new object[1] { val }); } } private static void RPC_MasterVacuum_SyncConfig(ZRpc rpc, ZPackage pkg) { if (!ZNet.instance.IsServer()) { logger.LogInfo((object)"Received config from server. Applying settings..."); PickUpMaterials.Value = pkg.ReadBool(); PickUpConsumables.Value = pkg.ReadBool(); PickUpTrophies.Value = pkg.ReadBool(); PickUpEquipment.Value = pkg.ReadBool(); PickUpMisc.Value = pkg.ReadBool(); } } } [HarmonyPatch(typeof(ObjectDB), "CopyOtherDB")] public static class ObjectDB_Patch { public static void Postfix(ObjectDB __instance) { GameObject itemPrefab = __instance.GetItemPrefab("Hammer"); if ((Object)(object)itemPrefab != (Object)null) { PieceTable buildPieces = itemPrefab.GetComponent<ItemDrop>().m_itemData.m_shared.m_buildPieces; if ((Object)(object)vacuumPrefab != (Object)null && !buildPieces.m_pieces.Contains(vacuumPrefab)) { buildPieces.m_pieces.Add(vacuumPrefab); } } } } public static MasterVacuumPlugin Instance; private const string ModGUID = "com.peep.mastervacuum"; private const string ModName = "Item Vacuum"; private const string ModVersion = "1.1.3"; public static ManualLogSource logger; private readonly Harmony harmony = new Harmony("com.peep.mastervacuum"); private static GameObject vacuumPrefab; private static MethodInfo _findObjectsMethod; private static float m_distributeTimer = 0f; private const string GlobalKeyName = "mastervacuum_zdoid"; public static readonly int HashWidth = StringExtensionMethods.GetStableHashCode("mastervac_width"); public static readonly int HashHeight = StringExtensionMethods.GetStableHashCode("mastervac_height"); public static readonly List<Container> TrackedContainers = new List<Container>(); private static Action<Player, bool> SetPlacementGhostValidDelegate; public static ConfigEntry<bool> PickUpMaterials; public static ConfigEntry<bool> PickUpConsumables; public static ConfigEntry<bool> PickUpTrophies; public static ConfigEntry<bool> PickUpEquipment; public static ConfigEntry<bool> PickUpMisc; public void Awake() { Instance = this; logger = ((BaseUnityPlugin)this).Logger; PickUpMaterials = ((BaseUnityPlugin)this).Config.Bind<bool>("Filters", "PickUpMaterials", true, "Pick up items like wood, stone, and ores."); PickUpConsumables = ((BaseUnityPlugin)this).Config.Bind<bool>("Filters", "PickUpConsumables", true, "Pick up food and potions."); PickUpTrophies = ((BaseUnityPlugin)this).Config.Bind<bool>("Filters", "PickUpTrophies", true, "Pick up monster trophies."); PickUpEquipment = ((BaseUnityPlugin)this).Config.Bind<bool>("Filters", "PickUpEquipment", false, "Pick up weapons and armor."); PickUpMisc = ((BaseUnityPlugin)this).Config.Bind<bool>("Filters", "PickUpMisc", false, "Pick up miscellaneous items."); LoadAssets(); _findObjectsMethod = typeof(ZDOMan).GetMethod("FindObjects", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new Type[2] { typeof(Vector2i), typeof(List<ZDO>) }, null); SetPlacementGhostValidDelegate = AccessTools.MethodDelegate<Action<Player, bool>>(AccessTools.Method(typeof(Player), "SetPlacementGhostValid", (Type[])null, (Type[])null), (object)null, true); harmony.PatchAll(); logger.LogInfo((object)"Master Vacuum: Two-Way Handshake System Initialized."); } private void Update() { if (!((Object)(object)ZNet.instance == (Object)null)) { m_distributeTimer += Time.deltaTime; if (m_distributeTimer >= 5f) { m_distributeTimer = 0f; ProcessVacuumCycle(); } } } private void LoadAssets() { Assembly executingAssembly = Assembly.GetExecutingAssembly(); string text = executingAssembly.GetManifestResourceNames().FirstOrDefault((string str) => str.EndsWith("item_vacuum")); if (text != null) { using (Stream stream = executingAssembly.GetManifestResourceStream(text)) { AssetBundle obj = AssetBundle.LoadFromStream(stream); vacuumPrefab = obj.LoadAsset<GameObject>("Item_Vacuum"); obj.Unload(false); } } } private void ProcessVacuumCycle() { //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_0069: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Expected O, but got Unknown //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_0128: 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_0397: Unknown result type (might be due to invalid IL or missing references) //IL_039e: Expected O, but got Unknown //IL_0278: Unknown result type (might be due to invalid IL or missing references) //IL_027f: Expected O, but got Unknown //IL_050c: Unknown result type (might be due to invalid IL or missing references) //IL_0513: Expected O, but got Unknown //IL_02f4: Unknown result type (might be due to invalid IL or missing references) //IL_02fb: Expected O, but got Unknown string text = ZoneSystem.instance.m_globalKeysValues.Keys.FirstOrDefault((string k) => k.StartsWith("mastervacuum_zdoid")); if (string.IsNullOrEmpty(text)) { return; } string[] array = text.Split(new char[1] { '=' }); ZDOID masterID = ParseZDOID(array[1]); ZDO zDO = ZDOMan.instance.GetZDO(masterID); if (zDO == null) { ZoneSystem.instance.RemoveGlobalKey(array[0]); return; } int @int = zDO.GetInt(HashWidth, 8); int int2 = zDO.GetInt(HashHeight, 5); Inventory inventoryFromZDO = GetInventoryFromZDO(zDO, @int, int2); if (inventoryFromZDO.GetAllItems().Count == 0) { return; } Inventory val = new Inventory("tracker", (Sprite)null, @int, int2); Container val2 = TrackedContainers.Find(delegate(Container c) { //IL_001a: 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) if ((Object)(object)c != (Object)null) { ZNetView component3 = ((Component)c).GetComponent<ZNetView>(); if (component3 == null) { return false; } return component3.GetZDO().m_uid == masterID; } return false; }); List<ZDO> list = FindAllZDOsInRange(zDO.GetPosition(), 30f, masterID); bool flag = false; foreach (ZDO containerZDO in list) { if (containerZDO.m_uid == masterID) { continue; } Container val3 = TrackedContainers.Find(delegate(Container c) { //IL_0023: 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_0039: 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 ((Object)(object)c != (Object)null) { ZNetView component2 = ((Component)c).GetComponent<ZNetView>(); ZDOID? val8 = ((component2 != null) ? new ZDOID?(component2.GetZDO().m_uid) : null); ZDOID uid = containerZDO.m_uid; if (!val8.HasValue) { return false; } return val8.GetValueOrDefault() == uid; } return false; }); if ((Object)(object)val3 != (Object)null) { ZNetView component = ((Component)val3).GetComponent<ZNetView>(); Inventory inventory = val3.GetInventory(); if (component.IsOwner()) { bool flag2 = false; foreach (ItemData item in inventoryFromZDO.GetAllItems().ToList()) { if (inventory.HaveItem(item.m_shared.m_name, true) && inventory.CanAddItem(item, -1)) { inventory.AddItem(item); inventoryFromZDO.RemoveItem(item); if ((Object)(object)val2 != (Object)null && ((Component)val2).GetComponent<ZNetView>().IsOwner()) { val2.GetInventory().RemoveItem(item.m_shared.m_name, item.m_stack, -1, true); } else if ((Object)(object)val2 != (Object)null) { val.AddItem(item); } flag = true; flag2 = true; } } if (flag2) { component.InvokeRPC(ZNetView.Everybody, "OnInventoryChanged", Array.Empty<object>()); } } else { Inventory val4 = new Inventory("temp", (Sprite)null, @int, int2); foreach (ItemData item2 in inventoryFromZDO.GetAllItems().ToList()) { if (inventory.HaveItem(item2.m_shared.m_name, true) && inventory.CanAddItem(item2, -1)) { val4.AddItem(item2); } } if (val4.GetAllItems().Count > 0) { ZPackage val5 = new ZPackage(); val4.Save(val5); component.InvokeRPC(component.GetZDO().GetOwner(), "MasterVacuum_RequestAdd", new object[3] { ((ZDOID)(ref masterID)).UserID, ((ZDOID)(ref masterID)).ID, val5 }); } } } else { int int3 = containerZDO.GetInt(HashWidth, 5); int int4 = containerZDO.GetInt(HashHeight, 2); Inventory inventoryFromZDO2 = GetInventoryFromZDO(containerZDO, int3, int4); Inventory val6 = new Inventory("success", (Sprite)null, @int, int2); bool flag3 = false; foreach (ItemData item3 in inventoryFromZDO.GetAllItems().ToList()) { if (inventoryFromZDO2.HaveItem(item3.m_shared.m_name, true) && inventoryFromZDO2.CanAddItem(item3, -1)) { inventoryFromZDO2.AddItem(item3); val6.AddItem(item3); flag3 = true; } } if (flag3) { SaveInventoryToZDO(inventoryFromZDO2, containerZDO); foreach (ItemData allItem in val6.GetAllItems()) { inventoryFromZDO.RemoveItem(allItem); if ((Object)(object)val2 != (Object)null && ((Component)val2).GetComponent<ZNetView>().IsOwner()) { val2.GetInventory().RemoveItem(allItem.m_shared.m_name, allItem.m_stack, -1, true); } else if ((Object)(object)val2 != (Object)null) { val.AddItem(allItem); } } flag = true; } } if (inventoryFromZDO.GetAllItems().Count == 0) { break; } } if (flag) { if ((Object)(object)val2 != (Object)null && !((Component)val2).GetComponent<ZNetView>().IsOwner() && val.GetAllItems().Count > 0) { ZPackage val7 = new ZPackage(); val.Save(val7); ((Component)val2).GetComponent<ZNetView>().InvokeRPC(((Component)val2).GetComponent<ZNetView>().GetZDO().GetOwner(), "MasterVacuum_RequestRemove", new object[1] { val7 }); } else if (zDO.IsOwner()) { SaveInventoryToZDO(inventoryFromZDO, zDO); } } } public void RPC_MasterVacuum_ConfirmRemoval(long sender, long vacUserId, uint vacId, ZPackage pkg) { //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_0019: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Expected O, but got Unknown ZDOID vacuumID = new ZDOID(vacUserId, vacId); ZDO zDO = ZDOMan.instance.GetZDO(vacuumID); if (zDO == null || !zDO.IsOwner()) { return; } int @int = zDO.GetInt(HashWidth, 8); int int2 = zDO.GetInt(HashHeight, 5); Inventory val = new Inventory("temp", (Sprite)null, @int, int2); val.Load(pkg); Container val2 = TrackedContainers.Find(delegate(Container c) { //IL_001a: 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) if ((Object)(object)c != (Object)null) { ZNetView component = ((Component)c).GetComponent<ZNetView>(); if (component == null) { return false; } return component.GetZDO().m_uid == vacuumID; } return false; }); if (zDO.IsOwner()) { Inventory inventoryFromZDO = GetInventoryFromZDO(zDO, @int, int2); bool flag = false; foreach (ItemData allItem in val.GetAllItems()) { if (inventoryFromZDO.HaveItem(allItem.m_shared.m_name, true)) { inventoryFromZDO.RemoveItem(allItem.m_shared.m_name, allItem.m_stack, -1, true); flag = true; } if ((Object)(object)val2 != (Object)null && ((Component)val2).GetComponent<ZNetView>().IsOwner()) { val2.GetInventory().RemoveItem(allItem.m_shared.m_name, allItem.m_stack, -1, true); } } if (flag) { SaveInventoryToZDO(inventoryFromZDO, zDO); } } else if ((Object)(object)val2 != (Object)null) { ((Component)val2).GetComponent<ZNetView>().InvokeRPC(zDO.GetOwner(), "MasterVacuum_RequestRemove", new object[1] { pkg }); } } public Inventory GetInventoryFromZDO(ZDO zdo, int width, int height) { //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Expected O, but got Unknown //IL_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Expected O, but got Unknown //IL_0058: 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_0114: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Expected O, but got Unknown //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Expected O, but got Unknown foreach (Container trackedContainer in TrackedContainers) { if (!((Object)(object)trackedContainer != (Object)null)) { continue; } ZNetView val = (ZNetView)typeof(Container).GetField("m_nview", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(trackedContainer); if (!((Object)(object)val != (Object)null) || !(val.GetZDO().m_uid == zdo.m_uid)) { continue; } Inventory inventory = trackedContainer.GetInventory(); Inventory val2 = new Inventory(inventory.GetName(), inventory.GetBkg(), width, height); foreach (ItemData allItem in inventory.GetAllItems()) { val2.AddItem(allItem.Clone()); } return val2; } Inventory val3 = new Inventory("OfflineInventory", (Sprite)null, width, height); string @string = zdo.GetString(ZDOVars.s_items, ""); if (!string.IsNullOrEmpty(@string)) { ZPackage val4 = new ZPackage(@string); val3.Load(val4); } return val3; } public void SaveInventoryToZDO(Inventory inv, ZDO zdo) { //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Expected O, but got Unknown //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) if (zdo == null || !zdo.IsValid()) { return; } if (zdo.GetOwner() == 0L) { zdo.SetOwner(ZDOMan.GetSessionID()); } if (!zdo.IsOwner()) { return; } zdo.Set(HashWidth, inv.GetWidth(), false); zdo.Set(HashHeight, inv.GetHeight(), false); ZPackage val = new ZPackage(); inv.Save(val); zdo.Set(ZDOVars.s_items, val.GetBase64()); uint dataRevision = zdo.DataRevision; zdo.DataRevision = dataRevision + 1; foreach (Container trackedContainer in TrackedContainers) { if (!((Object)(object)trackedContainer == (Object)null)) { ZNetView value = Traverse.Create((object)trackedContainer).Field("m_nview").GetValue<ZNetView>(); if ((Object)(object)value != (Object)null && value.IsValid() && value.GetZDO().m_uid == zdo.m_uid) { value.InvokeRPC(ZNetView.Everybody, "OnInventoryChanged", Array.Empty<object>()); break; } } } } private List<ZDO> FindAllZDOsInRange(Vector3 center, float radius, ZDOID ignore) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0088: 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_0097: 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) List<ZDO> list = new List<ZDO>(); float num = radius * radius; Vector2i zone = ZoneSystem.GetZone(center); Vector2i val = default(Vector2i); for (int i = -1; i <= 1; i++) { for (int j = -1; j <= 1; j++) { ((Vector2i)(ref val))..ctor(zone.x + i, zone.y + j); List<ZDO> list2 = new List<ZDO>(); _findObjectsMethod?.Invoke(ZDOMan.instance, new object[2] { val, list2 }); if (list2 == null) { continue; } foreach (ZDO item in list2) { if (item != null && !(item.m_uid == ignore) && Vector3.SqrMagnitude(item.GetPosition() - center) <= num) { list.Add(item); } } } } return list; } public static ZDOID ParseZDOID(string id) { //IL_002e: 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) string[] array = id.Split(new char[1] { ':' }); if (array.Length == 2) { return new ZDOID(long.Parse(array[0]), uint.Parse(array[1])); } return ZDOID.None; } private static bool IsItemTypeAllowed(ItemType type) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Expected I4, but got Unknown switch (type - 1) { case 0: return PickUpMaterials.Value; case 1: return PickUpConsumables.Value; case 12: return PickUpTrophies.Value; case 2: case 3: case 4: case 5: case 6: case 10: case 13: return PickUpEquipment.Value; case 15: return PickUpMisc.Value; default: return true; } } public void RPC_MasterVacuum_RequestIntake(long sender, ZDOID vacuumID, ZPackage itemPkg, ZDOID originalItemID) { //IL_0012: 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_00a9: Unknown result type (might be due to invalid IL or missing references) if (!ZNet.instance.IsServer()) { return; } ZDO zDO = ZDOMan.instance.GetZDO(vacuumID); if (zDO != null) { if (zDO.GetOwner() != ZDOMan.GetSessionID()) { zDO.SetOwner(ZDOMan.GetSessionID()); } int @int = zDO.GetInt(HashWidth, 8); int int2 = zDO.GetInt(HashHeight, 5); Inventory inventoryFromZDO = GetInventoryFromZDO(zDO, @int, int2); Inventory val = new Inventory("temp", (Sprite)null, 1, 1); val.Load(itemPkg); ItemData itemAt = val.GetItemAt(0, 0); if (itemAt != null && inventoryFromZDO.CanAddItem(itemAt, -1)) { inventoryFromZDO.AddItem(itemAt); SaveInventoryToZDO(inventoryFromZDO, zDO); ZRoutedRpc.instance.InvokeRoutedRPC(sender, "MasterVacuum_ConfirmIntake", new object[1] { originalItemID }); } } } public void RPC_MasterVacuum_ConfirmIntake(long sender, ZDOID itemID) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) GameObject val = ZNetScene.instance.FindInstance(itemID); if ((Object)(object)val != (Object)null) { ZNetView component = val.GetComponent<ZNetView>(); if ((Object)(object)component != (Object)null && component.IsValid() && component.IsOwner()) { component.Destroy(); } } } }