Generate sCrimeMessageReport only once per frame (bug #5012)

pull/2514/head
Andrei Kortunov 5 years ago
parent 58be8dc976
commit c9deb1b325

@ -104,6 +104,7 @@
Bug #4999: Drop instruction behaves differently from vanilla
Bug #5001: Possible data race in the Animation::setAlpha()
Bug #5004: Werewolves shield their eyes during storm
Bug #5012: "Take all" on owned container generates a messagebox per item
Bug #5018: Spell tooltips don't support purely negative magnitudes
Bug #5025: Data race in the ICO::setMaximumNumOfObjectsToCompilePerFrame()
Bug #5028: Offered price caps are not trading-specific

@ -175,6 +175,7 @@ namespace MWGui
, mHudEnabled(true)
, mCursorVisible(true)
, mCursorActive(false)
, mPlayerBounty(-1)
, mPlayerName()
, mPlayerRaceId()
, mPlayerAttributes()
@ -1025,6 +1026,18 @@ namespace MWGui
if (!gameRunning)
return;
// We should display message about crime only once per frame, even if there are several crimes.
// Otherwise we will get message spam when stealing several items via Take All button.
const MWWorld::Ptr player = MWMechanics::getPlayer();
int currentBounty = player.getClass().getNpcStats(player).getBounty();
if (currentBounty != mPlayerBounty)
{
if (mPlayerBounty >= 0 && currentBounty > mPlayerBounty)
messageBox("#{sCrimeMessage}");
mPlayerBounty = currentBounty;
}
mDragAndDrop->onFrame();
mHud->onFrame(frameDuration);
@ -1773,6 +1786,8 @@ namespace MWGui
void WindowManager::clear()
{
mPlayerBounty = -1;
for (WindowBase* window : mWindows)
window->clear();

@ -462,6 +462,8 @@ namespace MWGui
bool mCursorVisible;
bool mCursorActive;
int mPlayerBounty;
void setCursorVisible(bool visible);
/// \todo get rid of this stuff. Move it to the respective UI element classes, if needed.

@ -1452,7 +1452,6 @@ namespace MWMechanics
if (reported)
{
MWBase::Environment::get().getWindowManager()->messageBox("#{sCrimeMessage}");
player.getClass().getNpcStats(player).setBounty(player.getClass().getNpcStats(player).getBounty()
+ arg);
@ -1923,7 +1922,6 @@ namespace MWMechanics
{
npcStats.setBounty(npcStats.getBounty()+
gmst.find("iWereWolfBounty")->mValue.getInteger());
windowManager->messageBox("#{sCrimeMessage}");
}
}
}

Loading…
Cancel
Save