refactor(Core/Achievement): Achivement earned message will use broadc… (#8485)

* refactor(Core/Achievement): Achivement earned message will use broadcast text instead of acore_string

* cherry-pick commit (465e4a0b0f)

Co-Authored-By: joschiwald <736792+joschiwald@users.noreply.github.com>

* sql

* fix build

* build

* restore gender
This commit is contained in:
Kitzunu
2021-10-14 13:11:13 +02:00
committed by GitHub
parent 1c40caa4d6
commit b96cecf98d
4 changed files with 35 additions and 24 deletions

View File

@@ -0,0 +1,3 @@
INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1634135727616655800');
DELETE FROM `acore_string` WHERE `entry` = 810;

View File

@@ -48,20 +48,26 @@ namespace Acore
class AchievementChatBuilder
{
public:
AchievementChatBuilder(Player const& player, ChatMsg msgtype, int32 textId, uint32 ach_id)
: i_player(player), i_msgtype(msgtype), i_textId(textId), i_achievementId(ach_id) {}
AchievementChatBuilder(Player const* player, ChatMsg msgType, uint32 textId, uint32 achievementId)
: _player(player), _msgType(msgType), _textId(textId), _achievementId(achievementId) { }
void operator()(WorldPacket& data, LocaleConstant loc_idx)
void operator()(WorldPacket& data, LocaleConstant locale)
{
std::string text = sObjectMgr->GetAcoreString(i_textId, loc_idx);
ChatHandler::BuildChatPacket(data, i_msgtype, LANG_UNIVERSAL, &i_player, &i_player, text, i_achievementId);
std::string text = "";
BroadcastText const* bct = sObjectMgr->GetBroadcastText(_textId);
if (bct)
{
ObjectMgr::GetLocaleString(_player->getGender() == GENDER_MALE ? bct->MaleText : bct->FemaleText, locale, text);
}
ChatHandler::BuildChatPacket(data, _msgType, LANG_UNIVERSAL, _player, _player, text, _achievementId);
}
private:
Player const& i_player;
ChatMsg i_msgtype;
int32 i_textId;
uint32 i_achievementId;
Player const* _player;
ChatMsg _msgType;
int32 _textId;
uint32 _achievementId;
};
} // namespace Acore
@@ -696,9 +702,9 @@ void AchievementMgr::SendAchievementEarned(AchievementEntry const* achievement)
Guild* guild = sGuildMgr->GetGuildById(GetPlayer()->GetGuildId());
if (guild)
{
Acore::AchievementChatBuilder say_builder(*GetPlayer(), CHAT_MSG_GUILD_ACHIEVEMENT, LANG_ACHIEVEMENT_EARNED, achievement->ID);
Acore::LocalizedPacketDo<Acore::AchievementChatBuilder> say_do(say_builder);
guild->BroadcastWorker(say_do, GetPlayer());
Acore::AchievementChatBuilder _builder(GetPlayer(), CHAT_MSG_GUILD_ACHIEVEMENT, BROADCAST_TEXT_ACHIEVEMENT_EARNED, achievement->ID);
Acore::LocalizedPacketDo<Acore::AchievementChatBuilder> _localizer(_builder);
guild->BroadcastWorker(_localizer, GetPlayer());
}
if (achievement->flags & (ACHIEVEMENT_FLAG_REALM_FIRST_KILL | ACHIEVEMENT_FLAG_REALM_FIRST_REACH))
@@ -739,11 +745,10 @@ void AchievementMgr::SendAchievementEarned(AchievementEntry const* achievement)
Cell cell(p);
cell.SetNoCreate();
Acore::AchievementChatBuilder say_builder(*GetPlayer(), CHAT_MSG_ACHIEVEMENT, LANG_ACHIEVEMENT_EARNED, achievement->ID);
Acore::LocalizedPacketDo<Acore::AchievementChatBuilder> say_do(say_builder);
Acore::PlayerDistWorker<Acore::LocalizedPacketDo<Acore::AchievementChatBuilder> > say_worker(GetPlayer(), sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_SAY), say_do);
TypeContainerVisitor<Acore::PlayerDistWorker<Acore::LocalizedPacketDo<Acore::AchievementChatBuilder> >, WorldTypeMapContainer > message(say_worker);
Cell::VisitWorldObjects(GetPlayer(), say_worker, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_SAY));
Acore::AchievementChatBuilder _builder(GetPlayer(), CHAT_MSG_ACHIEVEMENT, BROADCAST_TEXT_ACHIEVEMENT_EARNED, achievement->ID);
Acore::LocalizedPacketDo<Acore::AchievementChatBuilder> _localizer(_builder);
Acore::PlayerDistWorker<Acore::LocalizedPacketDo<Acore::AchievementChatBuilder> > _worker(GetPlayer(), sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_SAY), _localizer);
Cell::VisitWorldObjects(GetPlayer(), _worker, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_SAY));
}
WorldPacket data(SMSG_ACHIEVEMENT_EARNED, 8 + 4 + 8);

View File

@@ -18,6 +18,11 @@
#ifndef __ACORE_LANGUAGE_H
#define __ACORE_LANGUAGE_H
enum BroadcastTextIds
{
BROADCAST_TEXT_ACHIEVEMENT_EARNED = 29245,
};
enum AcoreStrings
{
// for chat commands
@@ -779,7 +784,7 @@ enum AcoreStrings
LANG_NEED_CHARACTER_NAME = 807,
LANG_PLAYER_NOT_EXIST_OR_OFFLINE = 808,
LANG_ACCOUNT_FOR_PLAYER_NOT_FOUND = 809,
LANG_ACHIEVEMENT_EARNED = 810,
// unused = 810,
LANG_GUILD_MASTER = 811,
LANG_GUILD_OFFICER = 812,
LANG_GUILD_VETERAN = 813,

View File

@@ -29,9 +29,7 @@ class CreatureTextBuilder
{
public:
CreatureTextBuilder(WorldObject* obj, uint8 gender, ChatMsg msgtype, uint8 textGroup, uint32 id, uint32 language, WorldObject const* target)
: _source(obj), _gender(gender), _msgType(msgtype), _textGroup(textGroup), _textId(id), _language(language), _target(target)
{
}
: _source(obj), _gender(gender), _msgType(msgtype), _textGroup(textGroup), _textId(id), _language(language), _target(target) { }
size_t operator()(WorldPacket* data, LocaleConstant locale) const
{
@@ -40,6 +38,7 @@ public:
return ChatHandler::BuildChatPacket(*data, _msgType, Language(_language), _source, _target, text, 0, "", locale);
}
private:
WorldObject* _source;
uint8 _gender;
ChatMsg _msgType;
@@ -53,9 +52,7 @@ class PlayerTextBuilder
{
public:
PlayerTextBuilder(WorldObject* obj, WorldObject* speaker, uint8 gender, ChatMsg msgtype, uint8 textGroup, uint32 id, uint32 language, WorldObject const* target)
: _source(obj), _talker(speaker), _gender(gender), _msgType(msgtype), _textGroup(textGroup), _textId(id), _language(language), _target(target)
{
}
: _source(obj), _talker(speaker), _gender(gender), _msgType(msgtype), _textGroup(textGroup), _textId(id), _language(language), _target(target) { }
size_t operator()(WorldPacket* data, LocaleConstant locale) const
{
@@ -64,6 +61,7 @@ public:
return ChatHandler::BuildChatPacket(*data, _msgType, Language(_language), _talker, _target, text, 0, "", locale);
}
private:
WorldObject* _source;
WorldObject* _talker;
uint8 _gender;