From c75d8b9174b1b150b4b01639ee5c4fedcad1cc47 Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Sat, 24 Apr 2021 20:34:23 +0200 Subject: [PATCH] feat(Core/Achievements): Send guild's name instead of the player's one when achieved realm first kill. (#5409) --- .../game/Achievements/AchievementMgr.cpp | 39 +++++++++++++------ 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp index 9cc517d97..2dcd51aa4 100644 --- a/src/server/game/Achievements/AchievementMgr.cpp +++ b/src/server/game/Achievements/AchievementMgr.cpp @@ -665,7 +665,8 @@ void AchievementMgr::SendAchievementEarned(AchievementEntry const* achievement) LOG_DEBUG("achievement", "AchievementMgr::SendAchievementEarned(%u)", achievement->ID); #endif - if (Guild* guild = sGuildMgr->GetGuildById(GetPlayer()->GetGuildId())) + Guild* guild = sGuildMgr->GetGuildById(GetPlayer()->GetGuildId()); + if (guild) { acore::AchievementChatBuilder say_builder(*GetPlayer(), CHAT_MSG_GUILD_ACHIEVEMENT, LANG_ACHIEVEMENT_EARNED, achievement->ID); acore::LocalizedPacketDo say_do(say_builder); @@ -674,19 +675,33 @@ void AchievementMgr::SendAchievementEarned(AchievementEntry const* achievement) if (achievement->flags & (ACHIEVEMENT_FLAG_REALM_FIRST_KILL | ACHIEVEMENT_FLAG_REALM_FIRST_REACH)) { - TeamId teamId = GetPlayer()->GetTeamId(); + // If guild exists - send its name to the server + // If guild does not exist - send player's name to the server + if (achievement->flags & ACHIEVEMENT_FLAG_REALM_FIRST_KILL && guild) + { + WorldPacket data(SMSG_SERVER_FIRST_ACHIEVEMENT, guild->GetName().size() + 1 + 8 + 4 + 4); + data << guild->GetName(); + data << uint64(GetPlayer()->GetGUID()); + data << uint32(achievement->ID); + data << uint32(0); // display name as plain string in chat (always 0 for guild) + sWorld->SendGlobalMessage(&data); + } + else + { + 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); - std::size_t linkTypePos = data.wpos(); - data << uint32(1); // display name as clickable link in chat - sWorld->SendGlobalMessage(&data, nullptr, teamId); + // 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); + 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); + 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())