Example #1
0
        public bool TryPlaceBid(Mobile m, long bidTotal)
        {
            if (!OnGoing || InClaimPeriod)
            {
                m.SendLocalizedMessage(1156432); // There is no active auction to complete this action.
                return(false);
            }

            BidEntry entry    = GetBidEntry(m);
            Account  acct     = m.Account as Account;
            bool     firstBid = HighestBid == null;

            long highestBid = firstBid ? CurrentBid : HighestBid.CurrentBid;

            if (acct == null || Banker.GetBalance(m) < bidTotal)
            {
                m.SendLocalizedMessage(1155867); // The amount entered is invalid. Verify that there are sufficient funds to complete this transaction.
                return(false);
            }

            if ((firstBid && bidTotal < highestBid) || (!firstBid && bidTotal <= highestBid))
            {
                m.SendLocalizedMessage(1156445); // You have been out bid.

                if (bidTotal > CurrentBid)
                {
                    CurrentBid = bidTotal;
                    AddToHistory(m, bidTotal);
                }
            }
            else
            {
                acct.WithdrawGold(bidTotal);
                entry.CurrentBid = bidTotal;
                var mobile = HighestBid != null ? HighestBid.Mobile : null;

                if (!firstBid)
                {
                    if (mobile != m)
                    {
                        DoOutBidMessage(mobile);
                    }

                    HighestBid.Refund(this, highestBid);
                }
                else
                {
                    AddToHistory(m, bidTotal);
                }

                m.SendLocalizedMessage(1156433); // Your bid has been placed.

                AuctionMap map = new AuctionMap(Safe);

                if (m.Backpack == null || !m.Backpack.TryDropItem(m, map, false))
                {
                    map.Delete();
                }
                else
                {
                    m.SendLocalizedMessage(1156478); // The auction safe map has been placed in your backpack.
                }

                VaultLogging.NewHighBid(this, m, mobile, bidTotal);

                HighestBid = entry;
                return(true);
            }

            return(false);
        }