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