From 10e5f2e1d88897c16f2ce5e2ef26898ae05ab9ef Mon Sep 17 00:00:00 2001 From: Yohann Ferreira Date: Thu, 13 Jan 2011 16:06:07 +0100 Subject: Fix a segfault when attempting to buy free items. Resolves: Mana-mantis #277 Trivial fix. --- src/gui/buy.cpp | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/gui/buy.cpp b/src/gui/buy.cpp index 031c53dd..faa86cc9 100644 --- a/src/gui/buy.cpp +++ b/src/gui/buy.cpp @@ -199,8 +199,10 @@ void BuyDialog::action(const gcn::ActionEvent &event) // Update money and adjust the max number of items that can be bought mMaxItems -= mAmountItems; - setMoney(mMoney - - mAmountItems * mShopItems->at(selectedItem)->getPrice()); + int price = mShopItems->at(selectedItem)->getPrice(); + if (price < 0) + price = 0; + setMoney(mMoney - mAmountItems * price); // Reset selection mAmountItems = 1; @@ -229,12 +231,20 @@ void BuyDialog::updateButtonsAndLabels() int itemPrice = mShopItems->at(selectedItem)->getPrice(); // Calculate how many the player can afford - mMaxItems = mMoney / itemPrice; - if (mAmountItems > mMaxItems) + if (itemPrice > 0) { - mAmountItems = mMaxItems; + mMaxItems = mMoney / itemPrice; + } + else + { + // Let the player no more than 1 of them at a time, since it + // shouldn't be a permitted case. + mMaxItems = 1; } + if (mAmountItems > mMaxItems) + mAmountItems = mMaxItems; + // Calculate price of pending purchase price = mAmountItems * itemPrice; } -- cgit v1.2.3-70-g09d2