diff options
Diffstat (limited to 'src/server/game/Conditions/ConditionMgr.cpp')
-rw-r--r-- | src/server/game/Conditions/ConditionMgr.cpp | 20 |
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) |