diff --git a/data/sql/updates/pending_db_world/rev_1634135727616655800.sql b/data/sql/updates/pending_db_world/rev_1634135727616655800.sql new file mode 100644 index 000000000..08617d50e --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1634135727616655800.sql @@ -0,0 +1,3 @@ +INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1634135727616655800'); + +DELETE FROM `acore_string` WHERE `entry` = 810; diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp index 1f4996d0f..0a37bd9cb 100644 --- a/src/server/game/Achievements/AchievementMgr.cpp +++ b/src/server/game/Achievements/AchievementMgr.cpp @@ -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 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 _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 say_do(say_builder); - Acore::PlayerDistWorker > say_worker(GetPlayer(), sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_SAY), say_do); - TypeContainerVisitor >, 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 _localizer(_builder); + Acore::PlayerDistWorker > _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); diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h index 454d14819..afeebec78 100644 --- a/src/server/game/Miscellaneous/Language.h +++ b/src/server/game/Miscellaneous/Language.h @@ -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, diff --git a/src/server/game/Texts/CreatureTextMgr.cpp b/src/server/game/Texts/CreatureTextMgr.cpp index a5fd7e2e2..637f034c1 100644 --- a/src/server/game/Texts/CreatureTextMgr.cpp +++ b/src/server/game/Texts/CreatureTextMgr.cpp @@ -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;