Esempio n. 1
0
 /// <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);
         }
     }
 }
Esempio n. 2
0
        /// <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);
            }
        }