public static void HandleExchangeObjectModifyPricedMessage(WorldClient client, ExchangeObjectModifyPricedMessage message)
 {
     if (!client.Character.IsBusy() && message.price > 0)
     {
         MerchantItem merchantItem = client.Character.MerchantBag.TryGetItem((int)message.objectUID);
         if (merchantItem != null)
         {
             merchantItem.Price = (uint)message.price;
             if ((long)message.quantity == (long)((ulong)merchantItem.Stack) || message.quantity == 0)
             {
                 InventoryHandler.SendExchangeShopStockMovementUpdatedMessage(client, merchantItem);
             }
             else
             {
                 if ((long)message.quantity < (long)((ulong)merchantItem.Stack))
                 {
                     client.Character.MerchantBag.MoveToInventory(merchantItem, (uint)((ulong)merchantItem.Stack - (ulong)((long)message.quantity)));
                 }
                 else
                 {
                     BasePlayerItem basePlayerItem = client.Character.Inventory.TryGetItem(merchantItem.Template);
                     if (basePlayerItem != null)
                     {
                         client.Character.Inventory.MoveToMerchantBag(basePlayerItem, (uint)((long)message.quantity - (long)((ulong)merchantItem.Stack)), (uint)message.price);
                     }
                 }
             }
         }
     }
 }
        public static void HandleExchangePlayerRequestMessage(WorldClient client, ExchangePlayerRequestMessage message)
        {
            ExchangeTypeEnum exchangeType = (ExchangeTypeEnum)message.exchangeType;

            if (exchangeType != ExchangeTypeEnum.PLAYER_TRADE)
            {
                InventoryHandler.SendExchangeErrorMessage(client, ExchangeErrorEnum.REQUEST_IMPOSSIBLE);
            }
            else
            {
                Character character = Singleton <World> .Instance.GetCharacter((int)message.target);

                if (character == null)
                {
                    InventoryHandler.SendExchangeErrorMessage(client, ExchangeErrorEnum.BID_SEARCH_ERROR);
                }
                else
                {
                    if (character.Map.Id != client.Character.Map.Id)
                    {
                        InventoryHandler.SendExchangeErrorMessage(client, ExchangeErrorEnum.REQUEST_CHARACTER_TOOL_TOO_FAR);
                    }
                    else
                    {
                        if (character.IsInRequest() || character.IsTrading())
                        {
                            InventoryHandler.SendExchangeErrorMessage(client, ExchangeErrorEnum.REQUEST_CHARACTER_OCCUPIED);
                        }
                        else
                        {
                            if (character.IsAway)
                            {
                                InventoryHandler.SendExchangeErrorMessage(client, ExchangeErrorEnum.REQUEST_CHARACTER_OCCUPIED);
                            }
                            else
                            {
                                if (!client.Character.Map.AllowExchangesBetweenPlayers)
                                {
                                    InventoryHandler.SendExchangeErrorMessage(client, ExchangeErrorEnum.REQUEST_IMPOSSIBLE);
                                }
                                else
                                {
                                    PlayerTradeRequest playerTradeRequest = new PlayerTradeRequest(client.Character, character);
                                    client.Character.OpenRequestBox(playerTradeRequest);
                                    character.OpenRequestBox(playerTradeRequest);
                                    playerTradeRequest.Open();
                                }
                            }
                        }
                    }
                }
            }
        }
 public static void HandleExchangeRequestOnShopStockMessage(WorldClient client, ExchangeRequestOnShopStockMessage message)
 {
     InventoryHandler.SendExchangeShopStockStartedMessage(client, client.Character.MerchantBag);
 }