public static void UpdateContainerNetworkData(Player player, Container container) { var containerZNewView = (ZNetView)(typeof(Container).GetField("m_nview", BindingFlags.Instance | BindingFlags.NonPublic) ?.GetValue(container)); ReversePatches.ContainerSave(container); var containerUid = containerZNewView.GetZDO().m_uid; ZDOMan.instance.ForceSendZDO(player.GetPlayerID(), containerUid); containerZNewView.GetZDO().SetOwner(player.GetPlayerID()); }
private static int RemoveFromInventory(Inventory inventory, string name, int leftToRemove) { var currentInventoryCount = ReversePatches.InventoryCountItems(inventory, name); var itemsToTake = currentInventoryCount < leftToRemove ? currentInventoryCount : leftToRemove; ReversePatches.InventoryRemoveItemByString(inventory, name, itemsToTake); leftToRemove -= itemsToTake; Plugin.Log.LogDebug($"Removed {itemsToTake} from inv {inventory.GetHashCode()}"); return(leftToRemove); }
// ReSharper disable once UnusedMember.Global public static void Postfix(ref Inventory __instance, string name, ref int __result) { if (!Plugin.Settings.CraftingWithContainersEnabled.Value) { return; } if (!InventoryTracker.ExpandedPlayerInventories.TryGetValue(__instance.GetHashCode(), out var extraInventories)) { return; } var sum = new[] { extraInventories.Player.GetInventory() } .Concat(extraInventories.Containers.Select(container => container.GetInventory())) .Sum(inventory => ReversePatches.InventoryCountItems(inventory, name)); __result = sum; }