aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Conditions/ConditionMgr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Conditions/ConditionMgr.cpp')
-rw-r--r--src/server/game/Conditions/ConditionMgr.cpp20
1 files changed, 11 insertions, 9 deletions
diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp
index bdd97316759..3580a6903ec 100644
--- a/src/server/game/Conditions/ConditionMgr.cpp
+++ b/src/server/game/Conditions/ConditionMgr.cpp
@@ -2625,18 +2625,20 @@ bool ConditionMgr::IsPlayerMeetingCondition(Player const* player, PlayerConditio
if (condition->LanguageID)
{
- if (LanguageDesc const* langDesc = sLanguageMgr->GetLanguageDescById(condition->LanguageID))
+ int32 languageSkill = 0;
+ if (player->HasAuraTypeWithMiscvalue(SPELL_AURA_COMPREHEND_LANGUAGE, condition->LanguageID))
+ languageSkill = 300;
+ else
{
- int32 languageSkill = player->GetSkillValue(langDesc->SkillId);
- if (!languageSkill && player->HasAuraTypeWithMiscvalue(SPELL_AURA_COMPREHEND_LANGUAGE, condition->LanguageID))
- languageSkill = 300;
+ for (std::pair<uint32 const, LanguageDesc> const& languageDesc : sLanguageMgr->GetLanguageDescById(Language(condition->LanguageID)))
+ languageSkill = std::max<int32>(languageSkill, player->GetSkillValue(languageDesc.second.SkillId));
+ }
- if (condition->MinLanguage && languageSkill < condition->MinLanguage)
- return false;
+ if (condition->MinLanguage && languageSkill < condition->MinLanguage)
+ return false;
- if (condition->MaxLanguage && languageSkill > condition->MaxLanguage)
- return false;
- }
+ if (condition->MaxLanguage && languageSkill > condition->MaxLanguage)
+ return false;
}
if (condition->MinFactionID[0] && condition->MinFactionID[1] && condition->MinFactionID[2] && condition->MaxFactionID)