Exemplo n.º 1
0
        //container commands
        public static void Put(User.User player, List <string> commands)
        {
            //this command is used only for putting an Item in the root inventory of a player into a bag.
            //If an item needs to go from a bag to the root inventory level player should use the GET command instead.

            int    itemPosition      = 1;
            int    containerPosition = 1;
            string itemName          = "";
            string containerName     = "";

            //this allows players to use either IN or INTO
            int commandIndex = 0;

            foreach (string word in commands)
            {
                if (string.Equals(word, "in", StringComparison.InvariantCultureIgnoreCase))
                {
                    commands[commandIndex] = "into";
                    break;
                }
                commandIndex++;
            }

            string location;

            if (string.Equals(commands[commands.Count - 1], "inventory", StringComparison.InvariantCultureIgnoreCase))
            {
                location = null;
                commands.RemoveAt(commands.Count - 1); //get rid of "inventory" se we can parse an index specifier if there is one
            }
            else
            {
                location = player.Player.Location;
            }

            List <string> commandAltered = ParseItemPositions(commands, "into", out itemPosition, out itemName);

            ParseContainerPosition(commandAltered, "", out containerPosition, out containerName);

            Items.Iitem retrievedItem = null;
            Items.Iitem containerItem = null;

            //using a recursive method we will dig down into each sub container looking for the appropriate container
            if (!string.IsNullOrEmpty(location))
            {
                TraverseItems(player, containerName.ToString().Trim(), itemName.ToString().Trim(), containerPosition, itemPosition, out retrievedItem, out containerItem);

                //player is an idiot and probably wanted to put it in his inventory but didn't specify it so let's check there as well
                if (containerItem == null)
                {
                    foreach (Items.Iitem tempContainer in player.Player.Inventory.GetInventoryAsItemList())
                    {
                        //Items.Iitem tempContainer = Items.Items.GetByID(id);
                        containerItem = KeepOpening(containerName.CamelCaseString(), tempContainer, containerPosition);
                        if (string.Equals(containerItem.Name, containerName.CamelCaseString(), StringComparison.InvariantCultureIgnoreCase))
                        {
                            break;
                        }
                    }
                }
            }
            else  //player specified it is in his inventory
            {
                foreach (string id in player.Player.Inventory.GetInventoryList())
                {
                    Items.Iitem tempContainer = Items.Items.GetByID(id);
                    containerItem = KeepOpening(containerName.CamelCaseString(), tempContainer, containerPosition);
                    if (string.Equals(containerItem.Name, containerName.CamelCaseString(), StringComparison.InvariantCultureIgnoreCase))
                    {
                        break;
                    }
                }
            }

            bool stored = false;

            retrievedItem = player.Player.Inventory.GetInventoryAsItemList().Where(i => i.Name == itemName).SingleOrDefault();

            if (containerItem != null && retrievedItem != null)
            {
                retrievedItem.Location = containerItem.Location;
                retrievedItem.Owner    = containerItem.Id.ToString();
                retrievedItem.Save();
                Items.Icontainer container = containerItem as Items.Icontainer;
                stored = container.StoreItem(retrievedItem.Id.ToString());
            }


            string msg = null;

            if (!stored)
            {
                msg = "Could not put " + itemName.ToString().Trim().ToLower() + " inside the " + containerName.ToString().Trim().ToLower() + ".";
            }
            else
            {
                msg = "You place " + itemName.ToString().Trim().ToLower() + " inside the " + containerName.ToString().Trim().ToLower() + ".";
            }

            player.MessageHandler(msg);
        }