From 49da33a12981b1af7a91c5d1bd5e91fdc97537b6 Mon Sep 17 00:00:00 2001 From: kuyondo Date: Mon, 4 Oct 2021 08:12:15 +0800 Subject: [PATCH] comiit --- apps/openmw/mwgui/tradewindow.cpp | 23 +++++++++++++++++++++-- apps/openmw/mwgui/tradewindow.hpp | 1 + 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwgui/tradewindow.cpp b/apps/openmw/mwgui/tradewindow.cpp index 19ea383483..d236305f37 100644 --- a/apps/openmw/mwgui/tradewindow.cpp +++ b/apps/openmw/mwgui/tradewindow.cpp @@ -52,6 +52,7 @@ namespace MWGui , mItemToSell(-1) , mCurrentBalance(0) , mCurrentMerchantOffer(0) + , mReceiveMoney(false) { getWidget(mFilterAll, "AllButton"); getWidget(mFilterWeapon, "WeaponButton"); @@ -405,10 +406,15 @@ namespace MWGui void TradeWindow::onBalanceValueChanged(int value) { + int previousBalance = mCurrentBalance; + // Entering a "-" sign inverts the buying/selling state mCurrentBalance = (mCurrentBalance >= 0 ? 1 : -1) * value; updateLabels(); + if (mReceiveMoney && mCurrentBalance == 0) + mCurrentBalance = previousBalance; + if (value != std::abs(value)) mTotalBalance->setValue(std::abs(value)); } @@ -434,10 +440,23 @@ namespace MWGui { MWWorld::Ptr player = MWMechanics::getPlayer(); int playerGold = player.getClass().getContainerStore(player).count(MWWorld::ContainerStore::sGoldId); - mPlayerGold->setCaptionWithReplacing("#{sYourGold} " + MyGUI::utility::toString(playerGold)); - if (mCurrentBalance < 0) + TradeItemModel* playerTradeModel = MWBase::Environment::get().getWindowManager()->getInventoryWindow()->getTradeModel(); + const std::vector& playerBorrowed = playerTradeModel->getItemsBorrowedToUs(); + const std::vector& merchantBorrowed = mTradeModel->getItemsBorrowedToUs(); + + if (playerBorrowed.empty() && merchantBorrowed.empty()) { + mCurrentBalance = 0; + } + else if (playerBorrowed.empty()) { + mReceiveMoney = false; + } + else if (merchantBorrowed.empty()) { + mReceiveMoney = true; + } + + if (mCurrentBalance < 0 || mReceiveMoney) { mTotalBalanceLabel->setCaptionWithReplacing("#{sTotalCost}"); } diff --git a/apps/openmw/mwgui/tradewindow.hpp b/apps/openmw/mwgui/tradewindow.hpp index f82d7b0f72..523cb84098 100644 --- a/apps/openmw/mwgui/tradewindow.hpp +++ b/apps/openmw/mwgui/tradewindow.hpp @@ -79,6 +79,7 @@ namespace MWGui int mCurrentBalance; int mCurrentMerchantOffer; + bool mReceiveMoney; void sellToNpc(const MWWorld::Ptr& item, int count, bool boughtItem); ///< only used for adjusting the gold balance void buyFromNpc(const MWWorld::Ptr& item, int count, bool soldItem); ///< only used for adjusting the gold balance