diff --git a/src/creatures/players/achievement/player_achievement.cpp b/src/creatures/players/achievement/player_achievement.cpp index 2db53dbe776..e81a93429c1 100644 --- a/src/creatures/players/achievement/player_achievement.cpp +++ b/src/creatures/players/achievement/player_achievement.cpp @@ -35,7 +35,7 @@ bool PlayerAchievement::add(uint16_t id, bool message /* = true*/, uint32_t time addPoints(achievement.points); int toSaveTimeStamp = timestamp != 0 ? timestamp : (OTSYS_TIME() / 1000); getUnlockedKV()->set(achievement.name, toSaveTimeStamp); - m_achievementsUnlocked.push_back({ achievement.id, toSaveTimeStamp }); + m_achievementsUnlocked.emplace_back(achievement.id, toSaveTimeStamp); m_achievementsUnlocked.shrink_to_fit(); return true; } @@ -80,7 +80,8 @@ bool PlayerAchievement::isUnlocked(uint16_t id) const { } uint16_t PlayerAchievement::getPoints() const { - return m_player.kv()->scoped("achievements")->get("points")->getNumber(); + auto kvScoped = m_player.kv()->scoped("achievements")->get("points"); + return kvScoped ? static_cast(kvScoped->getNumber()) : 0; } void PlayerAchievement::addPoints(uint16_t toAddPoints) { @@ -109,12 +110,12 @@ void PlayerAchievement::loadUnlockedAchievements() { g_logger().debug("[{}] - Achievement {} found for player {}.", __FUNCTION__, achievementName, m_player.getName()); - m_achievementsUnlocked.push_back({ achievement.id, getUnlockedKV()->get(achievementName)->getNumber() }); + m_achievementsUnlocked.emplace_back(achievement.id, getUnlockedKV()->get(achievementName)->getNumber()); } } void PlayerAchievement::sendUnlockedSecretAchievements() { - std::vector> m_achievementsUnlocked; + std::vector> achievementsUnlocked; uint16_t unlockedSecret = 0; for (const auto &[achievId, achievCreatedTime] : getUnlockedAchievements()) { Achievement achievement = g_game().getAchievementById(achievId); @@ -126,10 +127,10 @@ void PlayerAchievement::sendUnlockedSecretAchievements() { unlockedSecret++; } - m_achievementsUnlocked.push_back({ achievement, achievCreatedTime }); + achievementsUnlocked.emplace_back(achievement, achievCreatedTime); } - m_player.sendCyclopediaCharacterAchievements(unlockedSecret, m_achievementsUnlocked); + m_player.sendCyclopediaCharacterAchievements(unlockedSecret, achievementsUnlocked); } const std::shared_ptr &PlayerAchievement::getUnlockedKV() { diff --git a/src/creatures/players/achievement/player_achievement.hpp b/src/creatures/players/achievement/player_achievement.hpp index d1073a9bf1e..e0c027e5808 100644 --- a/src/creatures/players/achievement/player_achievement.hpp +++ b/src/creatures/players/achievement/player_achievement.hpp @@ -31,11 +31,11 @@ class PlayerAchievement { explicit PlayerAchievement(Player &player); bool add(uint16_t id, bool message = true, uint32_t timestamp = 0); bool remove(uint16_t id); - bool isUnlocked(uint16_t id) const; - uint16_t getPoints() const; + [[nodiscard]] bool isUnlocked(uint16_t id) const; + [[nodiscard]] uint16_t getPoints() const; void addPoints(uint16_t toAddPoints); void removePoints(uint16_t toRemovePoints); - std::vector> getUnlockedAchievements() const; + [[nodiscard]] std::vector> getUnlockedAchievements() const; void loadUnlockedAchievements(); void sendUnlockedSecretAchievements(); const std::shared_ptr &getUnlockedKV(); diff --git a/src/creatures/players/cyclopedia/player_title.cpp b/src/creatures/players/cyclopedia/player_title.cpp index 624b0313457..64acc857b64 100644 --- a/src/creatures/players/cyclopedia/player_title.cpp +++ b/src/creatures/players/cyclopedia/player_title.cpp @@ -84,7 +84,8 @@ const std::vector> &PlayerTitle::getUnlockedTitles() } uint8_t PlayerTitle::getCurrentTitle() const { - return static_cast(m_player.kv()->scoped("titles")->get("current-title")->getNumber()); + auto title = m_player.kv()->scoped("titles")->get("current-title"); + return title ? static_cast(title->getNumber()) : 0; } void PlayerTitle::setCurrentTitle(uint8_t id) {