From a8041ac28118de1caef73bdac9567c9a7e25e41f Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Wed, 27 Sep 2017 23:43:44 +0300 Subject: Fix some issues with int64 to int32 implicit conversions. --- src/being/localplayer.cpp | 4 ++-- src/gui/dialogsmanager.cpp | 2 +- src/gui/widgets/characterdisplay.cpp | 2 +- src/gui/windows/charselectdialog.cpp | 4 ++-- src/gui/windows/killstats.cpp | 11 ++++++----- src/gui/windows/killstats.h | 2 +- src/gui/windows/statuswindow.cpp | 4 ++-- src/resources/db/unitsdb.cpp | 15 +++++++++++++++ src/resources/db/unitsdb.h | 7 ++++++- 9 files changed, 36 insertions(+), 15 deletions(-) diff --git a/src/being/localplayer.cpp b/src/being/localplayer.cpp index 2fc20f6f2..1a12a3808 100644 --- a/src/being/localplayer.cpp +++ b/src/being/localplayer.cpp @@ -1245,7 +1245,7 @@ void LocalPlayer::attributeChanged(const AttributesT id, break; } case Attributes::PLAYER_BASE_LEVEL: - mLevel = newVal; + mLevel = CAST_S32(newVal); break; case Attributes::PLAYER_HP: if (oldVal != 0 && newVal == 0) @@ -1264,7 +1264,7 @@ void LocalPlayer::attributeChanged(const AttributesT id, { return; } - const int64_t change = newVal - oldVal; + const int32_t change = CAST_S32(newVal - oldVal); addJobMessage(change); break; } diff --git a/src/gui/dialogsmanager.cpp b/src/gui/dialogsmanager.cpp index 8f63662db..f24352a43 100644 --- a/src/gui/dialogsmanager.cpp +++ b/src/gui/dialogsmanager.cpp @@ -168,7 +168,7 @@ void DialogsManager::attributeChanged(const AttributesT id, percent = 50; const int max = PlayerInfo::getAttribute( Attributes::MAX_WEIGHT) * percent / 100; - const int total = oldVal; + const int total = CAST_S32(oldVal); if (newVal >= max && total < max) { weightNoticeTime = cur_time + 5; diff --git a/src/gui/widgets/characterdisplay.cpp b/src/gui/widgets/characterdisplay.cpp index efc256516..e5743615a 100644 --- a/src/gui/widgets/characterdisplay.cpp +++ b/src/gui/widgets/characterdisplay.cpp @@ -143,7 +143,7 @@ void CharacterDisplay::mouseMoved(MouseEvent &event A_UNUSED) CAST_U32( mCharacter->data.mAttributes[Attributes::PLAYER_BASE_LEVEL])), // TRANSLATORS: character money - strprintf(_("Money: %s"), UnitsDb::formatCurrency( + strprintf(_("Money: %s"), UnitsDb::formatCurrency64( mCharacter->data.mAttributes[Attributes::MONEY]).c_str())); } else diff --git a/src/gui/windows/charselectdialog.cpp b/src/gui/windows/charselectdialog.cpp index aa4a80b4a..7b43aca09 100644 --- a/src/gui/windows/charselectdialog.cpp +++ b/src/gui/windows/charselectdialog.cpp @@ -259,8 +259,8 @@ void CharSelectDialog::action(const ActionEvent &event) CAST_U32( character->data.mAttributes[Attributes::PLAYER_BASE_LEVEL]), strExp.c_str(), - UnitsDb::formatCurrency( - character->data.mAttributes[Attributes::MONEY]).c_str()); + UnitsDb::formatCurrency(CAST_S32( + character->data.mAttributes[Attributes::MONEY])).c_str()); CREATEWIDGET(OkDialog, data->getName(), msg, // TRANSLATORS: ok dialog button _("OK"), diff --git a/src/gui/windows/killstats.cpp b/src/gui/windows/killstats.cpp index a110f21f1..ec6d331d8 100644 --- a/src/gui/windows/killstats.cpp +++ b/src/gui/windows/killstats.cpp @@ -288,7 +288,8 @@ void KillStats::gainXp(int64_t xp) } // TRANSLATORS: kill stats window label mLine4->setCaption(strprintf(_("Kills: %s, total exp: %s"), - toString(mKillCounter).c_str(), toString(mExpCounter).c_str())); + toString(mKillCounter).c_str(), + toString(CAST_U64(mExpCounter)).c_str())); // TRANSLATORS: kill stats window label mLine7->setCaption(strprintf(_("Kills/Min: %s, Exp/Min: %s"), @@ -314,7 +315,7 @@ void KillStats::recalcStats() { const int64_t newExp = PlayerInfo::getAttribute(Attributes::PLAYER_EXP); if (m1minExpTime != 0) - m1minSpeed = newExp - m1minExpNum; + m1minSpeed = CAST_S32(newExp - m1minExpNum); else m1minSpeed = 0; m1minExpTime = curTime; @@ -326,7 +327,7 @@ void KillStats::recalcStats() const int newExp = PlayerInfo::getAttribute( Attributes::PLAYER_EXP_NEEDED); if (m1minExpTime != 0) - m1minSpeed = newExp - m1minExpNum; + m1minSpeed = CAST_S32(newExp - m1minExpNum); mStatsReUpdated = true; m1minExpNum = newExp; } @@ -335,7 +336,7 @@ void KillStats::recalcStats() { const int64_t newExp = PlayerInfo::getAttribute(Attributes::PLAYER_EXP); if (m5minExpTime != 0) - m5minSpeed = newExp - m5minExpNum; + m5minSpeed = CAST_S32(newExp - m5minExpNum); else m5minSpeed = 0; m5minExpTime = curTime; @@ -346,7 +347,7 @@ void KillStats::recalcStats() { const int64_t newExp = PlayerInfo::getAttribute(Attributes::PLAYER_EXP); if (m15minExpTime != 0) - m15minSpeed = newExp - m15minExpNum; + m15minSpeed = CAST_S32(newExp - m15minExpNum); else m15minSpeed = 0; m15minExpTime = curTime; diff --git a/src/gui/windows/killstats.h b/src/gui/windows/killstats.h index d471e1f73..a57c5c439 100644 --- a/src/gui/windows/killstats.h +++ b/src/gui/windows/killstats.h @@ -94,7 +94,7 @@ class KillStats final : public Window, Label *mLastKillExpLabel A_NONNULLPOINTER; int mKillCounter; /**< Session Kill counter. */ - int mExpCounter; /**< Session Exp counter. */ + int64_t mExpCounter; /**< Session Exp counter. */ int mKillTCounter; /**< Timer Kill counter. */ int mExpTCounter; /**< Timer Exp counter. */ diff --git a/src/gui/windows/statuswindow.cpp b/src/gui/windows/statuswindow.cpp index b86e3e847..092e401c2 100644 --- a/src/gui/windows/statuswindow.cpp +++ b/src/gui/windows/statuswindow.cpp @@ -311,7 +311,7 @@ void StatusWindow::attributeChanged(const AttributesT id, case Attributes::MONEY: // TRANSLATORS: status window label mMoneyLabel->setCaption(strprintf(_("Money: %s"), - UnitsDb::formatCurrency(newVal).c_str())); + UnitsDb::formatCurrency64(newVal).c_str())); mMoneyLabel->adjustSize(); break; @@ -347,7 +347,7 @@ void StatusWindow::attributeChanged(const AttributesT id, } else { - lvl = (expNeed - 20000) / 150; + lvl = CAST_S32((expNeed - 20000) / 150); blocked = true; PlayerInfo::setAttribute(Attributes::PLAYER_JOB_LEVEL, lvl); diff --git a/src/resources/db/unitsdb.cpp b/src/resources/db/unitsdb.cpp index aac6b72e3..a32786b84 100644 --- a/src/resources/db/unitsdb.cpp +++ b/src/resources/db/unitsdb.cpp @@ -325,6 +325,12 @@ std::string UnitsDb::formatCurrency(const int value) return formatUnit(value, defaultCurrency); } +std::string UnitsDb::formatCurrency64(const int64_t value) +{ + return formatUnit(CAST_S32(value), + defaultCurrency); +} + std::string UnitsDb::formatCurrency(std::string name, const int value) { @@ -333,6 +339,15 @@ std::string UnitsDb::formatCurrency(std::string name, return formatUnit(value, mCurrencies[name]); } +std::string UnitsDb::formatCurrency64(std::string name, + const int64_t value) +{ + if (mCurrencies.find(name) == mCurrencies.end()) + name = DEFAULT_CURRENCY; + return formatUnit(CAST_S32(value), + mCurrencies[name]); +} + std::string UnitsDb::formatWeight(const int value) { return formatUnit(value, defaultWeight); diff --git a/src/resources/db/unitsdb.h b/src/resources/db/unitsdb.h index 0681567c0..859adaabc 100644 --- a/src/resources/db/unitsdb.h +++ b/src/resources/db/unitsdb.h @@ -46,11 +46,16 @@ namespace UnitsDb */ std::string formatCurrency(const int value) A_WARN_UNUSED; + std::string formatCurrency64(const int64_t value) A_WARN_UNUSED; + /** * Formats the given number in the correct currency format. */ std::string formatCurrency(std::string name, - const int value) A_WARN_UNUSED; + const int value) A_WARN_UNUSED; + + std::string formatCurrency64(std::string name, + const int64_t value) A_WARN_UNUSED; /** * Formats the given number in the correct weight/mass format. -- cgit v1.2.3-60-g2f50