diff options
author | Yohann Ferreira <yohann_dot_ferreira_at_orange_dot_efer> | 2011-01-13 16:06:07 +0100 |
---|---|---|
committer | Yohann Ferreira <yohann_dot_ferreira_at_orange_dot_efer> | 2011-01-13 16:06:07 +0100 |
commit | 83a3b6f920f446b3001725554ab15bed34d6f368 (patch) | |
tree | 7e29f4c3162c19b3ce50e9c32d7c22cce4219e39 /src | |
parent | 3d8a5b02de7a05f412a36fc4d4ba85402e028e65 (diff) | |
download | mana-client-83a3b6f920f446b3001725554ab15bed34d6f368.tar.gz mana-client-83a3b6f920f446b3001725554ab15bed34d6f368.tar.bz2 mana-client-83a3b6f920f446b3001725554ab15bed34d6f368.tar.xz mana-client-83a3b6f920f446b3001725554ab15bed34d6f368.zip |
Fix a segfault when attempting to buy free items.
Resolves: Mana-mantis #277
Trivial fix.
Diffstat (limited to 'src')
-rw-r--r-- | src/gui/buy.cpp | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/src/gui/buy.cpp b/src/gui/buy.cpp index cc135e07..4a8dae17 100644 --- a/src/gui/buy.cpp +++ b/src/gui/buy.cpp @@ -204,8 +204,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; @@ -234,12 +236,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; } |