Ejemplo n.º 1
0
 /// <summary>
 /// Adds an item to the tradewindow
 /// </summary>
 /// <param name="itemForTrade">InventoryItem to add</param>
 /// <returns>true if added</returns>
 public bool AddItemToTrade(InventoryItem itemForTrade)
 {
     lock (Sync)
     {
         // allow admin and gm account opened windows to trade any item
         if (this.m_owner.Client.Account.PrivLevel == 1)
         {
             if (!itemForTrade.IsDropable || !itemForTrade.IsPickable || itemForTrade.IsNotLosingDur || !itemForTrade.IsTradable)
             {
                 return(false);
             }
         }
         if (TradeItems.Contains(itemForTrade))
         {
             return(false);
         }
         if (TradeItems.Count >= MAX_ITEMS)
         {
             TradeUpdate();
             return(false);
         }
         TradeItems.Add(itemForTrade);
         TradeUpdate();
         return(true);
     }
 }
Ejemplo n.º 2
0
        public async void IDLoaderLoop()
        {
            while (true)
            {
                var queue = _messageQueue.DequeueChunk(10).ToList();

                if (queue.Any())
                {
                    var result = await _exileEngine.FetchAsync(queue);

                    if (result != null)
                    {
                        var items = result.Result;
                        items.Reverse();

                        foreach (var item in items)
                        {
                            TradeItems.Insert(0, item);
                            if (TradeItems.Count > 100)
                            {
                                TradeItems.RemoveAt(TradeItems.Count - 1);
                            }
                        }
                    }
                }

                await Task.Delay(1000);
            }
            // ReSharper disable once FunctionNeverReturns
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Adds an item to the tradewindow
        /// </summary>
        /// <param name="itemForTrade">InventoryItem to add</param>
        /// <returns>true if added</returns>
        public bool AddItemToTrade(InventoryItem itemForTrade)
        {
            lock (Sync)
            {
                if (!itemForTrade.IsDropable || !itemForTrade.IsPickable || itemForTrade.IsNotLosingDur)
                {
                    return(false);
                }

                if (TradeItems.Contains(itemForTrade))
                {
                    return(false);
                }

                if (TradeItems.Count >= MAX_ITEMS)
                {
                    TradeUpdate();
                    return(false);
                }

                TradeItems.Add(itemForTrade);
                TradeUpdate();
                return(true);
            }
        }
Ejemplo n.º 4
0
        // 08 03
        public void OnTradeItem(SagaMap.Packets.Client.GetTradeItem p)
        {
            if (this.state != SESSION_STATE.MAP_LOADED)
            {
                return;
            }
            if (this.Char.trading != Trading.TRADING)
            {
                return;
            }
            byte Tradeslot = p.GetSlot();
            byte ItemIndex = p.GetItem();
            byte quantity  = p.GetQuantity();
            byte status;
            //Lookup trade items information from character's inventory
            Item TradeItem = this.Char.inv.GetItem(CONTAINER_TYPE.INVENTORY, ItemIndex);

            if (quantity > TradeItem.stack)
            {
                quantity = TradeItem.stack;
            }
            TradeItem = new Item(TradeItem.id, TradeItem.creatorName, TradeItem.durability, TradeItem.stack);// make sure it's a different instance than the old one
            if (this.Char.trading == Trading.TRADING)
            {
                if (!TradeItem.tradeAble)
                {
                    this.SendTradeResult(TradeResults.NOT_TRADEABLE);
                    status = 9;
                }
                else
                {
                    status = 0;

                    // Add item to chars list of items to trade
                    try
                    {
                        TradeItems.Add(TradeItem, quantity);
                    }
                    catch
                    {
                    }
                    Logger.ShowInfo("Trade item added", null);
                    //Send info about item to clients
                    Packets.Server.TradeItem sendPacket = new SagaMap.Packets.Server.TradeItem();
                    sendPacket.SetTradeSlot(Tradeslot);
                    sendPacket.SetItemIndex(ItemIndex);
                    sendPacket.SetQuantity(quantity);
                    sendPacket.SetStatus(status);
                    netIO.SendPacket(sendPacket, this.SessionID);

                    ActorPC target = (ActorPC)map.GetActor(this.Char.TradeTarget);
                    if (target == null)
                    {
                        return;
                    }
                    target.e.OnTradeItem(Tradeslot, TradeItem);
                }
            }
        }
Ejemplo n.º 5
0
        public void Handle(POESESSIDChangedEvent message)
        {
            List <ExileTradeWebSocketSetting> tempSettings = null;

            TradeItems.Clear();
            WebSockets.Clear();

            if (_exileWebSocketManager != null)
            {
                _exileWebSocketManager.OnLogMessageEvent            -= OnLogMessage;
                _exileWebSocketManager.OnNewIdRecievedEvent         -= OnNewIdRecieved;
                _exileWebSocketManager.OnWebSocketConnectedEvent    -= OnWebSocketConnected;
                _exileWebSocketManager.OnWebSocketDisconnectedEvent -= OnWebSocketDisconnected;
                tempSettings = _exileWebSocketManager.Settings();
                _exileWebSocketManager.Dispose();
                _exileWebSocketManager = null;
            }

            if (!string.IsNullOrWhiteSpace(message.NewValue))
            {
                IsEnabled = true;

                _exileWebSocketManager = new ExileTradeWebSocketManager(19, message.NewValue, Settings.Default.UserAgent);
                _exileWebSocketManager.OnLogMessageEvent            += OnLogMessage;
                _exileWebSocketManager.OnNewIdRecievedEvent         += OnNewIdRecieved;
                _exileWebSocketManager.OnWebSocketConnectedEvent    += OnWebSocketConnected;
                _exileWebSocketManager.OnWebSocketDisconnectedEvent += OnWebSocketDisconnected;

                if (tempSettings != null)
                {
                    AddRange(tempSettings);
                }
                else if (File.Exists(SAVE_FILE))
                {
                    try
                    {
                        var des = JsonConvert.DeserializeObject <List <ExileTradeWebSocketSetting> >(File.ReadAllText(SAVE_FILE));
                        AddRange(des);
                    }
                    catch (JsonSerializationException)
                    {
                        // Ignore
                    }
                }
            }
            else
            {
                IsEnabled = false;
            }
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Removes an item from the tradewindow
        /// </summary>
        /// <param name="itemToRemove"></param>
        public void RemoveItemToTrade(InventoryItem itemToRemove)
        {
            if (itemToRemove == null)
            {
                return;
            }

            lock (Sync)
            {
                TradeItems.Remove(itemToRemove);
                if (!m_tradeAccept || !m_partnerWindow.m_tradeAccept)
                {
                    TradeUpdate();
                }
            }
        }
Ejemplo n.º 7
0
        void CreateReadOnlyTradeItemCollection()
        {
            if (TradeItems != null)
            {
                TradeItems.Dispose();
            }

            TradeItems = ViewModelHelper.CreateReadOnlyDispatcherCollection(
                CurrentProduct.TradeItems,
                x =>
            {
                var vm = new TradeItemViewModel();
                vm.Initialize(x);
                return(vm);
            },
                DispatcherHelper.UIDispatcher);
        }
Ejemplo n.º 8
0
 public void ClearTradeItems()
 {
     TradeItems.Clear();
 }
Ejemplo n.º 9
0
        /// <summary>
        /// Called each time a player push the accept button to accept the trade
        /// </summary>
        public bool AcceptTrade()
        {
            lock (Sync)
            {
                m_tradeAccept = true;
                GamePlayer partner = m_partnerWindow.Owner;

                partner.Out.SendMessage(m_owner.Name + " has accepted the trade.", eChatType.CT_System, eChatLoc.CL_SystemWindow);

                // Check if the tradepartner has also agreed to the trade
                if (!m_partnerWindow.m_tradeAccept)
                {
                    return(false);
                }

                bool logTrade = ServerProperties.Properties.LOG_TRADES;
                if (m_owner.Client.Account.PrivLevel > 1 || partner.Client.Account.PrivLevel > 1)
                {
                    logTrade = true;
                }

                //Test if we and our partner have enough money
                bool enoughMoney        = m_owner.RemoveMoney(TradeMoney);
                bool partnerEnoughMoney = partner.RemoveMoney(m_partnerWindow.TradeMoney);

                //Check the preconditions
                if (!enoughMoney || !partnerEnoughMoney)
                {
                    if (!enoughMoney)
                    {
                        //Reset the money if we don't have enough
                        TradeMoney = 0;
                        if (partnerEnoughMoney)
                        {
                            partner.AddMoney(m_partnerWindow.TradeMoney);
                            InventoryLogging.LogInventoryAction(partner, m_owner, eInventoryActionType.Trade, m_partnerWindow.TradeMoney);
                        }

                        m_owner.Out.SendMessage("You don't have enough money.", eChatType.CT_Merchant, eChatLoc.CL_SystemWindow);
                        partner.Out.SendMessage(m_owner.Name + " doesn't have enough money.", eChatType.CT_Merchant, eChatLoc.CL_SystemWindow);
                    }
                    if (!partnerEnoughMoney)
                    {
                        //Reset the money if our partner doesn't have enough
                        m_partnerWindow.TradeMoney = 0;
                        if (enoughMoney)
                        {
                            m_owner.AddMoney(TradeMoney);
                            InventoryLogging.LogInventoryAction(m_owner, partner, eInventoryActionType.Trade, TradeMoney);
                        }

                        partner.Out.SendMessage("You don't have enough money.", eChatType.CT_Merchant, eChatLoc.CL_SystemWindow);
                        m_owner.Out.SendMessage(partner.Name + " doesn't have enough money.", eChatType.CT_Merchant, eChatLoc.CL_SystemWindow);
                    }

                    //Update our tradewindow and return
                    TradeUpdate();
                    return(false);
                }

                if (m_combine == true)
                {
                    GamePlayer crafter = (m_recipiant == true ? m_owner : partner);
                    // --------------------------------------------------------------
                    // Luhz Crafting Update:
                    // Players may now have any, and all, "primary" crafting skills.
                    // AbstractCraftingSkill skill = CraftingMgr.getSkillbyEnum(crafter.CraftingPrimarySkill);
                    AbstractCraftingSkill skill = null;
                    lock (crafter.TradeWindow.Sync)
                    {
                        foreach (InventoryItem i in (ArrayList)crafter.TradeWindow.TradeItems.Clone())
                        {
                            if (i.Object_Type == (int)eObjectType.AlchemyTincture)
                            {
                                if (m_owner.GetCraftingSkillValue(eCraftingSkill.Alchemy) > 0)
                                {
                                    skill = CraftingMgr.getSkillbyEnum(eCraftingSkill.Alchemy);
                                    break;
                                }
                            }
                            else if (i.Object_Type == (int)eObjectType.SpellcraftGem)
                            {
                                if (crafter.GetCraftingSkillValue(eCraftingSkill.SpellCrafting) > 0)
                                {
                                    skill = CraftingMgr.getSkillbyEnum(eCraftingSkill.SpellCrafting);
                                    break;
                                }
                            }
                        }
                    }
                    // --------------------------------------------------------------
                    if (skill != null && skill is AdvancedCraftingSkill)
                    {
                        ((AdvancedCraftingSkill)skill).CombineItems(crafter);
                    }
                }
                else if (m_repair == true)
                {
                    GamePlayer    crafter      = (m_recipiant == true ? m_owner : partner);
                    InventoryItem itemToRepair = (InventoryItem)(m_recipiant == true ? m_partnerWindow.TradeItems[0] : TradeItems[0]);
                    if (itemToRepair != null)
                    {
                        crafter.RepairItem(itemToRepair);
                    }
                }
                else
                {
                    //Calculate the count of items
                    int myTradeItemsCount      = m_tradeItems.Count;
                    int partnerTradeItemsCount = m_partnerWindow.TradeItems.Count;

                    //Test if we and our partner have enough space in inventory
                    int  mySpaceNeeded      = Math.Max(0, partnerTradeItemsCount - myTradeItemsCount);
                    int  partnerSpaceNeeded = Math.Max(0, myTradeItemsCount - partnerTradeItemsCount);
                    bool enoughSpace        = m_owner.Inventory.IsSlotsFree(mySpaceNeeded, eInventorySlot.FirstBackpack, eInventorySlot.LastBackpack);
                    bool partnerEnoughSpace = partner.Inventory.IsSlotsFree(partnerSpaceNeeded, eInventorySlot.FirstBackpack, eInventorySlot.LastBackpack);

                    //Check the preconditions
                    if (!enoughSpace || !partnerEnoughSpace)
                    {
                        if (!enoughSpace)
                        {
                            m_owner.Out.SendMessage("You don't have enough space in your inventory.", eChatType.CT_Merchant, eChatLoc.CL_SystemWindow);
                            partner.Out.SendMessage(m_owner.Name + " doesn't have enough space in his inventory.", eChatType.CT_Merchant, eChatLoc.CL_SystemWindow);
                        }
                        if (!partnerEnoughSpace)
                        {
                            partner.Out.SendMessage("You don't have enough space in your inventory.", eChatType.CT_Merchant, eChatLoc.CL_SystemWindow);
                            m_owner.Out.SendMessage(partner.Name + " doesn't have enough space in his inventory.", eChatType.CT_Merchant, eChatLoc.CL_SystemWindow);
                        }

                        //Update our tradewindow and return
                        TradeUpdate();

                        //This was already removed above, needs to be returned to the players on trade failure.
                        m_owner.AddMoney(TradeMoney);
                        partner.AddMoney(m_partnerWindow.TradeMoney);

                        return(false);
                    }

                    //Now transfer everything
                    m_owner.Inventory.BeginChanges();
                    partner.Inventory.BeginChanges();
                    m_changesCount++;
                    m_partnerWindow.m_changesCount++;

                    // must be cloned because Inventory.RemoveItem removes it from trade window
                    ArrayList ownerTradeItems   = (ArrayList)TradeItems.Clone();
                    ArrayList partnerTradeItems = (ArrayList)m_partnerWindow.TradeItems.Clone();

                    // remove all items first to make sure there is enough space
                    // if inventory is full but removed items count >= received count
                    foreach (InventoryItem item in ownerTradeItems)
                    {
                        lock (m_owner.Inventory)
                        {
                            if (!m_owner.Inventory.RemoveTradeItem(item))
                            {
                                if (logTrade)
                                {
                                    GameServer.Instance.LogGMAction("   NOTItem: " + m_owner.Name + "(" + m_owner.Client.Account.Name + ") -> " + partner.Name + "(" + partner.Client.Account.Name + ") : " + item.Name + "(" + item.Id_nb + ")");
                                }

                                //BOT.Ban(m_owner, "Trade Hack");
                                //BOT.Ban(partner, "Trade Hack");

                                return(false);
                            }
                        }
                    }
                    foreach (InventoryItem item in partnerTradeItems)
                    {
                        lock (partner.Inventory)
                        {
                            if (!partner.Inventory.RemoveTradeItem(item))
                            {
                                if (logTrade)
                                {
                                    GameServer.Instance.LogGMAction("   NOTItem: " + m_owner.Name + "(" + m_owner.Client.Account.Name + ") -> " + partner.Name + "(" + partner.Client.Account.Name + ") : " + item.Name + "(" + item.Id_nb + ")");
                                }

                                //BOT.Ban(m_owner, "Trade Hack");
                                //BOT.Ban(partner, "Trade Hack");

                                return(false);
                            }
                        }
                    }

                    foreach (InventoryItem item in ownerTradeItems)
                    {
                        if (m_owner.Guild != partner.Guild)
                        {
                            item.Emblem = 0;
                        }

                        bool tradeSuccess = false;

                        if (item.IsDeleted)
                        {
                            tradeSuccess = partner.Inventory.AddItem(eInventorySlot.FirstEmptyBackpack, item);
                        }
                        else
                        {
                            tradeSuccess = partner.Inventory.AddTradeItem(eInventorySlot.FirstEmptyBackpack, item);
                        }

                        if (!tradeSuccess)
                        {
                            log.Error("Trade item was not added to Partner first free slot.  Owner = " + m_owner.Name + ", Partner = " + partner.Name + "; Item = " + item.Id_nb);
                        }
                        else
                        {
                            InventoryLogging.LogInventoryAction(m_owner, partner, eInventoryActionType.Trade, item.Template, item.Count);
                            if (logTrade)
                            {
                                GameServer.Instance.LogGMAction("   Item: " + m_owner.Name + "(" + m_owner.Client.Account.Name + ") -> " + partner.Name + "(" + partner.Client.Account.Name + ") : " + item.Name + "(" + item.Id_nb + ")");
                            }
                        }
                    }

                    foreach (InventoryItem item in partnerTradeItems)
                    {
                        if (m_owner.Guild != partner.Guild)
                        {
                            item.Emblem = 0;
                        }

                        bool tradeSuccess = false;

                        if (item.IsDeleted)
                        {
                            tradeSuccess = m_owner.Inventory.AddItem(eInventorySlot.FirstEmptyBackpack, item);
                        }
                        else
                        {
                            tradeSuccess = m_owner.Inventory.AddTradeItem(eInventorySlot.FirstEmptyBackpack, item);
                        }

                        if (!tradeSuccess)
                        {
                            log.Error("Trade item was not added to Owner first free slot.  Owner = " + m_owner.Name + ", Partner = " + partner.Name + "; Item = " + item.Id_nb);
                        }
                        else
                        {
                            InventoryLogging.LogInventoryAction(partner, m_owner, eInventoryActionType.Trade, item.Template, item.Count);
                            if (logTrade)
                            {
                                GameServer.Instance.LogGMAction("   Item: " + partner.Name + "(" + partner.Client.Account.Name + ") -> " + m_owner.Name + "(" + m_owner.Client.Account.Name + ") : " + item.Name + "(" + item.Id_nb + ")");
                            }
                        }
                    }

                    m_owner.Inventory.CommitChanges();
                    partner.Inventory.CommitChanges();
                    m_changesCount--;
                    m_partnerWindow.m_changesCount--;

                    m_owner.Out.SendMessage("Trade Completed. " + myTradeItemsCount + " items for " + partnerTradeItemsCount + " items.", eChatType.CT_System, eChatLoc.CL_SystemWindow);
                    partner.Out.SendMessage("Trade Completed. " + partnerTradeItemsCount + " items for " + myTradeItemsCount + " items.", eChatType.CT_System, eChatLoc.CL_SystemWindow);

                    m_owner.Inventory.SaveIntoDatabase(m_owner.InternalID);
                    partner.Inventory.SaveIntoDatabase(partner.InternalID);
                }

                if (logTrade)
                {
                    if (m_partnerWindow.TradeMoney > 0)
                    {
                        GameServer.Instance.LogGMAction("  Money: " + partner.Name + "(" + partner.Client.Account.Name + ") -> " + m_owner.Name + "(" + m_owner.Client.Account.Name + ") : " + m_partnerWindow.TradeMoney + "coppers");
                    }
                    if (TradeMoney > 0)
                    {
                        GameServer.Instance.LogGMAction("  Money: " + m_owner.Name + "(" + m_owner.Client.Account.Name + ") -> " + partner.Name + "(" + partner.Client.Account.Name + ") : " + TradeMoney + "coppers");
                    }
                }

                if (TradeMoney > 0 || m_partnerWindow.TradeMoney > 0)
                {
                    //Now add the money
                    m_owner.AddMoney(m_partnerWindow.TradeMoney, "You get {0}.");
                    partner.AddMoney(TradeMoney, "You get {0}.");
                    InventoryLogging.LogInventoryAction(m_owner, partner, eInventoryActionType.Trade, TradeMoney);
                    InventoryLogging.LogInventoryAction(partner, m_owner, eInventoryActionType.Trade, m_partnerWindow.TradeMoney);
                    m_owner.SaveIntoDatabase();
                    partner.SaveIntoDatabase();
                }

                CloseTrade();                // Close the Trade Window

                return(true);
            }
        }
Ejemplo n.º 10
0
        public override void OnPlayerBuy(GamePlayer player, int item_slot, int number)
        {
            if (m_moneyItem == null || m_moneyItem.Item == null)
            {
                return;
            }

            // Get the template
            int pagenumber = item_slot / MerchantTradeItems.MAX_ITEM_IN_TRADEWINDOWS;
            int slotnumber = item_slot % MerchantTradeItems.MAX_ITEM_IN_TRADEWINDOWS;

            ItemTemplate template = TradeItems.GetItem(pagenumber, (eMerchantWindowSlot)slotnumber);

            if (template == null)
            {
                return;
            }

            // Calculate the amout of items
            int amountToBuy = number;

            if (template.PackSize > 0)
            {
                amountToBuy *= template.PackSize;
            }

            if (amountToBuy <= 0)
            {
                return;
            }

            // Calculate the value of items
            long totalValue = number * template.Price;

            lock (player.Inventory)
            {
                if (player.Inventory.CountItemTemplate(m_moneyItem.Item.Id_nb, eInventorySlot.FirstBackpack, eInventorySlot.LastBackpack) < totalValue)
                {
                    player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "GameMerchant.OnPlayerBuy.YouNeed2", totalValue, MoneyItemName), eChatType.CT_System, eChatLoc.CL_SystemWindow);
                    return;
                }

                if (!player.Inventory.AddTemplate(GameInventoryItem.Create(template), amountToBuy, eInventorySlot.FirstBackpack, eInventorySlot.LastBackpack))
                {
                    player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "GameMerchant.OnPlayerBuy.NotInventorySpace"), eChatType.CT_System, eChatLoc.CL_SystemWindow);

                    return;
                }

                InventoryLogging.LogInventoryAction(this, player, eInventoryActionType.Merchant, template, amountToBuy);

                // Generate the buy message
                string message;
                if (amountToBuy > 1)
                {
                    message = LanguageMgr.GetTranslation(player.Client.Account.Language, "GameMerchant.OnPlayerBuy.BoughtPieces2", amountToBuy, template.GetName(1, false), totalValue, MoneyItemName);
                }
                else
                {
                    message = LanguageMgr.GetTranslation(player.Client.Account.Language, "GameMerchant.OnPlayerBuy.Bought2", template.GetName(1, false), totalValue, MoneyItemName);
                }

                var items   = player.Inventory.GetItemRange(eInventorySlot.FirstBackpack, eInventorySlot.LastBackpack);
                int removed = 0;

                foreach (InventoryItem item in items)
                {
                    if (item.Id_nb != m_moneyItem.Item.Id_nb)
                    {
                        continue;
                    }

                    int remFromStack = Math.Min(item.Count, (int)(totalValue - removed));
                    player.Inventory.RemoveCountFromStack(item, remFromStack);
                    InventoryLogging.LogInventoryAction(player, this, eInventoryActionType.Merchant, item.Template, remFromStack);
                    removed += remFromStack;
                    if (removed == totalValue)
                    {
                        break;
                    }
                }

                player.Out.SendInventoryItemsUpdate(items);
                player.Out.SendMessage(message, eChatType.CT_Merchant, eChatLoc.CL_SystemWindow);
            }
        }
