//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); }