AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
AutobroadcastMgr Class Reference

#include "AutobroadcastMgr.h"

Public Member Functions

void LoadAutobroadcasts ()
 
void LoadAutobroadcastsLocalized ()
 
void SendAutobroadcasts ()
 

Static Public Member Functions

static AutobroadcastMgrinstance ()
 

Private Types

typedef std::map< uint8, std::vector< std::string > > AutobroadcastsMap
 
typedef std::map< uint8, uint8AutobroadcastsWeightMap
 

Private Member Functions

void SendWorldAnnouncement (uint8 textId)
 
void SendNotificationAnnouncement (uint8 textId)
 

Private Attributes

AutobroadcastsMap _autobroadcasts
 
AutobroadcastsWeightMap _autobroadcastsWeights
 
AnnounceType _announceType
 

Detailed Description

Member Typedef Documentation

◆ AutobroadcastsMap

typedef std::map<uint8, std::vector<std::string> > AutobroadcastMgr::AutobroadcastsMap
private

◆ AutobroadcastsWeightMap

Member Function Documentation

◆ instance()

AutobroadcastMgr * AutobroadcastMgr::instance ( )
static
25{
27 return &instance;
28}
Definition AutobroadcastMgr.h:33
static AutobroadcastMgr * instance()
Definition AutobroadcastMgr.cpp:24

References instance().

Referenced by instance().

◆ LoadAutobroadcasts()

void AutobroadcastMgr::LoadAutobroadcasts ( )
31{
32 uint32 oldMSTime = getMSTime();
33
34 _autobroadcasts.clear();
36
37 uint32 realmId = sConfigMgr->GetOption<int32>("RealmID", 0);
39 stmt->SetData(0, realmId);
40 PreparedQueryResult result = LoginDatabase.Query(stmt);
41
42 if (!result)
43 {
44 LOG_WARN("autobroadcast", ">> Loaded 0 autobroadcasts definitions. DB table `autobroadcast` is empty for this realm!");
45 return;
46 }
47
48 _announceType = static_cast<AnnounceType>(sWorld->getIntConfig(CONFIG_AUTOBROADCAST_CENTER));
49
50 if (_announceType < AnnounceType::World || _announceType > AnnounceType::Both)
51 {
52 LOG_ERROR("autobroadcast", "AutobroadcastMgr::LoadAutobroadcasts: Config option AutoBroadcast.Center set to not allowed value {}. Set to default value 0", (int8)_announceType);
54 }
55
56 do
57 {
58 Field* fields = result->Fetch();
59 uint8 textId = fields[0].Get<uint8>();
60
61 ObjectMgr::AddLocaleString(fields[2].Get<std::string>(), DEFAULT_LOCALE, _autobroadcasts[textId]);
62 _autobroadcastsWeights[textId] = fields[1].Get<uint8>();
63
64 } while (result->NextRow());
65
66 LOG_INFO("server.loading", ">> Loaded {} Autobroadcast Definitions in {} ms", _autobroadcasts.size(), GetMSTimeDiffToNow(oldMSTime));
67}
AnnounceType
Definition AutobroadcastMgr.h:26
#define DEFAULT_LOCALE
Definition Common.h:79
#define sConfigMgr
Definition Config.h:74
std::shared_ptr< PreparedResultSet > PreparedQueryResult
Definition DatabaseEnvFwd.h:45
DatabaseWorkerPool< LoginDatabaseConnection > LoginDatabase
Accessor to the realm/login database.
Definition DatabaseEnv.cpp:22
std::int32_t int32
Definition Define.h:103
std::uint8_t uint8
Definition Define.h:109
std::uint32_t uint32
Definition Define.h:107
std::int8_t int8
Definition Define.h:105
@ CONFIG_AUTOBROADCAST_CENTER
Definition IWorld.h:359
#define LOG_INFO(filterType__,...)
Definition Log.h:165
#define LOG_ERROR(filterType__,...)
Definition Log.h:157
#define LOG_WARN(filterType__,...)
Definition Log.h:161
@ LOGIN_SEL_AUTOBROADCAST
Definition LoginDatabase.h:99
uint32 GetMSTimeDiffToNow(uint32 oldMSTime)
Definition Timer.h:131
uint32 getMSTime()
Definition Timer.h:103
AutobroadcastsMap _autobroadcasts
Definition AutobroadcastMgr.h:48
AnnounceType _announceType
Definition AutobroadcastMgr.h:51
AutobroadcastsWeightMap _autobroadcastsWeights
Definition AutobroadcastMgr.h:49
Class used to access individual fields of database query result.
Definition Field.h:98
std::enable_if_t< std::is_arithmetic_v< T >, T > Get() const
Definition Field.h:112
static void AddLocaleString(std::string &&s, LocaleConstant locale, std::vector< std::string > &data)
Definition ObjectMgr.cpp:382
Acore::Types::is_default< T > SetData(const uint8 index, T value)
Definition PreparedStatement.h:77
Definition PreparedStatement.h:157
#define sWorld
Definition World.h:363

