From 5aef14eccdc944478f4efe30bb858eebe47bbefd Mon Sep 17 00:00:00 2001 From: Evil Eye Date: Thu, 10 Feb 2022 20:28:27 +0100 Subject: [PATCH] Prevent division by 0 --- apps/openmw/mwdialogue/filter.cpp | 11 ++++++----- apps/openmw/mwgui/hud.cpp | 3 ++- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/apps/openmw/mwdialogue/filter.cpp b/apps/openmw/mwdialogue/filter.cpp index a47334a2dd..7ae9f14a7a 100644 --- a/apps/openmw/mwdialogue/filter.cpp +++ b/apps/openmw/mwdialogue/filter.cpp @@ -257,9 +257,9 @@ bool MWDialogue::Filter::testSelectStructNumeric (const SelectWrapper& select) c case SelectWrapper::Function_PcHealthPercent: { MWWorld::Ptr player = MWMechanics::getPlayer(); - - float ratio = player.getClass().getCreatureStats (player).getHealth().getCurrent() / - player.getClass().getCreatureStats (player).getHealth().getModified(); + float ratio = player.getClass().getCreatureStats(player).getHealth().getModified(); + if(ratio > 0) + ratio = player.getClass().getCreatureStats(player).getHealth().getCurrent() / ratio; return select.selectCompare (static_cast(ratio*100)); } @@ -276,8 +276,9 @@ bool MWDialogue::Filter::testSelectStructNumeric (const SelectWrapper& select) c case SelectWrapper::Function_HealthPercent: { - float ratio = mActor.getClass().getCreatureStats (mActor).getHealth().getCurrent() / - mActor.getClass().getCreatureStats (mActor).getHealth().getModified(); + float ratio = mActor.getClass().getCreatureStats(mActor).getHealth().getModified(); + if(ratio > 0) + ratio = mActor.getClass().getCreatureStats(mActor).getHealth().getCurrent() / ratio; return select.selectCompare (static_cast(ratio*100)); } diff --git a/apps/openmw/mwgui/hud.cpp b/apps/openmw/mwgui/hud.cpp index 4ed54c38d6..5af85b34ae 100644 --- a/apps/openmw/mwgui/hud.cpp +++ b/apps/openmw/mwgui/hud.cpp @@ -608,7 +608,8 @@ namespace MWGui mEnemyHealth->setProgressRange(100); // Health is usually cast to int before displaying. Actors die whenever they are < 1 health. // Therefore any value < 1 should show as an empty health bar. We do the same in statswindow :) - mEnemyHealth->setProgressPosition(static_cast(stats.getHealth().getCurrent() / stats.getHealth().getModified() * 100)); + float health = stats.getHealth().getModified(); + mEnemyHealth->setProgressPosition(health == 0.f ? 0 : static_cast(stats.getHealth().getCurrent() / health * 100)); static const float fNPCHealthBarFade = MWBase::Environment::get().getWorld()->getStore().get().find("fNPCHealthBarFade")->mValue.getFloat(); if (fNPCHealthBarFade > 0.f)