Ejemplo n.º 11
0
        public override void OnPlayerBuy(GamePlayer player, int item_slot, int number)
        {
            // Get the template
            int pagenumber = item_slot / MerchantTradeItems.MAX_ITEM_IN_TRADEWINDOWS;
            int slotnumber = item_slot % MerchantTradeItems.MAX_ITEM_IN_TRADEWINDOWS;

            ItemTemplate template = TradeItems.GetItem(pagenumber, (eMerchantWindowSlot)slotnumber);

            if (template == null)
            {
                return;
            }

            // Calculate the amout of items
            int amountToBuy = number;

            if (template.PackSize > 0)
            {
                amountToBuy *= template.PackSize;
            }

            if (amountToBuy <= 0)
            {
                return;
            }

            // Calculate the value of items
            long totalValue = number * template.Price;

            lock (player.Inventory)
            {
                if (player.BountyPoints < totalValue)
                {
                    player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "GameMerchant.OnPlayerBuy.YouNeedBP", totalValue), eChatType.CT_System, eChatLoc.CL_SystemWindow);
                    return;
                }

                if (!player.Inventory.AddTemplate(GameInventoryItem.Create(template), amountToBuy, eInventorySlot.FirstBackpack, eInventorySlot.LastBackpack))
                {
                    player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "GameMerchant.OnPlayerBuy.NotInventorySpace"), eChatType.CT_System, eChatLoc.CL_SystemWindow);
                    return;
                }

                InventoryLogging.LogInventoryAction(this, player, eInventoryActionType.Merchant, template, amountToBuy);

                // Generate the buy message
                string message;
                if (number > 1)
                {
                    message = LanguageMgr.GetTranslation(player.Client.Account.Language, "GameMerchant.OnPlayerBuy.BoughtPiecesBP", totalValue, template.GetName(1, false));
                }
                else
                {
                    message = LanguageMgr.GetTranslation(player.Client.Account.Language, "GameMerchant.OnPlayerBuy.BoughtBP", template.GetName(1, false), totalValue);
                }

                player.BountyPoints -= totalValue;
                player.Out.SendUpdatePoints();
                player.Out.SendMessage(message, eChatType.CT_Merchant, eChatLoc.CL_SystemWindow);
            }
        }