internal void smartQuickStack() { if (player.chest != -1) { // check this chest for cateroies, then stack all items that fit those categories into this chest. Item[] items = player.bank.item; if (player.chest > -1) { items = Main.chest[player.chest].item; } else if (player.chest == -2) { items = player.bank.item; } else if (player.chest == -3) { items = player.bank2.item; } else if (player.chest == -4) { items = player.bank3.item; } bool itemMoved = false; List<ItemSorting.ItemSortingLayer> layersInThisChest = ItemSorting.GetPassingLayers(items); for (int i = 0; i < 50; i++) { Item item = player.inventory[i]; if (item.type == ItemID.Count || item.favorited || (item.type >= 71 && item.type <= 74)) continue; foreach (var layer in ItemSorting.layerList) { if (layer.Pass(item)) { if (layersInThisChest.Contains(layer)) { itemMoved |= ChestUI.TryPlacingInChest(item, false); break; } else { break; } } } } if (itemMoved) { Main.PlaySound(7, -1, -1, 1, 1f, 0f); } } else { //TODO smartQuickStackAllChests(); Recipe.FindRecipes(); } }
internal void smartQuickStackAllChests() { if (player.IsStackingItems()) { return; } if (Main.netMode == 1) { Main.NewText("Smart Quick Stack to Nearby Chests not implemented in Multiplayer yet"); //TODO return; } bool itemMoved = false; for (int chestIndex = 0; chestIndex < 1000; chestIndex++) { if (Main.chest[chestIndex] != null && /*!Chest.IsPlayerInChest(i) &&*/ !Chest.isLocked(Main.chest[chestIndex].x, Main.chest[chestIndex].y)) { Vector2 distanceToPlayer = new Vector2((float)(Main.chest[chestIndex].x * 16 + 16), (float)(Main.chest[chestIndex].y * 16 + 16)); if ((distanceToPlayer - player.Center).Length() < 200f) { player.chest = chestIndex; Item[] items = Main.chest[chestIndex].item; List <ItemSorting.ItemSortingLayer> layersInThisChest = ItemSorting.GetPassingLayers(items); for (int i = 0; i < 50; i++) { Item item = player.inventory[i]; if (item.type == ItemID.Count || item.favorited || (item.type >= 71 && item.type <= 74)) { continue; } foreach (var layer in ItemSorting.layerList) { if (layer.Pass(item)) { if (layersInThisChest.Contains(layer)) { itemMoved |= ChestUI.TryPlacingInChest(item, false); break; } else { break; } } } } } } } if (itemMoved) { Main.PlaySound(7, -1, -1, 1, 1f, 0f); } player.chest = -1; }
private void ItemSlot_OverrideHover(On.Terraria.UI.ItemSlot.orig_OverrideHover orig, Item[] inv, int context, int slot) { Item item = inv[slot]; if (ItemSlot.ShiftInUse && item.type > 0 && item.stack > 0 && !inv[slot].favorited) { switch (context) { case 0: case 1: case 2: if (Main.npcShop > 0 && !item.favorited) { Main.cursorOverride = 10; } else if (Main.player[Main.myPlayer].chest != -1) { if (ChestUI.TryPlacingInChest(item, true)) { Main.cursorOverride = 9; } } else { Main.cursorOverride = 6; } break; case 3: case 4: if (Main.player[Main.myPlayer].ItemSpace(item)) { Main.cursorOverride = 8; } break; case 5: case 8: case 9: case 10: case 11: case 12: case 16: case 17: case 18: case 19: case 20: if (Main.player[Main.myPlayer].ItemSpace(inv[slot])) { Main.cursorOverride = 7; } break; } } //Check if the slot has an item in it and the favorite key is down and if the item in the slot can actually be favorited if (item.IsAir && Main.keyState.IsKeyDown(Main.FavoriteKey) && CanFavoriteAt[context]) { //Draw favorite cursor Main.cursorOverride = 3; } if (Main.keyState.IsKeyDown(Main.FavoriteKey) && CanFavoriteAt[context]) { if (item.type > 0 && item.stack > 0 && Main.drawingPlayerChat) { Main.cursorOverride = 2; return; } if (item.type > 0 && item.stack > 0) { Main.cursorOverride = 3; } } }
private static void ItemSlot_OverrideHover(On.Terraria.UI.ItemSlot.orig_OverrideHover orig, Terraria.Item[] inv, int context, int slot) { Item item = inv[slot]; if (ItemSlot.ShiftInUse && item.type > 0 && item.stack > 0 && !inv[slot].favorited) { switch (context) { case 0: case 1: case 2: if (Main.player[Main.myPlayer].chest != -1) { if (ChestUI.TryPlacingInChest(item, true)) { Main.cursorOverride = 9; } } break; case 3: case 4: if (Main.player[Main.myPlayer].ItemSpace(item)) { Main.cursorOverride = 8; } break; case 5: case 8: case 9: case 10: case 11: case 12: case 16: case 17: case 18: case 19: case 20: if (Main.player[Main.myPlayer].ItemSpace(inv[slot])) { Main.cursorOverride = 7; } break; } } if (IsCtrlPressed() && item.type > 0 && item.stack > 0 && !inv[slot].favorited) { if (context < 3) { if (Main.npcShop > 0 && !item.favorited) { Main.cursorOverride = 10; } else { Main.cursorOverride = 6; } } } if (Main.keyState.IsKeyDown(Main.FavoriteKey) && context < 3) { if (item.type > 0 && item.stack > 0 && Main.drawingPlayerChat) { Main.cursorOverride = 2; return; } if (item.type > 0 && item.stack > 0) { Main.cursorOverride = 3; } } }
private bool ItemSlot_OverrideLeftClick(On.Terraria.UI.ItemSlot.orig_OverrideLeftClick orig, Item[] inv, int context, int slot) { Item item = inv[slot]; //Check if the slot has no item in it and the favorite key is down and if the item in the slot can actually be favorited if (item.IsAir && Main.keyState.IsKeyDown(Main.FavoriteKey) && CanFavoriteAt[context]) { //If true, add lock to inventory slot item.SetDefaults(ModContent.ItemType <ItemLock>()); //Favorite lock item item.favorited = true; //Play sound Main.PlaySound(SoundID.Unlock); return(true); } if (Main.cursorOverride == 2) { if (ChatManager.AddChatText(Main.fontMouseText, ItemTagHandler.GenerateTag(item), Vector2.One)) { Main.PlaySound(12, -1, -1, 1, 1f, 0f); } return(true); } if (Main.cursorOverride == 3) { if (!CanFavoriteAt[context]) { return(false); } item.favorited = !item.favorited; Main.PlaySound(12, -1, -1, 1, 1f, 0f); return(true); } else { if (Main.cursorOverride == 7) { inv[slot] = Main.player[Main.myPlayer].GetItem(Main.myPlayer, inv[slot], false, true); Main.PlaySound(12, -1, -1, 1, 1f, 0f); return(true); } if (Main.cursorOverride == 8) { inv[slot] = Main.player[Main.myPlayer].GetItem(Main.myPlayer, inv[slot], false, true); if (Main.player[Main.myPlayer].chest > -1) { NetMessage.SendData(32, -1, -1, null, Main.player[Main.myPlayer].chest, slot, 0f, 0f, 0, 0, 0); } return(true); } if (Main.cursorOverride == 9) { ChestUI.TryPlacingInChest(inv[slot], false); return(true); } return(false); } }