From 77c930249dda254b14ec7613d294b35be0198c04 Mon Sep 17 00:00:00 2001 From: crackm Date: Fri, 9 Apr 2010 16:00:05 +0400 Subject: [PATCH] [9707] Fixed typo added by Vladimir to patch in [9704]. Signed-off-by: VladimirMangos Also add check to prevent have NONE gender with some other for same entry in `achievement_reward` and `locales_achievement_reward`. --- src/game/AchievementMgr.cpp | 34 ++++++++++++++++++++++++++++++++++ src/game/AchievementMgr.h | 4 ++-- src/shared/revision_nr.h | 2 +- 3 files changed, 37 insertions(+), 3 deletions(-) diff --git a/src/game/AchievementMgr.cpp b/src/game/AchievementMgr.cpp index 841ea1b1f..74321eea2 100644 --- a/src/game/AchievementMgr.cpp +++ b/src/game/AchievementMgr.cpp @@ -2169,6 +2169,23 @@ void AchievementGlobalMgr::LoadRewards() if (reward.gender >= MAX_GENDER) sLog.outErrorDb( "Table `achievement_reward` (Entry: %u) has wrong gender %u.", entry, reward.gender); + // GENDER_NONE must be single (so or already in and none must be attempt added new data or just adding and none in) + // other duplicate cases prevented by DB primary key + bool dup = false; + AchievementRewards::const_iterator iter_low = m_achievementRewards.lower_bound(entry); + AchievementRewards::const_iterator iter_up = m_achievementRewards.upper_bound(entry); + for (AchievementRewards::const_iterator iter = iter_low; iter != iter_up; ++iter) + { + if (iter->second.gender == GENDER_NONE || reward.gender == GENDER_NONE) + { + dup = true; + sLog.outErrorDb( "Table `achievement_reward` must have single GENDER_NONE (%u) case (Entry: %u), ignore duplicate case", GENDER_NONE, entry); + break; + } + } + if (dup) + continue; + if ((reward.titleId[0]==0)!=(reward.titleId[1]==0)) sLog.outErrorDb( "Table `achievement_reward` (Entry: %u) has title (A: %u H: %u) only for one from teams.", entry, reward.titleId[0], reward.titleId[1]); @@ -2279,6 +2296,23 @@ void AchievementGlobalMgr::LoadRewardLocales() if (data.gender >= MAX_GENDER) sLog.outErrorDb( "Table `locales_achievement_reward` (Entry: %u) has wrong gender %u.", entry, data.gender); + // GENDER_NONE must be single (so or already in and none must be attempt added new data or just adding and none in) + // other duplicate cases prevented by DB primary key + bool dup = false; + AchievementRewardLocales::const_iterator iter_low = m_achievementRewardLocales.lower_bound(entry); + AchievementRewardLocales::const_iterator iter_up = m_achievementRewardLocales.upper_bound(entry); + for (AchievementRewardLocales::const_iterator iter = iter_low; iter != iter_up; ++iter) + { + if (iter->second.gender == GENDER_NONE || data.gender == GENDER_NONE) + { + dup = true; + sLog.outErrorDb( "Table `locales_achievement_reward` must have single GENDER_NONE (%u) case (Entry: %u), ignore duplicate case", GENDER_NONE, entry); + break; + } + } + if (dup) + continue; + for(int i = 1; i < MAX_LOCALE; ++i) { std::string str = fields[2+2*(i-1)].GetCppString(); diff --git a/src/game/AchievementMgr.h b/src/game/AchievementMgr.h index d66c11dbd..29377f79e 100644 --- a/src/game/AchievementMgr.h +++ b/src/game/AchievementMgr.h @@ -290,7 +290,7 @@ class AchievementGlobalMgr { AchievementRewards::const_iterator iter_low = m_achievementRewards.lower_bound(achievement->ID); AchievementRewards::const_iterator iter_up = m_achievementRewards.upper_bound(achievement->ID); - for (AchievementRewards::const_iterator iter = iter_low; iter != iter_low; ++iter) + for (AchievementRewards::const_iterator iter = iter_low; iter != iter_up; ++iter) if(iter->second.gender == GENDER_NONE || uint8(iter->second.gender) == gender) return &iter->second; @@ -301,7 +301,7 @@ class AchievementGlobalMgr { AchievementRewardLocales::const_iterator iter_low = m_achievementRewardLocales.lower_bound(achievement->ID); AchievementRewardLocales::const_iterator iter_up = m_achievementRewardLocales.upper_bound(achievement->ID); - for (AchievementRewardLocales::const_iterator iter = iter_low; iter != iter_low; ++iter) + for (AchievementRewardLocales::const_iterator iter = iter_low; iter != iter_up; ++iter) if(iter->second.gender == GENDER_NONE || uint8(iter->second.gender) == gender) return &iter->second; diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index a68610912..264843055 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "9706" + #define REVISION_NR "9707" #endif // __REVISION_NR_H__