public void PutItem(PutPacket putPacket)
 {
     lock (Session.Character.Inventory)
     {
         var invitem =
             Session.Character.Inventory.LoadBySlotAndType <IItemInstance>(putPacket.Slot, putPacket.PocketType);
         if ((invitem?.Item.IsDroppable ?? false) && !Session.Character.InExchangeOrShop)
         {
             if (putPacket.Amount > 0 && putPacket.Amount <= _worldConfiguration.MaxItemAmount)
             {
                 if (Session.Character.MapInstance.MapItems.Count < 200)
                 {
                     var droppedItem =
                         Session.Character.MapInstance.PutItem(putPacket.Amount, invitem, Session);
                     if (droppedItem == null)
                     {
                         Session.SendPacket(new MsgPacket
                         {
                             Message = Language.Instance.GetMessageFromKey(LanguageKey.ITEM_NOT_DROPPABLE_HERE,
                                                                           Session.Account.Language),
                             Type = 0
                         });
                         return;
                     }
                     invitem = Session.Character.Inventory.LoadBySlotAndType <IItemInstance>(putPacket.Slot, putPacket.PocketType);
                     Session.SendPacket(invitem.GeneratePocketChange(putPacket.PocketType, putPacket.Slot));
                     Session.Character.MapInstance.Sessions.SendPacket(droppedItem.GenerateDrop());
                 }
                 else
                 {
                     Session.SendPacket(new MsgPacket
                     {
                         Message = Language.Instance.GetMessageFromKey(LanguageKey.DROP_MAP_FULL,
                                                                       Session.Account.Language),
                         Type = 0
                     });
                 }
             }
             else
             {
                 Session.SendPacket(new MsgPacket
                 {
                     Message = Language.Instance.GetMessageFromKey(LanguageKey.BAD_DROP_AMOUNT,
                                                                   Session.Account.Language),
                     Type = 0
                 });
             }
         }
         else
         {
             Session.SendPacket(new MsgPacket
             {
                 Message = Language.Instance.GetMessageFromKey(LanguageKey.ITEM_NOT_DROPPABLE,
                                                               Session.Account.Language),
                 Type = 0
             });
         }
     }
 }
        public void PutItem(PutPacket putPacket)
        {
            lock (Session.Character.Inventory)
            {
                var invitem = Session.Character.Inventory.LoadBySlotAndType <ItemInstance>(putPacket.Slot, putPacket.PocketType);
                if (invitem != null && invitem.Item.IsDroppable && invitem.Item.IsTradable && !Session.Character.InExchangeOrTrade)
                {
                    if (putPacket.Amount > 0 && putPacket.Amount <= _worldConfiguration.MaxItemAmount)
                    {
                        if (Session.Character.MapInstance.DroppedList.Count < 200)
                        {
                            var droppedItem = Session.Character.MapInstance.PutItem(putPacket.PocketType, putPacket.Slot, putPacket.Amount, ref invitem, Session);
                            if (droppedItem == null)
                            {
                                Session.SendPacket(new MsgPacket()
                                {
                                    Message = Language.Instance.GetMessageFromKey(LanguageKey.ITEM_NOT_DROPPABLE_HERE, Session.Account.Language), Type = 0
                                });
                                return;
                            }

                            if (droppedItem.Amount == 0)
                            {
                                Session.Character.Inventory.DeleteFromTypeAndSlot(invitem.Type, invitem.Slot);
                            }

                            Session.SendPacket(invitem.GeneratePocketChange(invitem.Type, invitem.Slot));

                            Session.Character.MapInstance.Broadcast(droppedItem.GenerateDrop());
                        }
                        else
                        {
                            Session.SendPacket(new MsgPacket()
                            {
                                Message = Language.Instance.GetMessageFromKey(LanguageKey.DROP_MAP_FULL, Session.Account.Language), Type = 0
                            });
                        }
                    }
                    else
                    {
                        Session.SendPacket(new MsgPacket()
                        {
                            Message = Language.Instance.GetMessageFromKey(LanguageKey.BAD_DROP_AMOUNT, Session.Account.Language), Type = 0
                        });
                    }
                }
                else
                {
                    Session.SendPacket(new MsgPacket()
                    {
                        Message = Language.Instance.GetMessageFromKey(LanguageKey.ITEM_NOT_DROPPABLE, Session.Account.Language), Type = 0
                    });
                }
            }
        }