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;
        }
示例#3
0
        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;
                }
            }
        }
示例#4
0
        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;
                }
            }
        }
示例#5
0
        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);
            }
        }