References _announceType, _autobroadcasts, _autobroadcastsWeights, ObjectMgr::AddLocaleString(), Both, CONFIG_AUTOBROADCAST_CENTER, DEFAULT_LOCALE, Field::Get(), getMSTime(), GetMSTimeDiffToNow(), LOG_ERROR, LOG_INFO, LOG_WARN, LOGIN_SEL_AUTOBROADCAST, LoginDatabase, sConfigMgr, PreparedStatementBase::SetData(), sWorld, and World.

◆ LoadAutobroadcastsLocalized()

void AutobroadcastMgr::LoadAutobroadcastsLocalized ( )
70{
71 uint32 oldMSTime = getMSTime();
72 uint32 realmId = sConfigMgr->GetOption<int32>("RealmID", 0);
73
74 if (_autobroadcasts.empty())
75 return;
76
78 stmt->SetData(0, realmId);
79 PreparedQueryResult result = LoginDatabase.Query(stmt);
80
81 if (!result)
82 {
83 LOG_WARN("server.loading", ">> Loaded 0 localized autobroadcasts definitions. DB table `autobroadcast_localized` is empty for this realm!");
84 LOG_INFO("server.loading", " ");
85 return;
86 }
87
88 uint8 count = 0;
89
90 do
91 {
92 Field* fields = result->Fetch();
93 uint8 textId = fields[0].Get<uint8>();
94 LocaleConstant locale = GetLocaleByName(fields[1].Get<std::string>());
95
97 continue;
98
99 ObjectMgr::AddLocaleString(fields[2].Get<std::string>(), locale, _autobroadcasts[textId]);
100 count++;
101 } while (result->NextRow());
102
103 LOG_INFO("server.loading", ">> Loaded {} Localized Autobroadcast Definitions in {} ms", count, GetMSTimeDiffToNow(oldMSTime));
104 LOG_INFO("server.loading", " ");
105}
LocaleConstant GetLocaleByName(const std::string &name)
Definition Common.cpp:42
LocaleConstant
Definition Common.h:65
@ LOGIN_SEL_AUTOBROADCAST_LOCALIZED
Definition LoginDatabase.h:100
static std::string_view GetLocaleString(std::vector< std::string > const &data, std::size_t locale)
Definition ObjectMgr.h:1409

References _autobroadcasts, ObjectMgr::AddLocaleString(), DEFAULT_LOCALE, Field::Get(), GetLocaleByName(), ObjectMgr::GetLocaleString(), getMSTime(), GetMSTimeDiffToNow(), LOG_INFO, LOG_WARN, LOGIN_SEL_AUTOBROADCAST_LOCALIZED, LoginDatabase, sConfigMgr, and PreparedStatementBase::SetData().

◆ SendAutobroadcasts()

void AutobroadcastMgr::SendAutobroadcasts ( )
108{
109 if (_autobroadcasts.empty())
110 return;
111
112 uint32 weight = 0;
113 uint8 textId = 0;
114 AutobroadcastsWeightMap selectionWeights;
115
116 for (AutobroadcastsWeightMap::const_iterator it = _autobroadcastsWeights.begin(); it != _autobroadcastsWeights.end(); ++it)
117 {
118 if (it->second)
119 {
120 weight += it->second;
121 selectionWeights[it->first] = it->second;
122 }
123 }
124
125 if (weight)
126 {
127 uint32 selectedWeight = urand(0, weight - 1);
128 weight = 0;
129 for (AutobroadcastsWeightMap::const_iterator it = selectionWeights.begin(); it != selectionWeights.end(); ++it)
130 {
131 weight += it->second;
132 if (selectedWeight < weight)
133 {
134 textId = it->first;
135 break;
136 }
137 }
138 }
139 else
140 {
141 textId = urand(0, _autobroadcasts.size());
142 }
143
144 switch (_announceType)
145 {
147 SendWorldAnnouncement(textId);
148 break;
151 break;
153 SendWorldAnnouncement(textId);
155 default:
156 break;
157 }
158
159 LOG_DEBUG("autobroadcast", "AutobroadcastMgr::SendAutobroadcasts: '{}'", textId);
160}
#define LOG_DEBUG(filterType__,...)
Definition Log.h:169
uint32 urand(uint32 min, uint32 max)
Definition Random.cpp:44
std::map< uint8, uint8 > AutobroadcastsWeightMap
Definition AutobroadcastMgr.h:46
void SendWorldAnnouncement(uint8 textId)
Definition AutobroadcastMgr.cpp:162
void SendNotificationAnnouncement(uint8 textId)
Definition AutobroadcastMgr.cpp:184

