fix(Core/PacketsIO): Send correct messages about server first achievements depending on faction. (#3379)

This commit is contained in:
Stefano Borzì
2020-09-21 12:09:08 +02:00
committed by GitHub
parent 4e5440ad91
commit 868081e959
@@ -675,13 +675,19 @@ void AchievementMgr::SendAchievementEarned(AchievementEntry const* achievement)
if (achievement->flags & (ACHIEVEMENT_FLAG_REALM_FIRST_KILL | ACHIEVEMENT_FLAG_REALM_FIRST_REACH)) if (achievement->flags & (ACHIEVEMENT_FLAG_REALM_FIRST_KILL | ACHIEVEMENT_FLAG_REALM_FIRST_REACH))
{ {
TeamId teamId = GetPlayer()->GetTeamId();
// broadcast realm first reached // broadcast realm first reached
WorldPacket data(SMSG_SERVER_FIRST_ACHIEVEMENT, GetPlayer()->GetName().size() + 1 + 8 + 4 + 4); WorldPacket data(SMSG_SERVER_FIRST_ACHIEVEMENT, GetPlayer()->GetName().size() + 1 + 8 + 4 + 4);
data << GetPlayer()->GetName(); data << GetPlayer()->GetName();
data << uint64(GetPlayer()->GetGUID()); data << uint64(GetPlayer()->GetGUID());
data << uint32(achievement->ID); data << uint32(achievement->ID);
data << uint32(0); // 1=link supplied string as player name, 0=display plain string std::size_t linkTypePos = data.wpos();
sWorld->SendGlobalMessage(&data); data << uint32(1); // display name as clickable link in chat
sWorld->SendGlobalMessage(&data, nullptr, teamId);
data.put<uint32>(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 // if player is in world he can tell his friends about new achievement
else if (GetPlayer()->IsInWorld()) else if (GetPlayer()->IsInWorld())