diff options
author | Shauren <shauren.trinity@gmail.com> | 2021-05-02 00:44:31 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2021-05-03 23:53:24 +0200 |
commit | 14098b28b39bc9d1ea17d18a7ecd3dd610f29cdc (patch) | |
tree | 187ff67ad06e196880bf89cf1eb749eaa3a79d37 /src/server/game/Conditions/ConditionMgr.cpp | |
parent | ede3e415ab4dab39d2f88f588a7f0f79d6c4187b (diff) |
Core/Chat: Allow incorrect spell/skill language assignments to mirror client behavior
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) |