// Decompiled with JetBrains decompiler // Type: Terraria.UI.ChestUI // Assembly: Terraria, Version=1.4.0.5, Culture=neutral, PublicKeyToken=null // MVID: 67F9E73E-0A81-4937-A22C-5515CD405A83 // Assembly location: C:\Users\mikeyisbaeyt\Downloads\depotdownloader-2.4.5\depots\105601\6707058\Terraria.exe using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using System.Collections.Generic; using Terraria.Audio; using Terraria.GameContent; using Terraria.GameInput; using Terraria.Localization; using Terraria.UI.Chat; using Terraria.UI.Gamepad; namespace Terraria.UI { public class ChestUI { public const float buttonScaleMinimum = 0.75f; public const float buttonScaleMaximum = 1f; public static float[] ButtonScale = new float[7]; public static bool[] ButtonHovered = new bool[7]; public static void UpdateHover(int ID, bool hovering) { if (hovering) { if (!ChestUI.ButtonHovered[ID]) SoundEngine.PlaySound(12); ChestUI.ButtonHovered[ID] = true; ChestUI.ButtonScale[ID] += 0.05f; if ((double) ChestUI.ButtonScale[ID] <= 1.0) return; ChestUI.ButtonScale[ID] = 1f; } else { ChestUI.ButtonHovered[ID] = false; ChestUI.ButtonScale[ID] -= 0.05f; if ((double) ChestUI.ButtonScale[ID] >= 0.75) return; ChestUI.ButtonScale[ID] = 0.75f; } } public static void Draw(SpriteBatch spritebatch) { if (Main.player[Main.myPlayer].chest != -1 && !Main.recBigList) { Main.inventoryScale = 0.755f; if (Utils.FloatIntersect((float) Main.mouseX, (float) Main.mouseY, 0.0f, 0.0f, 73f, (float) Main.instance.invBottom, 560f * Main.inventoryScale, 224f * Main.inventoryScale)) Main.player[Main.myPlayer].mouseInterface = true; ChestUI.DrawName(spritebatch); ChestUI.DrawButtons(spritebatch); ChestUI.DrawSlots(spritebatch); } else { for (int index = 0; index < 7; ++index) { ChestUI.ButtonScale[index] = 0.75f; ChestUI.ButtonHovered[index] = false; } } } private static void DrawName(SpriteBatch spritebatch) { Player player = Main.player[Main.myPlayer]; string text = string.Empty; if (Main.editChest) { text = Main.npcChatText; ++Main.instance.textBlinkerCount; if (Main.instance.textBlinkerCount >= 20) { Main.instance.textBlinkerState = Main.instance.textBlinkerState != 0 ? 0 : 1; Main.instance.textBlinkerCount = 0; } if (Main.instance.textBlinkerState == 1) text += "|"; Main.instance.DrawWindowsIMEPanel(new Vector2(120f, 518f)); } else if (player.chest > -1) { if (Main.chest[player.chest] == null) Main.chest[player.chest] = new Chest(); Chest chest = Main.chest[player.chest]; if (chest.name != "") { text = chest.name; } else { Tile tile = Main.tile[player.chestX, player.chestY]; if (tile.type == (ushort) 21) text = Lang.chestType[(int) tile.frameX / 36].Value; else if (tile.type == (ushort) 467 && (int) tile.frameX / 36 == 4) text = Lang.GetItemNameValue(3988); else if (tile.type == (ushort) 467) text = Lang.chestType2[(int) tile.frameX / 36].Value; else if (tile.type == (ushort) 88) text = Lang.dresserType[(int) tile.frameX / 54].Value; } } else if (player.chest == -2) text = Lang.inter[32].Value; else if (player.chest == -3) text = Lang.inter[33].Value; else if (player.chest == -4) text = Lang.GetItemNameValue(3813); else if (player.chest == -5) text = Lang.GetItemNameValue(4076); Color color = new Color((int) Main.mouseTextColor, (int) Main.mouseTextColor, (int) Main.mouseTextColor, (int) Main.mouseTextColor); Color baseColor = Color.White * (float) (1.0 - ((double) byte.MaxValue - (double) Main.mouseTextColor) / (double) byte.MaxValue * 0.5); baseColor.A = byte.MaxValue; int lineAmount; Utils.WordwrapString(text, FontAssets.MouseText.Value, 200, 1, out lineAmount); int num = lineAmount + 1; for (int index = 0; index < num; ++index) ChatManager.DrawColorCodedStringWithShadow(spritebatch, FontAssets.MouseText.Value, text, new Vector2(504f, (float) (Main.instance.invBottom + index * 26)), baseColor, 0.0f, Vector2.Zero, Vector2.One, spread: 1.5f); } private static void DrawButtons(SpriteBatch spritebatch) { for (int ID = 0; ID < 7; ++ID) ChestUI.DrawButton(spritebatch, ID, 506, Main.instance.invBottom + 40); } private static void DrawButton(SpriteBatch spriteBatch, int ID, int X, int Y) { Player player = Main.player[Main.myPlayer]; if (ID == 5 && player.chest < -1 || ID == 6 && !Main.editChest) ChestUI.UpdateHover(ID, false); else if (ID == 7 && player.chest != -5) { ChestUI.UpdateHover(ID, false); } else { int num1 = ID; if (ID == 7) num1 = 5; Y += num1 * 26; float num2 = ChestUI.ButtonScale[ID]; string text = ""; switch (ID) { case 0: text = Lang.inter[29].Value; break; case 1: text = Lang.inter[30].Value; break; case 2: text = Lang.inter[31].Value; break; case 3: text = Lang.inter[82].Value; break; case 4: text = Lang.inter[122].Value; break; case 5: text = Lang.inter[Main.editChest ? 47 : 61].Value; break; case 6: text = Lang.inter[63].Value; break; case 7: text = !player.IsVoidVaultEnabled ? Language.GetTextValue("UI.ToggleBank4VacuumIsOff") : Language.GetTextValue("UI.ToggleBank4VacuumIsOn"); break; } Vector2 vector2_1 = FontAssets.MouseText.Value.MeasureString(text); Color color = new Color((int) Main.mouseTextColor, (int) Main.mouseTextColor, (int) Main.mouseTextColor, (int) Main.mouseTextColor) * num2; Color baseColor = Color.White * 0.97f * (float) (1.0 - ((double) byte.MaxValue - (double) Main.mouseTextColor) / (double) byte.MaxValue * 0.5); baseColor.A = byte.MaxValue; X += (int) ((double) vector2_1.X * (double) num2 / 2.0); bool flag = Utils.FloatIntersect((float) Main.mouseX, (float) Main.mouseY, 0.0f, 0.0f, (float) X - vector2_1.X / 2f, (float) (Y - 12), vector2_1.X, 24f); if (ChestUI.ButtonHovered[ID]) flag = Utils.FloatIntersect((float) Main.mouseX, (float) Main.mouseY, 0.0f, 0.0f, (float) ((double) X - (double) vector2_1.X / 2.0 - 10.0), (float) (Y - 12), vector2_1.X + 16f, 24f); if (flag) baseColor = Main.OurFavoriteColor; ChatManager.DrawColorCodedStringWithShadow(spriteBatch, FontAssets.MouseText.Value, text, new Vector2((float) X, (float) Y), baseColor, 0.0f, vector2_1 / 2f, new Vector2(num2), spread: 1.5f); Vector2 vector2_2 = vector2_1 * num2; switch (ID) { case 0: UILinkPointNavigator.SetPosition(500, new Vector2((float) X - (float) ((double) vector2_2.X * (double) num2 / 2.0 * 0.800000011920929), (float) Y)); break; case 1: UILinkPointNavigator.SetPosition(501, new Vector2((float) X - (float) ((double) vector2_2.X * (double) num2 / 2.0 * 0.800000011920929), (float) Y)); break; case 2: UILinkPointNavigator.SetPosition(502, new Vector2((float) X - (float) ((double) vector2_2.X * (double) num2 / 2.0 * 0.800000011920929), (float) Y)); break; case 3: UILinkPointNavigator.SetPosition(503, new Vector2((float) X - (float) ((double) vector2_2.X * (double) num2 / 2.0 * 0.800000011920929), (float) Y)); break; case 4: UILinkPointNavigator.SetPosition(505, new Vector2((float) X - (float) ((double) vector2_2.X * (double) num2 / 2.0 * 0.800000011920929), (float) Y)); break; case 5: UILinkPointNavigator.SetPosition(504, new Vector2((float) X, (float) Y)); break; case 6: UILinkPointNavigator.SetPosition(504, new Vector2((float) X, (float) Y)); break; case 7: UILinkPointNavigator.SetPosition(506, new Vector2((float) X - (float) ((double) vector2_2.X * (double) num2 / 2.0 * 0.800000011920929), (float) Y)); break; } if (!flag) { ChestUI.UpdateHover(ID, false); } else { ChestUI.UpdateHover(ID, true); if (PlayerInput.IgnoreMouseInterface) return; player.mouseInterface = true; if (!Main.mouseLeft || !Main.mouseLeftRelease) return; switch (ID) { case 0: ChestUI.LootAll(); break; case 1: ChestUI.DepositAll(); break; case 2: ChestUI.QuickStack(); break; case 3: ChestUI.Restock(); break; case 4: ItemSorting.SortChest(); break; case 5: ChestUI.RenameChest(); break; case 6: ChestUI.RenameChestCancel(); break; case 7: ChestUI.ToggleVacuum(); break; } Recipe.FindRecipes(); } } } private static void ToggleVacuum() { Player player = Main.player[Main.myPlayer]; player.IsVoidVaultEnabled = !player.IsVoidVaultEnabled; } private static void DrawSlots(SpriteBatch spriteBatch) { Player player = Main.player[Main.myPlayer]; int context = 0; Item[] inv = (Item[]) null; if (player.chest > -1) { context = 3; inv = Main.chest[player.chest].item; } if (player.chest == -2) { context = 4; inv = player.bank.item; } if (player.chest == -3) { context = 4; inv = player.bank2.item; } if (player.chest == -4) { context = 4; inv = player.bank3.item; } if (player.chest == -5) { context = 4; inv = player.bank4.item; } Main.inventoryScale = 0.755f; if (Utils.FloatIntersect((float) Main.mouseX, (float) Main.mouseY, 0.0f, 0.0f, 73f, (float) Main.instance.invBottom, 560f * Main.inventoryScale, 224f * Main.inventoryScale) && !PlayerInput.IgnoreMouseInterface) player.mouseInterface = true; for (int index1 = 0; index1 < 10; ++index1) { for (int index2 = 0; index2 < 4; ++index2) { int num1 = (int) (73.0 + (double) (index1 * 56) * (double) Main.inventoryScale); int num2 = (int) ((double) Main.instance.invBottom + (double) (index2 * 56) * (double) Main.inventoryScale); int slot = index1 + index2 * 10; Color color = new Color(100, 100, 100, 100); if (Utils.FloatIntersect((float) Main.mouseX, (float) Main.mouseY, 0.0f, 0.0f, (float) num1, (float) num2, (float) TextureAssets.InventoryBack.Width() * Main.inventoryScale, (float) TextureAssets.InventoryBack.Height() * Main.inventoryScale) && !PlayerInput.IgnoreMouseInterface) { player.mouseInterface = true; ItemSlot.Handle(inv, context, slot); } ItemSlot.Draw(spriteBatch, inv, context, slot, new Vector2((float) num1, (float) num2)); } } } public static void LootAll() { GetItemSettings lootAllSettings = GetItemSettings.LootAllSettings; Player player = Main.player[Main.myPlayer]; if (player.chest > -1) { Chest chest = Main.chest[player.chest]; for (int index = 0; index < 40; ++index) { if (chest.item[index].type > 0) { chest.item[index].position = player.Center; chest.item[index] = player.GetItem(Main.myPlayer, chest.item[index], lootAllSettings); if (Main.netMode == 1) NetMessage.SendData(32, number: player.chest, number2: ((float) index)); } } } else if (player.chest == -3) { for (int index = 0; index < 40; ++index) { if (player.bank2.item[index].type > 0) { player.bank2.item[index].position = player.Center; player.bank2.item[index] = player.GetItem(Main.myPlayer, player.bank2.item[index], lootAllSettings); } } } else if (player.chest == -4) { for (int index = 0; index < 40; ++index) { if (player.bank3.item[index].type > 0) { player.bank3.item[index].position = player.Center; player.bank3.item[index] = player.GetItem(Main.myPlayer, player.bank3.item[index], lootAllSettings); } } } else if (player.chest == -5) { for (int index = 0; index < 40; ++index) { if (player.bank4.item[index].type > 0) { player.bank4.item[index].position = player.Center; player.bank4.item[index] = player.GetItem(Main.myPlayer, player.bank4.item[index], lootAllSettings); } } } else { for (int index = 0; index < 40; ++index) { if (player.bank.item[index].type > 0) { player.bank.item[index].position = player.Center; player.bank.item[index] = player.GetItem(Main.myPlayer, player.bank.item[index], lootAllSettings); } } } } public static void DepositAll() { Player player = Main.player[Main.myPlayer]; if (player.chest > -1) ChestUI.MoveCoins(player.inventory, Main.chest[player.chest].item); else if (player.chest == -3) ChestUI.MoveCoins(player.inventory, player.bank2.item); else if (player.chest == -4) ChestUI.MoveCoins(player.inventory, player.bank3.item); else if (player.chest == -5) ChestUI.MoveCoins(player.inventory, player.bank4.item); else ChestUI.MoveCoins(player.inventory, player.bank.item); for (int index1 = 49; index1 >= 10; --index1) { if (player.inventory[index1].stack > 0 && player.inventory[index1].type > 0 && !player.inventory[index1].favorited) { if (player.inventory[index1].maxStack > 1) { for (int index2 = 0; index2 < 40; ++index2) { if (player.chest > -1) { Chest chest = Main.chest[player.chest]; if (chest.item[index2].stack < chest.item[index2].maxStack && player.inventory[index1].IsTheSameAs(chest.item[index2])) { int num = player.inventory[index1].stack; if (player.inventory[index1].stack + chest.item[index2].stack > chest.item[index2].maxStack) num = chest.item[index2].maxStack - chest.item[index2].stack; player.inventory[index1].stack -= num; chest.item[index2].stack += num; SoundEngine.PlaySound(7); if (player.inventory[index1].stack <= 0) { player.inventory[index1].SetDefaults(); if (Main.netMode == 1) { NetMessage.SendData(32, number: player.chest, number2: ((float) index2)); break; } break; } if (chest.item[index2].type == 0) { chest.item[index2] = player.inventory[index1].Clone(); player.inventory[index1].SetDefaults(); } if (Main.netMode == 1) NetMessage.SendData(32, number: player.chest, number2: ((float) index2)); } } else if (player.chest == -3) { if (player.bank2.item[index2].stack < player.bank2.item[index2].maxStack && player.inventory[index1].IsTheSameAs(player.bank2.item[index2])) { int num = player.inventory[index1].stack; if (player.inventory[index1].stack + player.bank2.item[index2].stack > player.bank2.item[index2].maxStack) num = player.bank2.item[index2].maxStack - player.bank2.item[index2].stack; player.inventory[index1].stack -= num; player.bank2.item[index2].stack += num; SoundEngine.PlaySound(7); if (player.inventory[index1].stack <= 0) { player.inventory[index1].SetDefaults(); break; } if (player.bank2.item[index2].type == 0) { player.bank2.item[index2] = player.inventory[index1].Clone(); player.inventory[index1].SetDefaults(); } } } else if (player.chest == -4) { if (player.bank3.item[index2].stack < player.bank3.item[index2].maxStack && player.inventory[index1].IsTheSameAs(player.bank3.item[index2])) { int num = player.inventory[index1].stack; if (player.inventory[index1].stack + player.bank3.item[index2].stack > player.bank3.item[index2].maxStack) num = player.bank3.item[index2].maxStack - player.bank3.item[index2].stack; player.inventory[index1].stack -= num; player.bank3.item[index2].stack += num; SoundEngine.PlaySound(7); if (player.inventory[index1].stack <= 0) { player.inventory[index1].SetDefaults(); break; } if (player.bank3.item[index2].type == 0) { player.bank3.item[index2] = player.inventory[index1].Clone(); player.inventory[index1].SetDefaults(); } } } else if (player.chest == -5) { if (player.bank4.item[index2].stack < player.bank4.item[index2].maxStack && player.inventory[index1].IsTheSameAs(player.bank4.item[index2])) { int num = player.inventory[index1].stack; if (player.inventory[index1].stack + player.bank4.item[index2].stack > player.bank4.item[index2].maxStack) num = player.bank4.item[index2].maxStack - player.bank4.item[index2].stack; player.inventory[index1].stack -= num; player.bank4.item[index2].stack += num; SoundEngine.PlaySound(7); if (player.inventory[index1].stack <= 0) { player.inventory[index1].SetDefaults(); break; } if (player.bank4.item[index2].type == 0) { player.bank4.item[index2] = player.inventory[index1].Clone(); player.inventory[index1].SetDefaults(); } } } else if (player.bank.item[index2].stack < player.bank.item[index2].maxStack && player.inventory[index1].IsTheSameAs(player.bank.item[index2])) { int num = player.inventory[index1].stack; if (player.inventory[index1].stack + player.bank.item[index2].stack > player.bank.item[index2].maxStack) num = player.bank.item[index2].maxStack - player.bank.item[index2].stack; player.inventory[index1].stack -= num; player.bank.item[index2].stack += num; SoundEngine.PlaySound(7); if (player.inventory[index1].stack <= 0) { player.inventory[index1].SetDefaults(); break; } if (player.bank.item[index2].type == 0) { player.bank.item[index2] = player.inventory[index1].Clone(); player.inventory[index1].SetDefaults(); } } } } if (player.inventory[index1].stack > 0) { if (player.chest > -1) { for (int index3 = 0; index3 < 40; ++index3) { if (Main.chest[player.chest].item[index3].stack == 0) { SoundEngine.PlaySound(7); Main.chest[player.chest].item[index3] = player.inventory[index1].Clone(); player.inventory[index1].SetDefaults(); if (Main.netMode == 1) { NetMessage.SendData(32, number: player.chest, number2: ((float) index3)); break; } break; } } } else if (player.chest == -3) { for (int index4 = 0; index4 < 40; ++index4) { if (player.bank2.item[index4].stack == 0) { SoundEngine.PlaySound(7); player.bank2.item[index4] = player.inventory[index1].Clone(); player.inventory[index1].SetDefaults(); break; } } } else if (player.chest == -4) { for (int index5 = 0; index5 < 40; ++index5) { if (player.bank3.item[index5].stack == 0) { SoundEngine.PlaySound(7); player.bank3.item[index5] = player.inventory[index1].Clone(); player.inventory[index1].SetDefaults(); break; } } } else if (player.chest == -5) { for (int index6 = 0; index6 < 40; ++index6) { if (player.bank4.item[index6].stack == 0) { SoundEngine.PlaySound(7); player.bank4.item[index6] = player.inventory[index1].Clone(); player.inventory[index1].SetDefaults(); break; } } } else { for (int index7 = 0; index7 < 40; ++index7) { if (player.bank.item[index7].stack == 0) { SoundEngine.PlaySound(7); player.bank.item[index7] = player.inventory[index1].Clone(); player.inventory[index1].SetDefaults(); break; } } } } } } } public static void QuickStack() { Player player = Main.player[Main.myPlayer]; if (player.chest == -5) ChestUI.MoveCoins(player.inventory, player.bank4.item); else if (player.chest == -4) ChestUI.MoveCoins(player.inventory, player.bank3.item); else if (player.chest == -3) ChestUI.MoveCoins(player.inventory, player.bank2.item); else if (player.chest == -2) ChestUI.MoveCoins(player.inventory, player.bank.item); Item[] inventory = player.inventory; Item[] objArray = player.bank.item; if (player.chest > -1) objArray = Main.chest[player.chest].item; else if (player.chest == -2) objArray = player.bank.item; else if (player.chest == -3) objArray = player.bank2.item; else if (player.chest == -4) objArray = player.bank3.item; else if (player.chest == -5) objArray = player.bank4.item; List intList1 = new List(); List intList2 = new List(); List intList3 = new List(); Dictionary dictionary = new Dictionary(); List intList4 = new List(); bool[] flagArray = new bool[objArray.Length]; for (int index = 0; index < 40; ++index) { if (objArray[index].type > 0 && objArray[index].stack > 0 && (objArray[index].type < 71 || objArray[index].type > 74)) { intList2.Add(index); intList1.Add(objArray[index].netID); } if (objArray[index].type == 0 || objArray[index].stack <= 0) intList3.Add(index); } int num1 = 50; if (player.chest <= -2) num1 += 4; for (int key = 10; key < num1; ++key) { if (intList1.Contains(inventory[key].netID) && !inventory[key].favorited) dictionary.Add(key, inventory[key].netID); } for (int index1 = 0; index1 < intList2.Count; ++index1) { int index2 = intList2[index1]; int netId = objArray[index2].netID; foreach (KeyValuePair keyValuePair in dictionary) { if (keyValuePair.Value == netId && inventory[keyValuePair.Key].netID == netId) { int num2 = inventory[keyValuePair.Key].stack; int num3 = objArray[index2].maxStack - objArray[index2].stack; if (num3 != 0) { if (num2 > num3) num2 = num3; SoundEngine.PlaySound(7); objArray[index2].stack += num2; inventory[keyValuePair.Key].stack -= num2; if (inventory[keyValuePair.Key].stack == 0) inventory[keyValuePair.Key].SetDefaults(); flagArray[index2] = true; } else break; } } } foreach (KeyValuePair keyValuePair in dictionary) { if (inventory[keyValuePair.Key].stack == 0) intList4.Add(keyValuePair.Key); } foreach (int key in intList4) dictionary.Remove(key); for (int index3 = 0; index3 < intList3.Count; ++index3) { int index4 = intList3[index3]; bool flag = true; int netId = objArray[index4].netID; if (netId < 71 || netId > 74) { foreach (KeyValuePair keyValuePair in dictionary) { if (keyValuePair.Value == netId && inventory[keyValuePair.Key].netID == netId || flag && inventory[keyValuePair.Key].stack > 0) { SoundEngine.PlaySound(7); if (flag) { netId = keyValuePair.Value; objArray[index4] = inventory[keyValuePair.Key]; inventory[keyValuePair.Key] = new Item(); } else { int num4 = inventory[keyValuePair.Key].stack; int num5 = objArray[index4].maxStack - objArray[index4].stack; if (num5 != 0) { if (num4 > num5) num4 = num5; objArray[index4].stack += num4; inventory[keyValuePair.Key].stack -= num4; if (inventory[keyValuePair.Key].stack == 0) inventory[keyValuePair.Key] = new Item(); } else break; } flagArray[index4] = true; flag = false; } } } } if (Main.netMode == 1 && player.chest >= 0) { for (int index = 0; index < flagArray.Length; ++index) NetMessage.SendData(32, number: player.chest, number2: ((float) index)); } intList1.Clear(); intList2.Clear(); intList3.Clear(); dictionary.Clear(); intList4.Clear(); } public static void RenameChest() { Player player = Main.player[Main.myPlayer]; if (!Main.editChest) IngameFancyUI.OpenVirtualKeyboard(2); else ChestUI.RenameChestSubmit(player); } public static void RenameChestSubmit(Player player) { SoundEngine.PlaySound(12); Main.editChest = false; int chest = player.chest; if (chest < 0) return; if (Main.npcChatText == Main.defaultChestName) Main.npcChatText = ""; if (!(Main.chest[chest].name != Main.npcChatText)) return; Main.chest[chest].name = Main.npcChatText; if (Main.netMode != 1) return; player.editedChestName = true; } public static void RenameChestCancel() { SoundEngine.PlaySound(12); Main.editChest = false; Main.npcChatText = string.Empty; Main.blockKey = Keys.Escape.ToString(); } public static void Restock() { Player player = Main.player[Main.myPlayer]; Item[] inventory = player.inventory; Item[] objArray = player.bank.item; if (player.chest > -1) objArray = Main.chest[player.chest].item; else if (player.chest == -2) objArray = player.bank.item; else if (player.chest == -3) objArray = player.bank2.item; else if (player.chest == -4) objArray = player.bank3.item; else if (player.chest == -5) objArray = player.bank4.item; HashSet intSet = new HashSet(); List intList1 = new List(); List intList2 = new List(); for (int index = 57; index >= 0; --index) { if ((index < 50 || index >= 54) && (inventory[index].type < 71 || inventory[index].type > 74)) { if (inventory[index].stack > 0 && inventory[index].maxStack > 1 && inventory[index].prefix == (byte) 0) { intSet.Add(inventory[index].netID); if (inventory[index].stack < inventory[index].maxStack) intList1.Add(index); } else if (inventory[index].stack == 0 || inventory[index].netID == 0 || inventory[index].type == 0) intList2.Add(index); } } bool flag1 = false; for (int index1 = 0; index1 < objArray.Length; ++index1) { if (objArray[index1].stack >= 1 && objArray[index1].prefix == (byte) 0 && intSet.Contains(objArray[index1].netID)) { bool flag2 = false; for (int index2 = 0; index2 < intList1.Count; ++index2) { int slot = intList1[index2]; int context = 0; if (slot >= 50) context = 2; if (inventory[slot].netID == objArray[index1].netID && ItemSlot.PickItemMovementAction(inventory, context, slot, objArray[index1]) != -1) { int num = objArray[index1].stack; if (inventory[slot].maxStack - inventory[slot].stack < num) num = inventory[slot].maxStack - inventory[slot].stack; inventory[slot].stack += num; objArray[index1].stack -= num; flag1 = true; if (inventory[slot].stack == inventory[slot].maxStack) { if (Main.netMode == 1 && Main.player[Main.myPlayer].chest > -1) NetMessage.SendData(32, number: Main.player[Main.myPlayer].chest, number2: ((float) index1)); intList1.RemoveAt(index2); --index2; } if (objArray[index1].stack == 0) { objArray[index1] = new Item(); flag2 = true; if (Main.netMode == 1 && Main.player[Main.myPlayer].chest > -1) { NetMessage.SendData(32, number: Main.player[Main.myPlayer].chest, number2: ((float) index1)); break; } break; } } } if (!flag2 && intList2.Count > 0 && objArray[index1].ammo != 0) { for (int index3 = 0; index3 < intList2.Count; ++index3) { int context = 0; if (intList2[index3] >= 50) context = 2; if (ItemSlot.PickItemMovementAction(inventory, context, intList2[index3], objArray[index1]) != -1) { Utils.Swap(ref inventory[intList2[index3]], ref objArray[index1]); if (Main.netMode == 1 && Main.player[Main.myPlayer].chest > -1) NetMessage.SendData(32, number: Main.player[Main.myPlayer].chest, number2: ((float) index1)); intList1.Add(intList2[index3]); intList2.RemoveAt(index3); flag1 = true; break; } } } } } if (!flag1) return; SoundEngine.PlaySound(7); } public static void MoveCoins(Item[] pInv, Item[] cInv) { bool flag1 = false; int[] numArray1 = new int[4]; List intList1 = new List(); List intList2 = new List(); bool flag2 = false; int[] numArray2 = new int[40]; for (int index = 0; index < cInv.Length; ++index) { numArray2[index] = -1; if (cInv[index].stack < 1 || cInv[index].type < 1) { intList2.Add(index); cInv[index] = new Item(); } if (cInv[index] != null && cInv[index].stack > 0) { int num = 0; if (cInv[index].type == 71) num = 1; if (cInv[index].type == 72) num = 2; if (cInv[index].type == 73) num = 3; if (cInv[index].type == 74) num = 4; numArray2[index] = num - 1; if (num > 0) { numArray1[num - 1] += cInv[index].stack; intList2.Add(index); cInv[index] = new Item(); flag2 = true; } } } if (!flag2) return; for (int index = 0; index < pInv.Length; ++index) { if (index != 58 && pInv[index] != null && pInv[index].stack > 0) { int num = 0; if (pInv[index].type == 71) num = 1; if (pInv[index].type == 72) num = 2; if (pInv[index].type == 73) num = 3; if (pInv[index].type == 74) num = 4; if (num > 0) { flag1 = true; numArray1[num - 1] += pInv[index].stack; intList1.Add(index); pInv[index] = new Item(); } } } for (int index = 0; index < 3; ++index) { while (numArray1[index] >= 100) { numArray1[index] -= 100; ++numArray1[index + 1]; } } for (int index1 = 0; index1 < 40; ++index1) { if (numArray2[index1] >= 0 && cInv[index1].type == 0) { int index2 = index1; int index3 = numArray2[index1]; if (numArray1[index3] > 0) { cInv[index2].SetDefaults(71 + index3); cInv[index2].stack = numArray1[index3]; if (cInv[index2].stack > cInv[index2].maxStack) cInv[index2].stack = cInv[index2].maxStack; numArray1[index3] -= cInv[index2].stack; numArray2[index1] = -1; } if (Main.netMode == 1 && Main.player[Main.myPlayer].chest > -1) NetMessage.SendData(32, number: Main.player[Main.myPlayer].chest, number2: ((float) index2)); intList2.Remove(index2); } } for (int index4 = 0; index4 < 40; ++index4) { if (numArray2[index4] >= 0 && cInv[index4].type == 0) { int index5 = index4; int index6 = 3; while (index6 >= 0) { if (numArray1[index6] > 0) { cInv[index5].SetDefaults(71 + index6); cInv[index5].stack = numArray1[index6]; if (cInv[index5].stack > cInv[index5].maxStack) cInv[index5].stack = cInv[index5].maxStack; numArray1[index6] -= cInv[index5].stack; numArray2[index4] = -1; break; } if (numArray1[index6] == 0) --index6; } if (Main.netMode == 1 && Main.player[Main.myPlayer].chest > -1) NetMessage.SendData(32, number: Main.player[Main.myPlayer].chest, number2: ((float) index5)); intList2.Remove(index5); } } while (intList2.Count > 0) { int index7 = intList2[0]; int index8 = 3; while (index8 >= 0) { if (numArray1[index8] > 0) { cInv[index7].SetDefaults(71 + index8); cInv[index7].stack = numArray1[index8]; if (cInv[index7].stack > cInv[index7].maxStack) cInv[index7].stack = cInv[index7].maxStack; numArray1[index8] -= cInv[index7].stack; break; } if (numArray1[index8] == 0) --index8; } if (Main.netMode == 1 && Main.player[Main.myPlayer].chest > -1) NetMessage.SendData(32, number: Main.player[Main.myPlayer].chest, number2: ((float) intList2[0])); intList2.RemoveAt(0); } int index9 = 3; while (index9 >= 0 && intList1.Count > 0) { int index10 = intList1[0]; if (numArray1[index9] > 0) { pInv[index10].SetDefaults(71 + index9); pInv[index10].stack = numArray1[index9]; if (pInv[index10].stack > pInv[index10].maxStack) pInv[index10].stack = pInv[index10].maxStack; numArray1[index9] -= pInv[index10].stack; flag1 = false; intList1.RemoveAt(0); } if (numArray1[index9] == 0) --index9; } if (!flag1) return; SoundEngine.PlaySound(7); } public static bool TryPlacingInChest(Item I, bool justCheck) { bool sync; Item[] chestinv; ChestUI.GetContainerUsageInfo(out sync, out chestinv); if (ChestUI.IsBlockedFromTransferIntoChest(I, chestinv)) return false; Player player = Main.player[Main.myPlayer]; bool flag = false; if (I.maxStack > 1) { for (int index = 0; index < 40; ++index) { if (chestinv[index].stack < chestinv[index].maxStack && I.IsTheSameAs(chestinv[index])) { int num = I.stack; if (I.stack + chestinv[index].stack > chestinv[index].maxStack) num = chestinv[index].maxStack - chestinv[index].stack; if (justCheck) { flag = flag || num > 0; break; } I.stack -= num; chestinv[index].stack += num; SoundEngine.PlaySound(7); if (I.stack <= 0) { I.SetDefaults(); if (sync) { NetMessage.SendData(32, number: player.chest, number2: ((float) index)); break; } break; } if (chestinv[index].type == 0) { chestinv[index] = I.Clone(); I.SetDefaults(); } if (sync) NetMessage.SendData(32, number: player.chest, number2: ((float) index)); } } } if (I.stack > 0) { for (int index = 0; index < 40; ++index) { if (chestinv[index].stack == 0) { if (justCheck) { flag = true; break; } SoundEngine.PlaySound(7); chestinv[index] = I.Clone(); I.SetDefaults(); if (sync) { NetMessage.SendData(32, number: player.chest, number2: ((float) index)); break; } break; } } } return flag; } public static void GetContainerUsageInfo(out bool sync, out Item[] chestinv) { sync = false; Player player = Main.player[Main.myPlayer]; chestinv = player.bank.item; if (player.chest > -1) { chestinv = Main.chest[player.chest].item; sync = Main.netMode == 1; } else if (player.chest == -2) chestinv = player.bank.item; else if (player.chest == -3) chestinv = player.bank2.item; else if (player.chest == -4) { chestinv = player.bank3.item; } else { if (player.chest != -5) return; chestinv = player.bank4.item; } } public static bool IsBlockedFromTransferIntoChest(Item item, Item[] container) => item.type == 3213 && item.favorited && container == Main.LocalPlayer.bank.item || item.type == 4131 && item.favorited && container == Main.LocalPlayer.bank4.item; public static bool TryPlacingInPlayer(int slot, bool justCheck) { bool flag1 = false; Player player = Main.player[Main.myPlayer]; Item[] inventory = player.inventory; Item[] objArray = player.bank.item; if (player.chest > -1) { objArray = Main.chest[player.chest].item; flag1 = Main.netMode == 1; } else if (player.chest == -2) objArray = player.bank.item; else if (player.chest == -3) objArray = player.bank2.item; else if (player.chest == -4) objArray = player.bank3.item; else if (player.chest == -5) objArray = player.bank4.item; Item obj = objArray[slot]; bool flag2 = false; if (obj.maxStack > 1) { for (int index = 49; index >= 0; --index) { if (inventory[index].stack < inventory[index].maxStack && obj.IsTheSameAs(inventory[index])) { int num = obj.stack; if (obj.stack + inventory[index].stack > inventory[index].maxStack) num = inventory[index].maxStack - inventory[index].stack; if (justCheck) { flag2 = flag2 || num > 0; break; } obj.stack -= num; inventory[index].stack += num; SoundEngine.PlaySound(7); if (obj.stack <= 0) { obj.SetDefaults(); if (flag1) { NetMessage.SendData(32, number: player.chest, number2: ((float) index)); break; } break; } if (inventory[index].type == 0) { inventory[index] = obj.Clone(); obj.SetDefaults(); } if (flag1) NetMessage.SendData(32, number: player.chest, number2: ((float) index)); } } } if (obj.stack > 0) { for (int index = 49; index >= 0; --index) { if (inventory[index].stack == 0) { if (justCheck) { flag2 = true; break; } SoundEngine.PlaySound(7); inventory[index] = obj.Clone(); obj.SetDefaults(); if (flag1) { NetMessage.SendData(32, number: player.chest, number2: ((float) index)); break; } break; } } } return flag2; } public class ButtonID { public const int LootAll = 0; public const int DepositAll = 1; public const int QuickStack = 2; public const int Restock = 3; public const int Sort = 4; public const int RenameChest = 5; public const int RenameChestCancel = 6; public const int ToggleVacuum = 7; public const int Count = 7; } } }