aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Conditions/ConditionMgr.cpp
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2021-05-02 00:44:31 +0200
committerShauren <shauren.trinity@gmail.com>2021-05-03 23:53:24 +0200
commit14098b28b39bc9d1ea17d18a7ecd3dd610f29cdc (patch)
tree187ff67ad06e196880bf89cf1eb749eaa3a79d37 /src/server/game/Conditions/ConditionMgr.cpp
parentede3e415ab4dab39d2f88f588a7f0f79d6c4187b (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.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)