/// <summary> /// Remove the specified item in a thread-safe manner. /// </summary> /// <param name="itemToRemove"></param> public void AppendRemoveItem(Item itemToRemove) { lock (lockThis) { if (itemToRemove.CarryingInventory != null) { Player player = itemToRemove.CarryingInventory; byte index = player.GetInventoryIndex(itemToRemove); player.RemoveInventoryItem(index); } else if (itemToRemove.CurrentPosition != null) { Position pos = itemToRemove.CurrentPosition; Tile mapTile = gameMap.GetTile(pos); byte stackpos = mapTile.GetStackPosition(itemToRemove); mapTile.RemoveThing(itemToRemove); ThingSet tSet = gameMap.GetThingsInVicinity(pos); foreach (Thing thing in tSet.GetThings()) { thing.RemoveThing(pos, stackpos); } } else if (itemToRemove.CurrentPosition == null) //In container { Container container = itemToRemove.Parent; container.RemoveItem(itemToRemove); } } }
/// <summary> /// Move a thing from container. /// </summary> private void MoveItemFromContainer() { int containerIndex = posFrom.y - CONTAINER_HEADER; Container container = player.GetContainerByIndex(containerIndex); List <Player> affected = container.GetViewers(); if (itemToMove.IsOfType(Constants.TYPE_STACKABLE) && itemToMove.Count != count) { itemToMove.Count -= count; itemToMove = Item.CreateItem(itemToMove.ItemID); itemToMove.Count = count; container.UpdateContainerToViewers(); } else { container.RemoveItem(itemToMove); } }