Core/Achievements: Fixed achievement SMSG_ACHIEVEMENT_EARNED not being sent to self

This commit is contained in:
Shauren
2024-04-15 20:09:34 +02:00
parent 0f61046960
commit 0384d90663
3 changed files with 11 additions and 11 deletions

View File

@@ -671,14 +671,14 @@ void PlayerAchievementMgr::SendAchievementEarned(AchievementEntry const* achieve
receiver->SendDirectMessage(achievementEarned.Write());
};
achievementEarnedBuilder(_owner);
if (!(achievement->Flags & ACHIEVEMENT_FLAG_TRACKING_FLAG))
{
float dist = sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_SAY);
Trinity::MessageDistDeliverer notifier(_owner, achievementEarnedBuilder, dist);
Cell::VisitWorldObjects(_owner, notifier, dist);
}
else
achievementEarnedBuilder(_owner);
}
void PlayerAchievementMgr::SendPacket(WorldPacket const* data) const
@@ -702,7 +702,7 @@ void GuildAchievementMgr::Reset()
ObjectGuid guid = _owner->GetGUID();
for (std::pair<uint32 const, CompletedAchievementData> const& completedAchievement : _completedAchievements)
{
auto packetBuilder = [&](Player const* receiver)
_owner->BroadcastWorker([&](Player const* receiver)
{
WorldPackets::Achievement::GuildAchievementDeleted guildAchievementDeleted;
guildAchievementDeleted.AchievementID = completedAchievement.first;
@@ -710,8 +710,7 @@ void GuildAchievementMgr::Reset()
guildAchievementDeleted.TimeDeleted = *GameTime::GetUtcWowTime();
guildAchievementDeleted.TimeDeleted += receiver->GetSession()->GetTimezoneOffset();
receiver->SendDirectMessage(guildAchievementDeleted.Write());
};
_owner->BroadcastWorker(packetBuilder);
});
}
_achievementPoints = 0;
@@ -1020,7 +1019,7 @@ void GuildAchievementMgr::SendAchievementEarned(AchievementEntry const* achievem
sWorld->SendGlobalMessage(serverFirstAchievement.Write());
}
auto guildAchievementEarnedBuilder = [&](Player const* receiver)
_owner->BroadcastWorker([&](Player const* receiver)
{
WorldPackets::Achievement::GuildAchievementEarned guildAchievementEarned;
guildAchievementEarned.AchievementID = achievement->ID;
@@ -1028,8 +1027,7 @@ void GuildAchievementMgr::SendAchievementEarned(AchievementEntry const* achievem
guildAchievementEarned.TimeEarned = *GameTime::GetUtcWowTime();
guildAchievementEarned.TimeEarned += receiver->GetSession()->GetTimezoneOffset();
receiver->SendDirectMessage(guildAchievementEarned.Write());
};
_owner->BroadcastWorker(guildAchievementEarnedBuilder);
});
}
void GuildAchievementMgr::SendPacket(WorldPacket const* data) const

View File

@@ -51,6 +51,9 @@ void SendVignetteUpdate(VignetteData const& vignette, WorldObject const* owner)
receiver->SendDirectMessage(vignetteUpdate.GetRawPacket());
};
if (Player const* playerOwner = owner->ToPlayer())
sender(playerOwner);
Trinity::MessageDistDeliverer notifier(owner, sender, owner->GetVisibilityRange());
Cell::VisitWorldObjects(owner, notifier, owner->GetVisibilityRange());
}

View File

@@ -3761,7 +3761,7 @@ void Guild::AddGuildNews(uint8 type, ObjectGuid guid, uint32 flags, uint32 value
NewsLogEntry& news = m_newsLog.AddEvent(trans, m_id, m_newsLog.GetNextGUID(), GuildNews(type), guid, flags, value);
CharacterDatabase.CommitTransaction(trans);
auto packetBuilder = [&](Player const* receiver)
BroadcastWorker([&](Player const* receiver)
{
WorldPackets::Guild::GuildNews newsPacket;
newsPacket.NewsEvents.reserve(1);
@@ -3769,8 +3769,7 @@ void Guild::AddGuildNews(uint8 type, ObjectGuid guid, uint32 flags, uint32 value
newsPacket.NewsEvents.back().CompletedDate += receiver->GetSession()->GetTimezoneOffset();
receiver->SendDirectMessage(newsPacket.Write());
};
BroadcastWorker(packetBuilder);
});
}
bool Guild::HasAchieved(uint32 achievementId) const