References _announceType, _autobroadcasts, _autobroadcastsWeights, Both, LOG_DEBUG, Notification, SendNotificationAnnouncement(), SendWorldAnnouncement(), urand(), and World.

◆ SendNotificationAnnouncement()

void AutobroadcastMgr::SendNotificationAnnouncement ( uint8  textId)
private
185{
186 ChatHandler(nullptr).DoForAllValidSessions([&](Player* player)
187 {
188 // Retrieve player's locale
189 LocaleConstant locale = player->GetSession()->GetSessionDbLocaleIndex();
190
191 if (!_autobroadcasts.contains(textId))
192 return;
193
194 // Get localized message
195 std::string_view localizedMessage = ObjectMgr::GetLocaleString(_autobroadcasts[textId], locale);
196
197 // Check if there is a localized message if not use default one.
198 if (localizedMessage.empty())
199 localizedMessage = ObjectMgr::GetLocaleString(_autobroadcasts[textId], DEFAULT_LOCALE);
200
201 // Prepare the WorldPacket
202 WorldPacket data(SMSG_NOTIFICATION, (localizedMessage.size() + 1));
203 data << localizedMessage;
204
205 // Send packet to the player
206 player->GetSession()->SendPacket(&data);
207 });
208}
Definition Chat.h:37
void DoForAllValidSessions(std::function< void(Player *)> exec)
Definition Chat.cpp:444
Definition Player.h:1081
WorldSession * GetSession() const
Definition Player.h:2005
Definition WorldPacket.h:26
void SendPacket(WorldPacket const *packet)
Send a packet to the client.
Definition WorldSession.cpp:226
@ SMSG_NOTIFICATION
Definition Opcodes.h:489

References _autobroadcasts, DEFAULT_LOCALE, ChatHandler::DoForAllValidSessions(), ObjectMgr::GetLocaleString(), Player::GetSession(), WorldSession::SendPacket(), and SMSG_NOTIFICATION.

Referenced by SendAutobroadcasts().

◆ SendWorldAnnouncement()

void AutobroadcastMgr::SendWorldAnnouncement ( uint8  textId)
private
163{
164 // Send localized messages to all sessions
165 ChatHandler(nullptr).DoForAllValidSessions([&](Player* player)
166 {
167 // Get player's locale
168 LocaleConstant locale = player->GetSession()->GetSessionDbLocaleIndex();
169
170 if (!_autobroadcasts.contains(textId))
171 return;
172
173 std::string_view localizedMessage = ObjectMgr::GetLocaleString(_autobroadcasts[textId], locale);
174
175 // Check if there is a localized message if not use default one.
176 if (localizedMessage.empty())
177 localizedMessage = ObjectMgr::GetLocaleString(_autobroadcasts[textId], DEFAULT_LOCALE);
178
179 // Send the localized or fallback message
181 });
182}
@ ANNOUNCER_FLAG_DISABLE_AUTOBROADCAST
Definition PlayerSettings.h:35
void SendWorldTextOptional(std::string_view str, uint32 flag)
Definition Chat.cpp:143

References _autobroadcasts, ANNOUNCER_FLAG_DISABLE_AUTOBROADCAST, DEFAULT_LOCALE, ChatHandler::DoForAllValidSessions(), ObjectMgr::GetLocaleString(), Player::GetSession(), and ChatHandler::SendWorldTextOptional().

Referenced by SendAutobroadcasts().

Member Data Documentation

◆ _announceType

AnnounceType AutobroadcastMgr::_announceType
private

◆ _autobroadcasts

◆ _autobroadcastsWeights

AutobroadcastsWeightMap AutobroadcastMgr::_autobroadcastsWeights
private

The documentation for this class was generated from the following files: