From 868081e9597b60beb57f4a11be544bc041504400 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefano=20Borz=C3=AC?= Date: Mon, 21 Sep 2020 12:09:08 +0200 Subject: [PATCH] fix(Core/PacketsIO): Send correct messages about server first achievements depending on faction. (#3379) --- src/server/game/Achievements/AchievementMgr.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp index 86523eaee..30be2a96f 100644 --- a/src/server/game/Achievements/AchievementMgr.cpp +++ b/src/server/game/Achievements/AchievementMgr.cpp @@ -675,13 +675,19 @@ void AchievementMgr::SendAchievementEarned(AchievementEntry const* achievement) if (achievement->flags & (ACHIEVEMENT_FLAG_REALM_FIRST_KILL | ACHIEVEMENT_FLAG_REALM_FIRST_REACH)) { + TeamId teamId = GetPlayer()->GetTeamId(); + // broadcast realm first reached WorldPacket data(SMSG_SERVER_FIRST_ACHIEVEMENT, GetPlayer()->GetName().size() + 1 + 8 + 4 + 4); data << GetPlayer()->GetName(); data << uint64(GetPlayer()->GetGUID()); data << uint32(achievement->ID); - data << uint32(0); // 1=link supplied string as player name, 0=display plain string - sWorld->SendGlobalMessage(&data); + std::size_t linkTypePos = data.wpos(); + data << uint32(1); // display name as clickable link in chat + sWorld->SendGlobalMessage(&data, nullptr, teamId); + + data.put(linkTypePos, 0); // display name as plain string in chat + sWorld->SendGlobalMessage(&data, nullptr, teamId == TEAM_ALLIANCE ? TEAM_HORDE : TEAM_ALLIANCE); } // if player is in world he can tell his friends about new achievement else if (GetPlayer()->IsInWorld()) @@ -2222,7 +2228,7 @@ void AchievementMgr::CompletedAchievement(AchievementEntry const* achievement) { std::string subject = reward->subject; std::string text = reward->text; - + LocaleConstant localeConstant = GetPlayer()->GetSession()->GetSessionDbLocaleIndex(); if (localeConstant != LOCALE_enUS) { @@ -2232,10 +2238,10 @@ void AchievementMgr::CompletedAchievement(AchievementEntry const* achievement) ObjectMgr::GetLocaleString(loc->Text, localeConstant, text); } } - + draft = MailDraft(subject, text); } - + SQLTransaction trans = CharacterDatabase.BeginTransaction(); Item* item = reward->itemId ? Item::CreateItem(reward->itemId, 1, GetPlayer()) : nullptr;