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

The World. More...

#include "World.h"

Inheritance diagram for World:
IWorld

Public Types

typedef std::list< WorldSession * > Queue
 

Public Member Functions

 World ()
 World constructor.
 
 ~World () override
 World destructor.
 
WorldSessionFindSession (uint32 id) const override
 Find a session by its id.
 
WorldSessionFindOfflineSession (uint32 id) const override
 
WorldSessionFindOfflineSessionForCharacterGUID (ObjectGuid::LowType guidLow) const override
 
void AddSession (WorldSession *s) override
 
bool KickSession (uint32 id) override
 Remove a given session.
 
void UpdateMaxSessionCounters () override
 Get the number of current active sessions.
 
const SessionMapGetAllSessions () const override
 
uint32 GetActiveAndQueuedSessionCount () const override
 
uint32 GetActiveSessionCount () const override
 
uint32 GetQueuedSessionCount () const override
 
uint32 GetMaxQueuedSessionCount () const override
 Get the maximum number of parallel sessions on the server since last reboot.
 
uint32 GetMaxActiveSessionCount () const override
 
uint32 GetPlayerCount () const override
 Get number of players.
 
uint32 GetMaxPlayerCount () const override
 
void IncreasePlayerCount () override
 Increase/Decrease number of players.
 
void DecreasePlayerCount () override
 
PlayerFindPlayerInZone (uint32 zone) override
 Find a player in a specified zone.
 
bool IsClosed () const override
 Deny clients?
 
void SetClosed (bool val) override
 Close world.
 
AccountTypes GetPlayerSecurityLimit () const override
 Security level limitations.
 
void SetPlayerSecurityLimit (AccountTypes sec) override
 
void LoadDBAllowedSecurityLevel () override
 
void SetPlayerAmountLimit (uint32 limit) override
 Active session server limit.
 
uint32 GetPlayerAmountLimit () const override
 
void AddQueuedPlayer (WorldSession *) override
 
bool RemoveQueuedPlayer (WorldSession *session) override
 
int32 GetQueuePos (WorldSession *) override
 
bool HasRecentlyDisconnected (WorldSession *) override
 
bool getAllowMovement () const override
 
void SetAllowMovement (bool allow) override
 Allow/Disallow object movements.
 
void SetNewCharString (std::string const &str) override
 Set the string for new characters (first login)
 
std::string const & GetNewCharString () const override
 Get the string for new characters (first login)
 
LocaleConstant GetDefaultDbcLocale () const override
 
std::string const & GetDataPath () const override
 Get the path where data (dbc, maps) are stored on disk.
 
Seconds GetNextDailyQuestsResetTime () const override
 Next daily quests and random bg reset time.
 
Seconds GetNextWeeklyQuestsResetTime () const override
 
Seconds GetNextRandomBGResetTime () const override
 
uint16 GetConfigMaxSkillValue () const override
 Get the maximum skill level a player can reach.
 
void SetInitialWorldSettings () override
 Initialize the World.
 
void LoadConfigSettings (bool reload=false) override
 Initialize config values.
 
void SendWorldText (uint32 string_id,...) override
 Send a System Message to all players (except self if mentioned)
 
void SendGlobalText (const char *text, WorldSession *self) override
 
void SendGMText (uint32 string_id,...) override
 Send a System Message to all GMs (except self if mentioned)
 
void SendGlobalMessage (WorldPacket const *packet, WorldSession *self=nullptr, TeamId teamId=TEAM_NEUTRAL) override
 Send a packet to all players (except self if mentioned)
 
void SendGlobalGMMessage (WorldPacket const *packet, WorldSession *self=nullptr, TeamId teamId=TEAM_NEUTRAL) override
 Send a packet to all GMs (except self if mentioned)
 
bool SendZoneMessage (uint32 zone, WorldPacket const *packet, WorldSession *self=nullptr, TeamId teamId=TEAM_NEUTRAL) override
 Send a packet to all players (or players selected team) in the zone (except self if mentioned)
 
void SendZoneText (uint32 zone, const char *text, WorldSession *self=nullptr, TeamId teamId=TEAM_NEUTRAL) override
 Send a System Message to all players in the zone (except self if mentioned)
 
void SendServerMessage (ServerMessageType messageID, std::string stringParam="", Player *player=nullptr) override
 Send a server message to the user(s)
 
void SendWorldTextOptional (uint32 string_id, uint32 flag,...) override
 
bool IsShuttingDown () const override
 Are we in the middle of a shutdown?
 
uint32 GetShutDownTimeLeft () const override
 
void ShutdownServ (uint32 time, uint32 options, uint8 exitcode, const std::string &reason=std::string()) override
 Shutdown the server.
 
void ShutdownCancel () override
 Cancel a planned server shutdown.
 
void ShutdownMsg (bool show=false, Player *player=nullptr, const std::string &reason=std::string()) override
 Display a shutdown message to the user(s)
 
void Update (uint32 diff) override
 Update the World !
 
void UpdateSessions (uint32 diff) override
 
void setRate (Rates rate, float value) override
 Set a server rate (see Rates)
 
float getRate (Rates rate) const override
 Get a server rate (see Rates)
 
void setBoolConfig (WorldBoolConfigs index, bool value) override
 Set a server configuration element (see #WorldConfigs)
 
bool getBoolConfig (WorldBoolConfigs index) const override
 Get a server configuration element (see #WorldConfigs)
 
void setFloatConfig (WorldFloatConfigs index, float value) override
 Set a server configuration element (see #WorldConfigs)
 
float getFloatConfig (WorldFloatConfigs index) const override
 Get a server configuration element (see #WorldConfigs)
 
void setIntConfig (WorldIntConfigs index, uint32 value) override
 Set a server configuration element (see #WorldConfigs)
 
uint32 getIntConfig (WorldIntConfigs index) const override
 Get a server configuration element (see #WorldConfigs)
 
void setWorldState (uint32 index, uint64 value) override
 
uint64 getWorldState (uint32 index) const override
 
void LoadWorldStates () override
 
bool IsPvPRealm () const override
 Are we on a "Player versus Player" server?
 
bool IsFFAPvPRealm () const override
 
void KickAll () override
 Kick (and save) all players.
 
void KickAllLess (AccountTypes sec) override
 Kick (and save) all players with security level less sec
 
uint32 GetNextWhoListUpdateDelaySecs () override
 
void ProcessCliCommands () override
 
void QueueCliCommand (CliCommandHolder *commandHolder) override
 
void ForceGameEventUpdate () override
 
void UpdateRealmCharCount (uint32 accid) override
 
LocaleConstant GetAvailableDbcLocale (LocaleConstant locale) const override
 
void LoadDBVersion () override
 
char const * GetDBVersion () const override
 
void UpdateAreaDependentAuras () override
 
uint32 GetCleaningFlags () const override
 
void SetCleaningFlags (uint32 flags) override
 
void ResetEventSeasonalQuests (uint16 event_id) override
 
std::string const & GetRealmName () const override
 
void SetRealmName (std::string name) override
 
void RemoveOldCorpses () override
 
- Public Member Functions inherited from IWorld
virtual ~IWorld ()=default
 
virtual WorldSessionFindSession (uint32 id) const =0
 
virtual WorldSessionFindOfflineSession (uint32 id) const =0
 
virtual WorldSessionFindOfflineSessionForCharacterGUID (ObjectGuid::LowType guidLow) const =0
 
virtual void AddSession (WorldSession *s)=0
 
virtual bool KickSession (uint32 id)=0
 
virtual void UpdateMaxSessionCounters ()=0
 
virtual const SessionMapGetAllSessions () const =0
 
virtual uint32 GetActiveAndQueuedSessionCount () const =0
 
virtual uint32 GetActiveSessionCount () const =0
 
virtual uint32 GetQueuedSessionCount () const =0
 
virtual uint32 GetMaxQueuedSessionCount () const =0
 
virtual uint32 GetMaxActiveSessionCount () const =0
 
virtual uint32 GetPlayerCount () const =0
 
virtual uint32 GetMaxPlayerCount () const =0
 
virtual void IncreasePlayerCount ()=0
 
virtual void DecreasePlayerCount ()=0
 
virtual PlayerFindPlayerInZone (uint32 zone)=0
 
virtual bool IsClosed () const =0
 
virtual void SetClosed (bool val)=0
 
virtual AccountTypes GetPlayerSecurityLimit () const =0
 
virtual void SetPlayerSecurityLimit (AccountTypes sec)=0
 
virtual void LoadDBAllowedSecurityLevel ()=0
 
virtual void SetPlayerAmountLimit (uint32 limit)=0
 
virtual uint32 GetPlayerAmountLimit () const =0
 
virtual void AddQueuedPlayer (WorldSession *)=0
 
virtual bool RemoveQueuedPlayer (WorldSession *session)=0
 
virtual int32 GetQueuePos (WorldSession *)=0
 
virtual bool HasRecentlyDisconnected (WorldSession *)=0
 
virtual bool getAllowMovement () const =0
 
virtual void SetAllowMovement (bool allow)=0
 
virtual void SetNewCharString (std::string const &str)=0
 
virtual std::string const & GetNewCharString () const =0
 
virtual LocaleConstant GetDefaultDbcLocale () const =0
 
virtual std::string const & GetDataPath () const =0
 
virtual Seconds GetNextDailyQuestsResetTime () const =0
 
virtual Seconds GetNextWeeklyQuestsResetTime () const =0
 
virtual Seconds GetNextRandomBGResetTime () const =0
 
virtual uint16 GetConfigMaxSkillValue () const =0
 
virtual void SetInitialWorldSettings ()=0
 
virtual void LoadConfigSettings (bool reload=false)=0
 
virtual void SendWorldText (uint32 string_id,...)=0
 
virtual void SendWorldTextOptional (uint32 string_id, uint32 flag,...)=0
 
virtual void SendGlobalText (const char *text, WorldSession *self)=0
 
virtual void SendGMText (uint32 string_id,...)=0
 
virtual void SendGlobalMessage (WorldPacket const *packet, WorldSession *self=nullptr, TeamId teamId=TEAM_NEUTRAL)=0
 
virtual void SendGlobalGMMessage (WorldPacket const *packet, WorldSession *self=nullptr, TeamId teamId=TEAM_NEUTRAL)=0
 
virtual bool SendZoneMessage (uint32 zone, WorldPacket const *packet, WorldSession *self=nullptr, TeamId teamId=TEAM_NEUTRAL)=0
 
virtual void SendZoneText (uint32 zone, const char *text, WorldSession *self=nullptr, TeamId teamId=TEAM_NEUTRAL)=0
 
virtual void SendServerMessage (ServerMessageType messageID, std::string stringParam="", Player *player=nullptr)=0
 
virtual bool IsShuttingDown () const =0
 
virtual uint32 GetShutDownTimeLeft () const =0
 
virtual void ShutdownServ (uint32 time, uint32 options, uint8 exitcode, const std::string &reason=std::string())=0
 
virtual void ShutdownCancel ()=0
 
virtual void ShutdownMsg (bool show=false, Player *player=nullptr, const std::string &reason=std::string())=0
 
virtual void Update (uint32 diff)=0
 
virtual void UpdateSessions (uint32 diff)=0
 
virtual void setRate (Rates rate, float value)=0
 
virtual float getRate (Rates rate) const =0
 
virtual void setBoolConfig (WorldBoolConfigs index, bool value)=0
 
virtual bool getBoolConfig (WorldBoolConfigs index) const =0
 
virtual void setFloatConfig (WorldFloatConfigs index, float value)=0
 
virtual float getFloatConfig (WorldFloatConfigs index) const =0
 
virtual void setIntConfig (WorldIntConfigs index, uint32 value)=0
 
virtual uint32 getIntConfig (WorldIntConfigs index) const =0
 
virtual void setWorldState (uint32 index, uint64 value)=0
 
virtual uint64 getWorldState (uint32 index) const =0
 
virtual void LoadWorldStates ()=0
 
virtual bool IsPvPRealm () const =0
 
virtual bool IsFFAPvPRealm () const =0
 
virtual void KickAll ()=0
 
virtual void KickAllLess (AccountTypes sec)=0
 
virtual uint32 GetNextWhoListUpdateDelaySecs ()=0
 
virtual void ProcessCliCommands ()=0
 
virtual void QueueCliCommand (CliCommandHolder *commandHolder)=0
 
virtual void ForceGameEventUpdate ()=0
 
virtual void UpdateRealmCharCount (uint32 accid)=0
 
virtual LocaleConstant GetAvailableDbcLocale (LocaleConstant locale) const =0
 
virtual void LoadDBVersion ()=0
 
virtual char const * GetDBVersion () const =0
 
virtual void UpdateAreaDependentAuras ()=0
 
virtual uint32 GetCleaningFlags () const =0
 
virtual void SetCleaningFlags (uint32 flags)=0
 
virtual void ResetEventSeasonalQuests (uint16 event_id)=0
 
virtual std::string const & GetRealmName () const =0
 
virtual void SetRealmName (std::string name)=0
 
virtual void RemoveOldCorpses ()=0
 

Static Public Member Functions

static Worldinstance ()
 
static uint8 GetExitCode ()
 
static void StopNow (uint8 exitcode)
 
static bool IsStopped ()
 
static float GetMaxVisibleDistanceOnContinents ()
 
static float GetMaxVisibleDistanceInInstances ()
 
static float GetMaxVisibleDistanceInBGArenas ()
 

Static Public Attributes

static uint32 m_worldLoopCounter = 0
 

Protected Member Functions

void _UpdateGameTime ()
 Update the game time.
 
void _UpdateRealmCharCount (PreparedQueryResult resultCharCount)
 
void InitDailyQuestResetTime ()
 
void InitWeeklyQuestResetTime ()
 
void InitMonthlyQuestResetTime ()
 
void InitRandomBGResetTime ()
 
void InitCalendarOldEventsDeletionTime ()
 
void InitGuildResetTime ()
 
void ResetDailyQuests ()
 
void ResetWeeklyQuests ()
 
void ResetMonthlyQuests ()
 
void ResetRandomBG ()
 
void CalendarDeleteOldEvents ()
 
void ResetGuildCap ()
 

Private Types

typedef std::unordered_map< uint32, time_t > DisconnectMap
 
typedef std::map< uint32, uint64WorldStatesMap
 

Private Member Functions

void DetectDBCLang ()
 
void AddSession_ (WorldSession *s)
 
void ProcessQueryCallbacks ()
 
void FinalizePlayerWorldSession (WorldSession *session)
 Executed when a World Session is being finalized. Be it from a normal login or via queue popping.
 

Private Attributes

uint32 _shutdownTimer
 
uint32 _shutdownMask
 
uint32 _cleaningFlags
 
bool _isClosed
 
IntervalTimer _timers [WUPDATE_COUNT]
 
Seconds _mail_expire_check_timer
 
SessionMap _sessions
 
SessionMap _offlineSessions
 
DisconnectMap _disconnects
 
uint32 _maxActiveSessionCount
 
uint32 _maxQueuedSessionCount
 
uint32 _playerCount
 
uint32 _maxPlayerCount
 
std::string _newCharString
 
float _rate_values [MAX_RATES]
 
uint32 _int_configs [INT_CONFIG_VALUE_COUNT]
 
bool _bool_configs [BOOL_CONFIG_VALUE_COUNT]
 
float _float_configs [FLOAT_CONFIG_VALUE_COUNT]
 
WorldStatesMap _worldstates
 
uint32 _playerLimit
 
AccountTypes _allowedSecurityLevel
 
LocaleConstant _defaultDbcLocale
 
uint32 _availableDbcLocaleMask
 
bool _allowMovement
 
std::string _dataPath
 
std::string _realmName
 
LockedQueue< CliCommandHolder * > _cliCmdQueue
 
Seconds _nextDailyQuestReset
 
Seconds _nextWeeklyQuestReset
 
Seconds _nextMonthlyQuestReset
 
Seconds _nextRandomBGReset
 
Seconds _nextCalendarOldEventsDeletionTime
 
Seconds _nextGuildReset
 
Queue _queuedPlayer
 
LockedQueue< WorldSession * > _addSessQueue
 
std::string _dbVersion
 
QueryCallbackProcessor _queryProcessor
 

Static Private Attributes

static std::atomic_long _stopEvent = false
 
static uint8 _exitCode = SHUTDOWN_EXIT_CODE
 
static float _maxVisibleDistanceOnContinents = DEFAULT_VISIBILITY_DISTANCE
 
static float _maxVisibleDistanceInInstances = DEFAULT_VISIBILITY_INSTANCE
 
static float _maxVisibleDistanceInBGArenas = DEFAULT_VISIBILITY_BGARENAS
 

Detailed Description

The World.

Member Typedef Documentation

◆ DisconnectMap

typedef std::unordered_map<uint32, time_t> World::DisconnectMap
private

◆ Queue

typedef std::list<WorldSession*> World::Queue

◆ WorldStatesMap

typedef std::map<uint32, uint64> World::WorldStatesMap
private

Constructor & Destructor Documentation

◆ World()

World::World ( )

World constructor.

116{
117 _playerLimit = 0;
119 _allowMovement = true;
120 _shutdownMask = 0;
121 _shutdownTimer = 0;
124 _playerCount = 0;
125 _maxPlayerCount = 0;
131 _nextGuildReset = 0s;
134 _isClosed = false;
135 _cleaningFlags = 0;
136
137 memset(_rate_values, 0, sizeof(_rate_values));
138 memset(_int_configs, 0, sizeof(_int_configs));
139 memset(_bool_configs, 0, sizeof(_bool_configs));
140 memset(_float_configs, 0, sizeof(_float_configs));
141}
@ LOCALE_enUS
Definition: Common.h:68
@ SEC_PLAYER
Definition: Common.h:59
Seconds _nextGuildReset
Definition: World.h:423
uint32 _shutdownMask
Definition: World.h:373
bool _bool_configs[BOOL_CONFIG_VALUE_COUNT]
Definition: World.h:395
uint32 _cleaningFlags
Definition: World.h:375
float _float_configs[FLOAT_CONFIG_VALUE_COUNT]
Definition: World.h:396
LocaleConstant _defaultDbcLocale
Definition: World.h:401
float _rate_values[MAX_RATES]
Definition: World.h:393
Seconds _nextDailyQuestReset
Definition: World.h:418
bool _isClosed
Definition: World.h:377
uint32 _maxPlayerCount
Definition: World.h:389
uint32 _maxQueuedSessionCount
Definition: World.h:387
Seconds _nextMonthlyQuestReset
Definition: World.h:420
uint32 _int_configs[INT_CONFIG_VALUE_COUNT]
Definition: World.h:394
Seconds _nextCalendarOldEventsDeletionTime
Definition: World.h:422
Seconds _nextWeeklyQuestReset
Definition: World.h:419
uint32 _shutdownTimer
Definition: World.h:372
uint32 _maxActiveSessionCount
Definition: World.h:386
Seconds _nextRandomBGReset
Definition: World.h:421
bool _allowMovement
Definition: World.h:404
uint32 _playerCount
Definition: World.h:388
uint32 _playerLimit
Definition: World.h:399
AccountTypes _allowedSecurityLevel
Definition: World.h:400
Seconds _mail_expire_check_timer
Definition: World.h:380

References _allowedSecurityLevel, _allowMovement, _bool_configs, _cleaningFlags, _defaultDbcLocale, _float_configs, _int_configs, _isClosed, _mail_expire_check_timer, _maxActiveSessionCount, _maxPlayerCount, _maxQueuedSessionCount, _nextCalendarOldEventsDeletionTime, _nextDailyQuestReset, _nextGuildReset, _nextMonthlyQuestReset, _nextRandomBGReset, _nextWeeklyQuestReset, _playerCount, _playerLimit, _rate_values, _shutdownMask, _shutdownTimer, LOCALE_enUS, and SEC_PLAYER.

◆ ~World()

World::~World ( )
override

World destructor.

  • Empty the kicked session set
145{
147 while (!_sessions.empty())
148 {
149 // not remove from queue, prevent loading new sessions
150 delete _sessions.begin()->second;
151 _sessions.erase(_sessions.begin());
152 }
153
154 while (!_offlineSessions.empty())
155 {
156 delete _offlineSessions.begin()->second;
157 _offlineSessions.erase(_offlineSessions.begin());
158 }
159
160 CliCommandHolder* command = nullptr;
161 while (_cliCmdQueue.next(command))
162 delete command;
163
166
167 //TODO free addSessQueue
168}
static void clear()
Definition: MMapFactory.cpp:50
static void clear()
Definition: VMapFactory.cpp:39
bool next(T &result)
Gets the next result in the queue, if any.
Definition: LockedQueue.h:63
Storage class for commands issued for delayed execution.
Definition: IWorld.h:39
SessionMap _offlineSessions
Definition: World.h:383
SessionMap _sessions
Definition: World.h:382
LockedQueue< CliCommandHolder * > _cliCmdQueue
Definition: World.h:415

References _cliCmdQueue, _offlineSessions, _sessions, MMAP::MMapFactory::clear(), VMAP::VMapFactory::clear(), and LockedQueue< T, StorageType >::next().

Member Function Documentation

◆ _UpdateGameTime()

void World::_UpdateGameTime ( )
protected

Update the game time.

  • update the time
  • if there is a shutdown timer
  • ... and it is overdue, stop the world (set m_stopEvent)
  • ... else decrease it and if necessary display a shutdown countdown to the users
2723{
2725 Seconds lastGameTime = GameTime::GetGameTime();
2727
2728 Seconds elapsed = GameTime::GetGameTime() - lastGameTime;
2729
2731 if (!IsStopped() && _shutdownTimer > 0 && elapsed > 0s)
2732 {
2734 if (_shutdownTimer <= elapsed.count())
2735 {
2737 _stopEvent = true; // exist code already set
2738 else
2739 _shutdownTimer = 1; // minimum timer value to wait idle state
2740 }
2742 else
2743 {
2744 _shutdownTimer -= elapsed.count();
2745
2746 ShutdownMsg();
2747 }
2748 }
2749}
std::chrono::seconds Seconds
Seconds shorthand typedef.
Definition: Duration.h:30
@ SHUTDOWN_MASK_IDLE
Definition: World.h:49
void UpdateGameTimers()
Update all timers.
Definition: GameTime.cpp:63
Seconds GetGameTime()
Definition: GameTime.cpp:38
uint32 GetActiveAndQueuedSessionCount() const override
Definition: World.h:168
void ShutdownMsg(bool show=false, Player *player=nullptr, const std::string &reason=std::string()) override
Display a shutdown message to the user(s)
Definition: World.cpp:2807
static std::atomic_long _stopEvent
Definition: World.h:370
static bool IsStopped()
Definition: World.h:260

References _shutdownMask, _shutdownTimer, _stopEvent, GetActiveAndQueuedSessionCount(), GameTime::GetGameTime(), IsStopped(), SHUTDOWN_MASK_IDLE, ShutdownMsg(), and GameTime::UpdateGameTimers().

Referenced by Update().

◆ _UpdateRealmCharCount()

void World::_UpdateRealmCharCount ( PreparedQueryResult  resultCharCount)
protected
2968{
2969 if (resultCharCount)
2970 {
2971 Field* fields = resultCharCount->Fetch();
2972 uint32 accountId = fields[0].Get<uint32>();
2973 uint8 charCount = uint8(fields[1].Get<uint64>());
2974
2975 LoginDatabaseTransaction trans = LoginDatabase.BeginTransaction();
2976
2978 stmt->SetData(0, charCount);
2979 stmt->SetData(1, accountId);
2980 stmt->SetData(2, realm.Id.Realm);
2981 trans->Append(stmt);
2982
2983 LoginDatabase.CommitTransaction(trans);
2984 }
2985}
std::uint8_t uint8
Definition: Define.h:110
std::uint32_t uint32
Definition: Define.h:108
DatabaseWorkerPool< LoginDatabaseConnection > LoginDatabase
Accessor to the realm/login database.
Definition: DatabaseEnv.cpp:22
SQLTransaction< LoginDatabaseConnection > LoginDatabaseTransaction
Definition: DatabaseEnvFwd.h:71
@ LOGIN_REP_REALM_CHARACTERS
Definition: LoginDatabase.h:63
AC_GAME_API Realm realm
Definition: World.cpp:112
Definition: PreparedStatement.h:158
Class used to access individual fields of database query result.
Definition: Field.h:99
std::enable_if_t< std::is_arithmetic_v< T >, T > Get() const
Definition: Field.h:113
Acore::Types::is_default< T > SetData(const uint8 index, T value)
Definition: PreparedStatement.h:78
uint32 Realm
Definition: Realm.h:42
RealmHandle Id
Definition: Realm.h:68

References Field::Get(), Realm::Id, LOGIN_REP_REALM_CHARACTERS, LoginDatabase, realm, RealmHandle::Realm, and PreparedStatementBase::SetData().

Referenced by UpdateRealmCharCount().

◆ AddQueuedPlayer()

void World::AddQueuedPlayer ( WorldSession sess)
overridevirtual

Implements IWorld.

358{
359 sess->SetInQueue(true);
360 _queuedPlayer.push_back(sess);
361
362 // The 1st SMSG_AUTH_RESPONSE needs to contain other info too.
363 sess->SendAuthResponse(AUTH_WAIT_QUEUE, false, GetQueuePos(sess));
364}
@ AUTH_WAIT_QUEUE
Definition: SharedDefines.h:3350
void SetInQueue(bool state)
Session in auth.queue currently.
Definition: WorldSession.h:384
void SendAuthResponse(uint8 code, bool shortForm, uint32 queuePos=0)
Definition: AuthHandler.cpp:22
int32 GetQueuePos(WorldSession *) override
Definition: World.cpp:346
Queue _queuedPlayer
Definition: World.h:426

References _queuedPlayer, AUTH_WAIT_QUEUE, GetQueuePos(), WorldSession::SendAuthResponse(), and WorldSession::SetInQueue().

Referenced by AddSession_().

◆ AddSession()

void World::AddSession ( WorldSession s)
overridevirtual

Implements IWorld.

259{
261}
void add(const T &item)
Adds an item to the queue.
Definition: LockedQueue.h:45
LockedQueue< WorldSession * > _addSessQueue
Definition: World.h:430

References _addSessQueue, and LockedQueue< T, StorageType >::add().

◆ AddSession_()

void World::AddSession_ ( WorldSession s)
private
264{
265 ASSERT (s);
266
267 // kick existing session with same account (if any)
268 // if character on old session is being loaded, then return
269 if (!KickSession(s->GetAccountId()))
270 {
271 s->KickPlayer("kick existing session with same account");
272 delete s; // session not added yet in session list, so not listed in queue
273 return;
274 }
275
276 SessionMap::const_iterator old = _sessions.find(s->GetAccountId());
277 if (old != _sessions.end())
278 {
279 WorldSession* oldSession = old->second;
280
283
284 // pussywizard:
285 if (oldSession->HandleSocketClosed())
286 {
287 // there should be no offline session if current one is logged onto a character
288 SessionMap::iterator iter;
289 if ((iter = _offlineSessions.find(oldSession->GetAccountId())) != _offlineSessions.end())
290 {
291 WorldSession* tmp = iter->second;
292 _offlineSessions.erase(iter);
293 delete tmp;
294 }
295 oldSession->SetOfflineTime(GameTime::GetGameTime().count());
296 _offlineSessions[oldSession->GetAccountId()] = oldSession;
297 }
298 else
299 {
300 delete oldSession;
301 }
302 }
303
304 _sessions[s->GetAccountId()] = s;
305
307 uint32 pLimit = GetPlayerAmountLimit();
308
309 // don't count this session when checking player limit
310 --Sessions;
311
312 if (pLimit > 0 && Sessions >= pLimit && AccountMgr::IsPlayerAccount(s->GetSecurity()) && !s->CanSkipQueue() && !HasRecentlyDisconnected(s))
313 {
316 return;
317 }
318
320
322}
#define ASSERT
Definition: Errors.h:68
@ CONFIG_INTERVAL_DISCONNECT_TOLERANCE
Definition: IWorld.h:213
bool IsPlayerAccount(uint32 gmlevel)
Definition: AccountMgr.cpp:276
Player session in the World.
Definition: WorldSession.h:330
void SetOfflineTime(uint32 time)
Definition: WorldSession.h:1068
AccountTypes GetSecurity() const
Definition: WorldSession.h:361
bool HandleSocketClosed()
Definition: WorldSession.cpp:523
uint32 GetAccountId() const
Definition: WorldSession.h:363
void KickPlayer(bool setKicked=true)
Definition: WorldSession.h:402
void InitializeSession()
Definition: WorldSession.cpp:1684
bool CanSkipQueue() const
Definition: WorldSession.h:362
uint32 GetPlayerAmountLimit() const override
Definition: World.h:201
uint32 getIntConfig(WorldIntConfigs index) const override
Get a server configuration element (see #WorldConfigs)
Definition: World.h:304
void AddQueuedPlayer(WorldSession *) override
Definition: World.cpp:357
void UpdateMaxSessionCounters() override
Get the number of current active sessions.
Definition: World.cpp:3164
DisconnectMap _disconnects
Definition: World.h:385
bool RemoveQueuedPlayer(WorldSession *session) override
Definition: World.cpp:366
bool KickSession(uint32 id) override
Remove a given session.
Definition: World.cpp:242
bool HasRecentlyDisconnected(WorldSession *) override
Definition: World.cpp:324

References _disconnects, _offlineSessions, _sessions, AddQueuedPlayer(), ASSERT, WorldSession::CanSkipQueue(), CONFIG_INTERVAL_DISCONNECT_TOLERANCE, WorldSession::GetAccountId(), GetActiveAndQueuedSessionCount(), GameTime::GetGameTime(), getIntConfig(), GetPlayerAmountLimit(), WorldSession::GetSecurity(), WorldSession::HandleSocketClosed(), HasRecentlyDisconnected(), WorldSession::InitializeSession(), AccountMgr::IsPlayerAccount(), WorldSession::KickPlayer(), KickSession(), RemoveQueuedPlayer(), WorldSession::SetOfflineTime(), and UpdateMaxSessionCounters().

Referenced by UpdateSessions().

◆ CalendarDeleteOldEvents()

void World::CalendarDeleteOldEvents ( )
protected
3146{
3147 LOG_INFO("server.worldserver", "Calendar deletion of old events.");
3148
3151 sCalendarMgr->DeleteOldEvents();
3152}
#define LOG_INFO(filterType__,...)
Definition: Log.h:165
#define sCalendarMgr
Definition: CalendarMgr.h:344
@ CONFIG_CALENDAR_DELETE_OLD_EVENTS_HOUR
Definition: IWorld.h:350
#define sWorld
Definition: World.h:447
@ WS_DAILY_CALENDAR_DELETION_OLD_EVENTS_TIME
Definition: World.h:141
AC_COMMON_API time_t GetNextTimeWithDayAndHour(int8 dayOfWeek, int8 hour)
Definition: Timer.cpp:302

References _nextCalendarOldEventsDeletionTime, CONFIG_CALENDAR_DELETE_OLD_EVENTS_HOUR, getIntConfig(), Acore::Time::GetNextTimeWithDayAndHour(), LOG_INFO, sCalendarMgr, sWorld, and WS_DAILY_CALENDAR_DELETION_OLD_EVENTS_TIME.

Referenced by Update().

◆ DecreasePlayerCount()

void World::DecreasePlayerCount ( )
inlineoverridevirtual

Implements IWorld.

184{ _playerCount--; }

References _playerCount.

◆ DetectDBCLang()

void World::DetectDBCLang ( )
private
2194{
2195 uint8 m_lang_confid = sConfigMgr->GetOption<int32>("DBC.Locale", 255);
2196
2197 if (m_lang_confid != 255 && m_lang_confid >= TOTAL_LOCALES)
2198 {
2199 LOG_ERROR("server.loading", "Incorrect DBC.Locale! Must be >= 0 and < {} (set to 0)", TOTAL_LOCALES);
2200 m_lang_confid = LOCALE_enUS;
2201 }
2202
2203 ChrRacesEntry const* race = sChrRacesStore.LookupEntry(1);
2204 std::string availableLocalsStr;
2205
2206 uint8 default_locale = TOTAL_LOCALES;
2207 for (uint8 i = default_locale - 1; i < TOTAL_LOCALES; --i) // -1 will be 255 due to uint8
2208 {
2209 if (race->name[i][0] != '\0') // check by race names
2210 {
2211 default_locale = i;
2212 _availableDbcLocaleMask |= (1 << i);
2213 availableLocalsStr += localeNames[i];
2214 availableLocalsStr += " ";
2215 }
2216 }
2217
2218 if (default_locale != m_lang_confid && m_lang_confid < TOTAL_LOCALES &&
2219 (_availableDbcLocaleMask & (1 << m_lang_confid)))
2220 {
2221 default_locale = m_lang_confid;
2222 }
2223
2224 if (default_locale >= TOTAL_LOCALES)
2225 {
2226 LOG_ERROR("server.loading", "Unable to determine your DBC Locale! (corrupt DBC?)");
2227 exit(1);
2228 }
2229
2230 _defaultDbcLocale = LocaleConstant(default_locale);
2231
2232 LOG_INFO("server.loading", "Using {} DBC Locale As Default. All Available DBC locales: {}", localeNames[GetDefaultDbcLocale()], availableLocalsStr.empty() ? "<none>" : availableLocalsStr);
2233 LOG_INFO("server.loading", " ");
2234}
char const * localeNames[TOTAL_LOCALES]
Definition: Common.cpp:20
LocaleConstant
Definition: Common.h:67
@ TOTAL_LOCALES
Definition: Common.h:78
#define sConfigMgr
Definition: Config.h:95
std::int32_t int32
Definition: Define.h:104
#define LOG_ERROR(filterType__,...)
Definition: Log.h:157
DBCStorage< ChrRacesEntry > sChrRacesStore(ChrRacesEntryfmt)
uint32 _availableDbcLocaleMask
Definition: World.h:402
LocaleConstant GetDefaultDbcLocale() const override
Definition: World.h:221
Definition: DBCStructure.h:679
char const * name[16]
Definition: DBCStructure.h:691

References _availableDbcLocaleMask, _defaultDbcLocale, GetDefaultDbcLocale(), LOCALE_enUS, localeNames, LOG_ERROR, LOG_INFO, ChrRacesEntry::name, sChrRacesStore, sConfigMgr, and TOTAL_LOCALES.

Referenced by SetInitialWorldSettings().

◆ FinalizePlayerWorldSession()

void World::FinalizePlayerWorldSession ( WorldSession session)
inlineprivate

Executed when a World Session is being finalized. Be it from a normal login or via queue popping.

Parameters
sessionThe World Session that we are finalizing.

◆ FindOfflineSession()

WorldSession * World::FindOfflineSession ( uint32  id) const
overridevirtual

Implements IWorld.

221{
222 SessionMap::const_iterator itr = _offlineSessions.find(id);
223 if (itr != _offlineSessions.end())
224 return itr->second;
225 else
226 return nullptr;
227}

References _offlineSessions.

◆ FindOfflineSessionForCharacterGUID()

WorldSession * World::FindOfflineSessionForCharacterGUID ( ObjectGuid::LowType  guidLow) const
overridevirtual

Implements IWorld.

230{
231 if (_offlineSessions.empty())
232 return nullptr;
233
234 for (SessionMap::const_iterator itr = _offlineSessions.begin(); itr != _offlineSessions.end(); ++itr)
235 if (itr->second->GetGuidLow() == guidLow)
236 return itr->second;
237
238 return nullptr;
239}

References _offlineSessions.

◆ FindPlayerInZone()

Player * World::FindPlayerInZone ( uint32  zone)
overridevirtual

Find a player in a specified zone.

  • circle through active sessions and return the first player found in the zone

Implements IWorld.

178{
180 SessionMap::const_iterator itr;
181 for (itr = _sessions.begin(); itr != _sessions.end(); ++itr)
182 {
183 if (!itr->second)
184 continue;
185
186 Player* player = itr->second->GetPlayer();
187 if (!player)
188 continue;
189
190 if (player->IsInWorld() && player->GetZoneId() == zone)
191 return player;
192 }
193 return nullptr;
194}
bool IsInWorld() const
Definition: Object.h:101
uint32 GetZoneId() const
Definition: Object.cpp:3100
Definition: Player.h:1056

References _sessions, WorldObject::GetZoneId(), and Object::IsInWorld().

◆ FindSession()

WorldSession * World::FindSession ( uint32  id) const
overridevirtual

Find a session by its id.

Implements IWorld.

211{
212 SessionMap::const_iterator itr = _sessions.find(id);
213
214 if (itr != _sessions.end())
215 return itr->second; // also can return nullptr for kicked session
216 else
217 return nullptr;
218}

References _sessions.

◆ ForceGameEventUpdate()

void World::ForceGameEventUpdate ( )
overridevirtual

Implements IWorld.

2490{
2491 _timers[WUPDATE_EVENTS].Reset(); // to give time for Update() to be processed
2492 uint32 nextGameEvent = sGameEventMgr->Update();
2493 _timers[WUPDATE_EVENTS].SetInterval(nextGameEvent);
2495}
#define sGameEventMgr
Definition: GameEventMgr.h:186
@ WUPDATE_EVENTS
Definition: World.h:66
void SetInterval(time_t interval)
Definition: Timer.h:179
void Reset()
Definition: Timer.h:166
IntervalTimer _timers[WUPDATE_COUNT]
Definition: World.h:379

References _timers, IntervalTimer::Reset(), IntervalTimer::SetInterval(), sGameEventMgr, and WUPDATE_EVENTS.

◆ GetActiveAndQueuedSessionCount()

uint32 World::GetActiveAndQueuedSessionCount ( ) const
inlineoverridevirtual

Implements IWorld.

168{ return _sessions.size(); }

References _sessions.

Referenced by _UpdateGameTime(), AddSession_(), and ShutdownServ().

◆ GetActiveSessionCount()

uint32 World::GetActiveSessionCount ( ) const
inlineoverridevirtual

Implements IWorld.

169{ return _sessions.size() - _queuedPlayer.size(); }

References _queuedPlayer, and _sessions.

Referenced by RemoveQueuedPlayer(), ShutdownServ(), and Update().

◆ getAllowMovement()

bool World::getAllowMovement ( ) const
inlineoverridevirtual
Todo:
Actions on m_allowMovement still to be implemented Is movement allowed?

Implements IWorld.

212{ return _allowMovement; }

References _allowMovement.

◆ GetAllSessions()

const SessionMap & World::GetAllSessions ( ) const
inlineoverridevirtual

Implements IWorld.

167{ return _sessions; }

References _sessions.

◆ GetAvailableDbcLocale()

LocaleConstant World::GetAvailableDbcLocale ( LocaleConstant  locale) const
inlineoverridevirtual

Implements IWorld.

335{ if (_availableDbcLocaleMask & (1 << locale)) return locale; else return _defaultDbcLocale; }

References _availableDbcLocaleMask, and _defaultDbcLocale.

◆ getBoolConfig()

bool World::getBoolConfig ( WorldBoolConfigs  index) const
inlineoverridevirtual

Get a server configuration element (see #WorldConfigs)

Implements IWorld.

279 {
280 return index < BOOL_CONFIG_VALUE_COUNT ? _bool_configs[index] : false;
281 }
@ BOOL_CONFIG_VALUE_COUNT
Definition: IWorld.h:187

References _bool_configs, and BOOL_CONFIG_VALUE_COUNT.

◆ GetCleaningFlags()

uint32 World::GetCleaningFlags ( ) const
inlineoverridevirtual

Implements IWorld.

343{ return _cleaningFlags; }

References _cleaningFlags.

◆ GetConfigMaxSkillValue()

uint16 World::GetConfigMaxSkillValue ( ) const
inlineoverridevirtual

Get the maximum skill level a player can reach.

Implements IWorld.

233 {
235 return lvl > 60 ? 300 + ((lvl - 60) * 75) / 10 : lvl * 5;
236 }
std::uint16_t uint16
Definition: Define.h:109
@ CONFIG_MAX_PLAYER_LEVEL
Definition: IWorld.h:236

References CONFIG_MAX_PLAYER_LEVEL, and getIntConfig().

◆ GetDataPath()

std::string const & World::GetDataPath ( ) const
inlineoverridevirtual

Get the path where data (dbc, maps) are stored on disk.

Implements IWorld.

224{ return _dataPath; }
std::string _dataPath
Definition: World.h:405

References _dataPath.

◆ GetDBVersion()

char const * World::GetDBVersion ( ) const
inlineoverridevirtual

Implements IWorld.

339{ return _dbVersion.c_str(); }
std::string _dbVersion
Definition: World.h:433

References _dbVersion.

◆ GetDefaultDbcLocale()

LocaleConstant World::GetDefaultDbcLocale ( ) const
inlineoverridevirtual

Implements IWorld.

221{ return _defaultDbcLocale; }

References _defaultDbcLocale.

Referenced by DetectDBCLang(), and SetInitialWorldSettings().

◆ GetExitCode()

static uint8 World::GetExitCode ( )
inlinestatic
258{ return _exitCode; }
static uint8 _exitCode
Definition: World.h:371

References _exitCode.

Referenced by main().

◆ getFloatConfig()

float World::getFloatConfig ( WorldFloatConfigs  index) const
inlineoverridevirtual

Get a server configuration element (see #WorldConfigs)

Implements IWorld.

292 {
293 return index < FLOAT_CONFIG_VALUE_COUNT ? _float_configs[index] : 0;
294 }
@ FLOAT_CONFIG_VALUE_COUNT
Definition: IWorld.h:205

References _float_configs, and FLOAT_CONFIG_VALUE_COUNT.

◆ getIntConfig()

uint32 World::getIntConfig ( WorldIntConfigs  index) const
inlineoverridevirtual

Get a server configuration element (see #WorldConfigs)

Implements IWorld.

305 {
306 return index < INT_CONFIG_VALUE_COUNT ? _int_configs[index] : 0;
307 }
@ INT_CONFIG_VALUE_COUNT
Definition: IWorld.h:421

References _int_configs, and INT_CONFIG_VALUE_COUNT.

Referenced by AddSession_(), CalendarDeleteOldEvents(), GetConfigMaxSkillValue(), HasRecentlyDisconnected(), InitCalendarOldEventsDeletionTime(), IsFFAPvPRealm(), IsPvPRealm(), SetInitialWorldSettings(), and UpdateSessions().

◆ GetMaxActiveSessionCount()

uint32 World::GetMaxActiveSessionCount ( ) const
inlineoverridevirtual

Implements IWorld.

173{ return _maxActiveSessionCount; }

References _maxActiveSessionCount.

◆ GetMaxPlayerCount()

uint32 World::GetMaxPlayerCount ( ) const
inlineoverridevirtual

Implements IWorld.

176{ return _maxPlayerCount; }

References _maxPlayerCount.

Referenced by Update().

◆ GetMaxQueuedSessionCount()

uint32 World::GetMaxQueuedSessionCount ( ) const
inlineoverridevirtual

Get the maximum number of parallel sessions on the server since last reboot.

Implements IWorld.

172{ return _maxQueuedSessionCount; }

References _maxQueuedSessionCount.

◆ GetMaxVisibleDistanceInBGArenas()

static float World::GetMaxVisibleDistanceInBGArenas ( )
inlinestatic
static float _maxVisibleDistanceInBGArenas
Definition: World.h:410

References _maxVisibleDistanceInBGArenas.

Referenced by Battleground::_ProcessJoin(), and BattlegroundMap::InitVisibilityDistance().

◆ GetMaxVisibleDistanceInInstances()

static float World::GetMaxVisibleDistanceInInstances ( )
inlinestatic
static float _maxVisibleDistanceInInstances
Definition: World.h:409

References _maxVisibleDistanceInInstances.

Referenced by InstanceMap::InitVisibilityDistance().

◆ GetMaxVisibleDistanceOnContinents()

static float World::GetMaxVisibleDistanceOnContinents ( )
inlinestatic
static float _maxVisibleDistanceOnContinents
Definition: World.h:408

References _maxVisibleDistanceOnContinents.

Referenced by Map::InitVisibilityDistance().

◆ GetNewCharString()

std::string const & World::GetNewCharString ( ) const
inlineoverridevirtual

Get the string for new characters (first login)

Implements IWorld.

219{ return _newCharString; }
std::string _newCharString
Definition: World.h:391

References _newCharString.

◆ GetNextDailyQuestsResetTime()

Seconds World::GetNextDailyQuestsResetTime ( ) const
inlineoverridevirtual

Next daily quests and random bg reset time.

Implements IWorld.

227{ return _nextDailyQuestReset; }

References _nextDailyQuestReset.

◆ GetNextRandomBGResetTime()

Seconds World::GetNextRandomBGResetTime ( ) const
inlineoverridevirtual

Implements IWorld.

229{ return _nextRandomBGReset; }

References _nextRandomBGReset.

◆ GetNextWeeklyQuestsResetTime()

Seconds World::GetNextWeeklyQuestsResetTime ( ) const
inlineoverridevirtual

Implements IWorld.

228{ return _nextWeeklyQuestReset; }

References _nextWeeklyQuestReset.

◆ GetNextWhoListUpdateDelaySecs()

uint32 World::GetNextWhoListUpdateDelaySecs ( )
overridevirtual

Implements IWorld.

3270{
3271 if (_timers[WUPDATE_5_SECS].Passed())
3272 return 1;
3273
3275 t = std::min(t, (uint32)_timers[WUPDATE_5_SECS].GetInterval());
3276
3277 return uint32(std::ceil(t / 1000.0f));
3278}
@ WUPDATE_5_SECS
Definition: World.h:71
time_t GetCurrent() const
Definition: Timer.h:189
time_t GetInterval() const
Definition: Timer.h:184

References _timers, IntervalTimer::GetCurrent(), IntervalTimer::GetInterval(), and WUPDATE_5_SECS.

◆ GetPlayerAmountLimit()

uint32 World::GetPlayerAmountLimit ( ) const
inlineoverridevirtual

Implements IWorld.

201{ return _playerLimit; }

References _playerLimit.

Referenced by AddSession_(), and RemoveQueuedPlayer().

◆ GetPlayerCount()

uint32 World::GetPlayerCount ( ) const
inlineoverridevirtual

Get number of players.

Implements IWorld.

175{ return _playerCount; }

References _playerCount.

◆ GetPlayerSecurityLimit()

AccountTypes World::GetPlayerSecurityLimit ( ) const
inlineoverridevirtual

Security level limitations.

Implements IWorld.

195{ return _allowedSecurityLevel; }

References _allowedSecurityLevel.

◆ GetQueuedSessionCount()

uint32 World::GetQueuedSessionCount ( ) const
inlineoverridevirtual

Implements IWorld.

170{ return _queuedPlayer.size(); }

References _queuedPlayer.

◆ GetQueuePos()

int32 World::GetQueuePos ( WorldSession sess)
overridevirtual

Implements IWorld.

347{
348 uint32 position = 1;
349
350 for (Queue::const_iterator iter = _queuedPlayer.begin(); iter != _queuedPlayer.end(); ++iter, ++position)
351 if ((*iter) == sess)
352 return position;
353
354 return 0;
355}

References _queuedPlayer.

Referenced by AddQueuedPlayer().

◆ getRate()

float World::getRate ( Rates  rate) const
inlineoverridevirtual

Get a server rate (see Rates)

Implements IWorld.

268{ return _rate_values[rate]; }

References _rate_values.

Referenced by LoadConfigSettings().

◆ GetRealmName()

std::string const & World::GetRealmName ( ) const
inlineoverridevirtual

Implements IWorld.

347{ return _realmName; } // pussywizard
std::string _realmName
Definition: World.h:412

References _realmName.

◆ GetShutDownTimeLeft()

uint32 World::GetShutDownTimeLeft ( ) const
inlineoverridevirtual

Implements IWorld.

254{ return _shutdownTimer; }

References _shutdownTimer.

◆ getWorldState()

uint64 World::getWorldState ( uint32  index) const
overridevirtual

Implements IWorld.

3244{
3245 auto const& itr = _worldstates.find(index);
3246 return itr != _worldstates.end() ? itr->second : 0;
3247}
WorldStatesMap _worldstates
Definition: World.h:398

References _worldstates.

Referenced by InitCalendarOldEventsDeletionTime(), and InitGuildResetTime().

◆ HasRecentlyDisconnected()

bool World::HasRecentlyDisconnected ( WorldSession session)
overridevirtual

Implements IWorld.

325{
326 if (!session)
327 return false;
328
330 {
331 for (DisconnectMap::iterator i = _disconnects.begin(); i != _disconnects.end();)
332 {
333 if ((GameTime::GetGameTime().count() - i->second) < tolerance)
334 {
335 if (i->first == session->GetAccountId())
336 return true;
337 ++i;
338 }
339 else
340 _disconnects.erase(i++);
341 }
342 }
343 return false;
344}

References _disconnects, CONFIG_INTERVAL_DISCONNECT_TOLERANCE, WorldSession::GetAccountId(), GameTime::GetGameTime(), and getIntConfig().

Referenced by AddSession_().

◆ IncreasePlayerCount()

void World::IncreasePlayerCount ( )
inlineoverridevirtual

Increase/Decrease number of players.

Implements IWorld.

180 {
181 _playerCount++;
183 }

References _maxPlayerCount, and _playerCount.

◆ InitCalendarOldEventsDeletionTime()

void World::InitCalendarOldEventsDeletionTime ( )
protected
3032{
3034 Seconds nextDeletionTime = currentDeletionTime > 0s ? currentDeletionTime : Seconds(Acore::Time::GetNextTimeWithDayAndHour(-1, getIntConfig(CONFIG_CALENDAR_DELETE_OLD_EVENTS_HOUR)));
3035
3036 if (currentDeletionTime == 0s)
3037 {
3038 sWorld->setWorldState(WS_DAILY_CALENDAR_DELETION_OLD_EVENTS_TIME, nextDeletionTime.count());
3039 }
3040}
uint64 getWorldState(uint32 index) const override
Definition: World.cpp:3243

References CONFIG_CALENDAR_DELETE_OLD_EVENTS_HOUR, getIntConfig(), Acore::Time::GetNextTimeWithDayAndHour(), getWorldState(), sWorld, and WS_DAILY_CALENDAR_DELETION_OLD_EVENTS_TIME.

Referenced by SetInitialWorldSettings().

◆ InitDailyQuestResetTime()

void World::InitDailyQuestResetTime ( )
protected
2999{
3000 Seconds wstime = Seconds(sWorld->getWorldState(WS_DAILY_QUEST_RESET_TIME));
3002
3003 if (wstime == 0s)
3004 {
3005 sWorld->setWorldState(WS_DAILY_QUEST_RESET_TIME, _nextDailyQuestReset.count());
3006 }
3007}
@ WS_DAILY_QUEST_RESET_TIME
Definition: World.h:138

References _nextDailyQuestReset, Acore::Time::GetNextTimeWithDayAndHour(), sWorld, and WS_DAILY_QUEST_RESET_TIME.

Referenced by SetInitialWorldSettings().

◆ InitGuildResetTime()

void World::InitGuildResetTime ( )
protected
3043{
3045 _nextGuildReset = wstime > 0s ? wstime : Seconds(Acore::Time::GetNextTimeWithDayAndHour(-1, 6));
3046
3047 if (wstime == 0s)
3048 {
3049 sWorld->setWorldState(WS_GUILD_DAILY_RESET_TIME, _nextGuildReset.count());
3050 }
3051}
@ WS_GUILD_DAILY_RESET_TIME
Definition: World.h:139

References _nextGuildReset, Acore::Time::GetNextTimeWithDayAndHour(), getWorldState(), sWorld, and WS_GUILD_DAILY_RESET_TIME.

Referenced by SetInitialWorldSettings().

◆ InitMonthlyQuestResetTime()

void World::InitMonthlyQuestResetTime ( )
protected
3010{
3011 Seconds wstime = Seconds(sWorld->getWorldState(WS_MONTHLY_QUEST_RESET_TIME));
3013
3014 if (wstime == 0s)
3015 {
3017 }
3018}
@ WS_MONTHLY_QUEST_RESET_TIME
Definition: World.h:140

References _nextMonthlyQuestReset, Acore::Time::GetNextTimeWithDayAndHour(), sWorld, and WS_MONTHLY_QUEST_RESET_TIME.

Referenced by SetInitialWorldSettings().

◆ InitRandomBGResetTime()

void World::InitRandomBGResetTime ( )
protected
3021{
3022 Seconds wstime = Seconds(sWorld->getWorldState(WS_BG_DAILY_RESET_TIME));
3023 _nextRandomBGReset = wstime > 0s ? wstime : Seconds(Acore::Time::GetNextTimeWithDayAndHour(-1, 6));
3024
3025 if (wstime == 0s)
3026 {
3027 sWorld->setWorldState(WS_BG_DAILY_RESET_TIME, _nextRandomBGReset.count());
3028 }
3029}
@ WS_BG_DAILY_RESET_TIME
Definition: World.h:136

References _nextRandomBGReset, Acore::Time::GetNextTimeWithDayAndHour(), sWorld, and WS_BG_DAILY_RESET_TIME.

Referenced by SetInitialWorldSettings().

◆ InitWeeklyQuestResetTime()

void World::InitWeeklyQuestResetTime ( )
protected
2988{
2989 Seconds wstime = Seconds(sWorld->getWorldState(WS_WEEKLY_QUEST_RESET_TIME));
2991
2992 if (wstime == 0s)
2993 {
2995 }
2996}
@ WS_WEEKLY_QUEST_RESET_TIME
Definition: World.h:135

References _nextWeeklyQuestReset, Acore::Time::GetNextTimeWithDayAndHour(), sWorld, and WS_WEEKLY_QUEST_RESET_TIME.

Referenced by SetInitialWorldSettings().

◆ instance()

static World * World::instance ( )
static

◆ IsClosed()

bool World::IsClosed ( ) const
overridevirtual

Deny clients?

Implements IWorld.

197{
198 return _isClosed;
199}

References _isClosed.

◆ IsFFAPvPRealm()

bool World::IsFFAPvPRealm ( ) const
overridevirtual

Implements IWorld.

3265{
3267}
@ CONFIG_GAME_TYPE
Definition: IWorld.h:218
@ REALM_TYPE_FFA_PVP
Definition: Realm.h:61

References CONFIG_GAME_TYPE, getIntConfig(), and REALM_TYPE_FFA_PVP.

Referenced by SetInitialWorldSettings().

◆ IsPvPRealm()

bool World::IsPvPRealm ( ) const
overridevirtual

Are we on a "Player versus Player" server?

Implements IWorld.

3260{
3262}
@ REALM_TYPE_RPPVP
Definition: Realm.h:57
@ REALM_TYPE_PVP
Definition: Realm.h:54

References CONFIG_GAME_TYPE, getIntConfig(), REALM_TYPE_FFA_PVP, REALM_TYPE_PVP, and REALM_TYPE_RPPVP.

◆ IsShuttingDown()

bool World::IsShuttingDown ( ) const
inlineoverridevirtual

Are we in the middle of a shutdown?

Implements IWorld.

253{ return _shutdownTimer > 0; }

References _shutdownTimer.

◆ IsStopped()

static bool World::IsStopped ( )
inlinestatic

◆ KickAll()

void World::KickAll ( )
overridevirtual

Kick (and save) all players.

Implements IWorld.

2700{
2701 _queuedPlayer.clear(); // prevent send queue update packet and login queued sessions
2702
2703 // session not removed at kick and will removed in next update tick
2704 for (SessionMap::const_iterator itr = _sessions.begin(); itr != _sessions.end(); ++itr)
2705 itr->second->KickPlayer("KickAll sessions");
2706
2707 // pussywizard: kick offline sessions
2708 for (SessionMap::const_iterator itr = _offlineSessions.begin(); itr != _offlineSessions.end(); ++itr)
2709 itr->second->KickPlayer("KickAll offline sessions");
2710}

References _offlineSessions, _queuedPlayer, and _sessions.

◆ KickAllLess()

void World::KickAllLess ( AccountTypes  sec)
overridevirtual

Kick (and save) all players with security level less sec

Implements IWorld.

2714{
2715 // session not removed at kick and will removed in next update tick
2716 for (SessionMap::const_iterator itr = _sessions.begin(); itr != _sessions.end(); ++itr)
2717 if (itr->second->GetSecurity() < sec)
2718 itr->second->KickPlayer("KickAllLess");
2719}

References _sessions.

Referenced by SetPlayerSecurityLimit().

◆ KickSession()

bool World::KickSession ( uint32  id)
overridevirtual

Remove a given session.

  • Find the session, kick the user, but we can't delete session at this moment to prevent iterator invalidation

Implements IWorld.

243{
245 SessionMap::const_iterator itr = _sessions.find(id);
246
247 if (itr != _sessions.end() && itr->second)
248 {
249 if (itr->second->PlayerLoading())
250 return false;
251
252 itr->second->KickPlayer("KickSession", false);
253 }
254
255 return true;
256}

References _sessions.

Referenced by AddSession_().

◆ LoadConfigSettings()

void World::LoadConfigSettings ( bool  reload = false)
overridevirtual

Initialize config values.

  • Read the player limit and the Message of the day from the config file
  • Read ticket system setting from the config file
  • Get string for new logins (newly created characters)
  • Send server info on login?
  • Read all rates from the config file
  • Read other configuration items from the config file

    Todo:
    Add MonsterSight in worldserver.conf or put it as define
  • Load the CharDelete related config options
  • Load the ItemDelete related config options
  • Read the "Data" directory from the config file

Implements IWorld.

416{
417 if (reload)
418 {
419 if (!sConfigMgr->Reload())
420 {
421 LOG_ERROR("server.loading", "World settings reload fail: can't read settings.");
422 return;
423 }
424
425 sLog->LoadFromConfig();
426 sMetric->LoadFromConfigs();
427 }
428
429 // Set realm id and enable db logging
430 sLog->SetRealmId(realm.Id.Realm);
431
432 sScriptMgr->OnBeforeConfigLoad(reload);
433
434 // load update time related configs
436
438 if (!reload)
439 {
440 SetPlayerAmountLimit(sConfigMgr->GetOption<int32>("PlayerLimit", 1000));
441 }
442
444 _bool_configs[CONFIG_ALLOW_TICKETS] = sConfigMgr->GetOption<bool>("AllowTickets", true);
445 _bool_configs[CONFIG_DELETE_CHARACTER_TICKET_TRACE] = sConfigMgr->GetOption<bool>("DeletedCharacterTicketTrace", false);
446
448 SetNewCharString(sConfigMgr->GetOption<std::string>("PlayerStart.String", ""));
449
451 _int_configs[CONFIG_ENABLE_SINFO_LOGIN] = sConfigMgr->GetOption<int32>("Server.LoginInfo", 0);
452
454 _rate_values[RATE_HEALTH] = sConfigMgr->GetOption<float>("Rate.Health", 1);
455 if (_rate_values[RATE_HEALTH] < 0)
456 {
457 LOG_ERROR("server.loading", "Rate.Health ({}) must be > 0. Using 1 instead.", _rate_values[RATE_HEALTH]);
459 }
460 _rate_values[RATE_POWER_MANA] = sConfigMgr->GetOption<float>("Rate.Mana", 1);
462 {
463 LOG_ERROR("server.loading", "Rate.Mana ({}) must be > 0. Using 1 instead.", _rate_values[RATE_POWER_MANA]);
465 }
466 _rate_values[RATE_POWER_RAGE_INCOME] = sConfigMgr->GetOption<float>("Rate.Rage.Income", 1);
467 _rate_values[RATE_POWER_RAGE_LOSS] = sConfigMgr->GetOption<float>("Rate.Rage.Loss", 1);
469 {
470 LOG_ERROR("server.loading", "Rate.Rage.Loss ({}) must be > 0. Using 1 instead.", _rate_values[RATE_POWER_RAGE_LOSS]);
472 }
473 _rate_values[RATE_POWER_RUNICPOWER_INCOME] = sConfigMgr->GetOption<float>("Rate.RunicPower.Income", 1);
474 _rate_values[RATE_POWER_RUNICPOWER_LOSS] = sConfigMgr->GetOption<float>("Rate.RunicPower.Loss", 1);
476 {
477 LOG_ERROR("server.loading", "Rate.RunicPower.Loss ({}) must be > 0. Using 1 instead.", _rate_values[RATE_POWER_RUNICPOWER_LOSS]);
479 }
480 _rate_values[RATE_POWER_FOCUS] = sConfigMgr->GetOption<float>("Rate.Focus", 1.0f);
481 _rate_values[RATE_POWER_ENERGY] = sConfigMgr->GetOption<float>("Rate.Energy", 1.0f);
482
483 _rate_values[RATE_SKILL_DISCOVERY] = sConfigMgr->GetOption<float>("Rate.Skill.Discovery", 1.0f);
484
485 _rate_values[RATE_DROP_ITEM_POOR] = sConfigMgr->GetOption<float>("Rate.Drop.Item.Poor", 1.0f);
486 _rate_values[RATE_DROP_ITEM_NORMAL] = sConfigMgr->GetOption<float>("Rate.Drop.Item.Normal", 1.0f);
487 _rate_values[RATE_DROP_ITEM_UNCOMMON] = sConfigMgr->GetOption<float>("Rate.Drop.Item.Uncommon", 1.0f);
488 _rate_values[RATE_DROP_ITEM_RARE] = sConfigMgr->GetOption<float>("Rate.Drop.Item.Rare", 1.0f);
489 _rate_values[RATE_DROP_ITEM_EPIC] = sConfigMgr->GetOption<float>("Rate.Drop.Item.Epic", 1.0f);
490 _rate_values[RATE_DROP_ITEM_LEGENDARY] = sConfigMgr->GetOption<float>("Rate.Drop.Item.Legendary", 1.0f);
491 _rate_values[RATE_DROP_ITEM_ARTIFACT] = sConfigMgr->GetOption<float>("Rate.Drop.Item.Artifact", 1.0f);
492 _rate_values[RATE_DROP_ITEM_REFERENCED] = sConfigMgr->GetOption<float>("Rate.Drop.Item.Referenced", 1.0f);
493 _rate_values[RATE_DROP_ITEM_REFERENCED_AMOUNT] = sConfigMgr->GetOption<float>("Rate.Drop.Item.ReferencedAmount", 1.0f);
494 _rate_values[RATE_DROP_ITEM_GROUP_AMOUNT] = sConfigMgr->GetOption<float>("Rate.Drop.Item.GroupAmount", 1.0f);
495 _rate_values[RATE_DROP_MONEY] = sConfigMgr->GetOption<float>("Rate.Drop.Money", 1.0f);
496
497 _rate_values[RATE_REWARD_BONUS_MONEY] = sConfigMgr->GetOption<float>("Rate.RewardBonusMoney", 1.0f);
498 _rate_values[RATE_XP_KILL] = sConfigMgr->GetOption<float>("Rate.XP.Kill", 1.0f);
499 _rate_values[RATE_XP_BG_KILL_AV] = sConfigMgr->GetOption<float>("Rate.XP.BattlegroundKillAV", 1.0f);
500 _rate_values[RATE_XP_BG_KILL_WSG] = sConfigMgr->GetOption<float>("Rate.XP.BattlegroundKillWSG", 1.0f);
501 _rate_values[RATE_XP_BG_KILL_AB] = sConfigMgr->GetOption<float>("Rate.XP.BattlegroundKillAB", 1.0f);
502 _rate_values[RATE_XP_BG_KILL_EOTS] = sConfigMgr->GetOption<float>("Rate.XP.BattlegroundKillEOTS", 1.0f);
503 _rate_values[RATE_XP_BG_KILL_SOTA] = sConfigMgr->GetOption<float>("Rate.XP.BattlegroundKillSOTA", 1.0f);
504 _rate_values[RATE_XP_BG_KILL_IC] = sConfigMgr->GetOption<float>("Rate.XP.BattlegroundKillIC", 1.0f);
505 _rate_values[RATE_XP_QUEST] = sConfigMgr->GetOption<float>("Rate.XP.Quest", 1.0f);
506 _rate_values[RATE_XP_QUEST_DF] = sConfigMgr->GetOption<float>("Rate.XP.Quest.DF", 1.0f);
507 _rate_values[RATE_XP_EXPLORE] = sConfigMgr->GetOption<float>("Rate.XP.Explore", 1.0f);
508 _rate_values[RATE_XP_PET] = sConfigMgr->GetOption<float>("Rate.XP.Pet", 1.0f);
509 _rate_values[RATE_XP_PET_NEXT_LEVEL] = sConfigMgr->GetOption<float>("Rate.Pet.LevelXP", 0.05f);
510 _rate_values[RATE_REPAIRCOST] = sConfigMgr->GetOption<float>("Rate.RepairCost", 1.0f);
511
512 _rate_values[RATE_SELLVALUE_ITEM_POOR] = sConfigMgr->GetOption<float>("Rate.SellValue.Item.Poor", 1.0f);
513 _rate_values[RATE_SELLVALUE_ITEM_NORMAL] = sConfigMgr->GetOption<float>("Rate.SellValue.Item.Normal", 1.0f);
514 _rate_values[RATE_SELLVALUE_ITEM_UNCOMMON] = sConfigMgr->GetOption<float>("Rate.SellValue.Item.Uncommon", 1.0f);
515 _rate_values[RATE_SELLVALUE_ITEM_RARE] = sConfigMgr->GetOption<float>("Rate.SellValue.Item.Rare", 1.0f);
516 _rate_values[RATE_SELLVALUE_ITEM_EPIC] = sConfigMgr->GetOption<float>("Rate.SellValue.Item.Epic", 1.0f);
517 _rate_values[RATE_SELLVALUE_ITEM_LEGENDARY] = sConfigMgr->GetOption<float>("Rate.SellValue.Item.Legendary", 1.0f);
518 _rate_values[RATE_SELLVALUE_ITEM_ARTIFACT] = sConfigMgr->GetOption<float>("Rate.SellValue.Item.Artifact", 1.0f);
519 _rate_values[RATE_SELLVALUE_ITEM_HEIRLOOM] = sConfigMgr->GetOption<float>("Rate.SellValue.Item.Heirloom", 1.0f);
520
521 _rate_values[ RATE_BUYVALUE_ITEM_POOR] = sConfigMgr->GetOption<float>("Rate.BuyValue.Item.Poor", 1.0f);
522 _rate_values[ RATE_BUYVALUE_ITEM_NORMAL] = sConfigMgr->GetOption<float>("Rate.BuyValue.Item.Normal", 1.0f);
523 _rate_values[ RATE_BUYVALUE_ITEM_UNCOMMON] = sConfigMgr->GetOption<float>("Rate.BuyValue.Item.Uncommon", 1.0f);
524 _rate_values[ RATE_BUYVALUE_ITEM_RARE] = sConfigMgr->GetOption<float>("Rate.BuyValue.Item.Rare", 1.0f);
525 _rate_values[ RATE_BUYVALUE_ITEM_EPIC] = sConfigMgr->GetOption<float>("Rate.BuyValue.Item.Epic", 1.0f);
526 _rate_values[ RATE_BUYVALUE_ITEM_LEGENDARY] = sConfigMgr->GetOption<float>("Rate.BuyValue.Item.Legendary", 1.0f);
527 _rate_values[RATE_BUYVALUE_ITEM_ARTIFACT] = sConfigMgr->GetOption<float>("Rate.BuyValue.Item.Artifact", 1.0f);
528 _rate_values[RATE_BUYVALUE_ITEM_HEIRLOOM] = sConfigMgr->GetOption<float>("Rate.BuyValue.Item.Heirloom", 1.0f);
529
530 if (_rate_values[RATE_REPAIRCOST] < 0.0f)
531 {
532 LOG_ERROR("server.loading", "Rate.RepairCost ({}) must be >=0. Using 0.0 instead.", _rate_values[RATE_REPAIRCOST]);
534 }
535 _rate_values[RATE_REPUTATION_GAIN] = sConfigMgr->GetOption<float>("Rate.Reputation.Gain", 1.0f);
536 _rate_values[RATE_REPUTATION_LOWLEVEL_KILL] = sConfigMgr->GetOption<float>("Rate.Reputation.LowLevel.Kill", 1.0f);
537 _rate_values[RATE_REPUTATION_LOWLEVEL_QUEST] = sConfigMgr->GetOption<float>("Rate.Reputation.LowLevel.Quest", 1.0f);
538 _rate_values[RATE_REPUTATION_RECRUIT_A_FRIEND_BONUS] = sConfigMgr->GetOption<float>("Rate.Reputation.RecruitAFriendBonus", 0.1f);
539 _rate_values[RATE_CREATURE_NORMAL_DAMAGE] = sConfigMgr->GetOption<float>("Rate.Creature.Normal.Damage", 1.0f);
540 _rate_values[RATE_CREATURE_ELITE_ELITE_DAMAGE] = sConfigMgr->GetOption<float>("Rate.Creature.Elite.Elite.Damage", 1.0f);
541 _rate_values[RATE_CREATURE_ELITE_RAREELITE_DAMAGE] = sConfigMgr->GetOption<float>("Rate.Creature.Elite.RAREELITE.Damage", 1.0f);
542 _rate_values[RATE_CREATURE_ELITE_WORLDBOSS_DAMAGE] = sConfigMgr->GetOption<float>("Rate.Creature.Elite.WORLDBOSS.Damage", 1.0f);
543 _rate_values[RATE_CREATURE_ELITE_RARE_DAMAGE] = sConfigMgr->GetOption<float>("Rate.Creature.Elite.RARE.Damage", 1.0f);
544 _rate_values[RATE_CREATURE_NORMAL_HP] = sConfigMgr->GetOption<float>("Rate.Creature.Normal.HP", 1.0f);
545 _rate_values[RATE_CREATURE_ELITE_ELITE_HP] = sConfigMgr->GetOption<float>("Rate.Creature.Elite.Elite.HP", 1.0f);
546 _rate_values[RATE_CREATURE_ELITE_RAREELITE_HP] = sConfigMgr->GetOption<float>("Rate.Creature.Elite.RAREELITE.HP", 1.0f);
547 _rate_values[RATE_CREATURE_ELITE_WORLDBOSS_HP] = sConfigMgr->GetOption<float>("Rate.Creature.Elite.WORLDBOSS.HP", 1.0f);
548 _rate_values[RATE_CREATURE_ELITE_RARE_HP] = sConfigMgr->GetOption<float>("Rate.Creature.Elite.RARE.HP", 1.0f);
549 _rate_values[RATE_CREATURE_NORMAL_SPELLDAMAGE] = sConfigMgr->GetOption<float>("Rate.Creature.Normal.SpellDamage", 1.0f);
550 _rate_values[RATE_CREATURE_ELITE_ELITE_SPELLDAMAGE] = sConfigMgr->GetOption<float>("Rate.Creature.Elite.Elite.SpellDamage", 1.0f);
551 _rate_values[RATE_CREATURE_ELITE_RAREELITE_SPELLDAMAGE] = sConfigMgr->GetOption<float>("Rate.Creature.Elite.RAREELITE.SpellDamage", 1.0f);
552 _rate_values[RATE_CREATURE_ELITE_WORLDBOSS_SPELLDAMAGE] = sConfigMgr->GetOption<float>("Rate.Creature.Elite.WORLDBOSS.SpellDamage", 1.0f);
553 _rate_values[RATE_CREATURE_ELITE_RARE_SPELLDAMAGE] = sConfigMgr->GetOption<float>("Rate.Creature.Elite.RARE.SpellDamage", 1.0f);
554 _rate_values[RATE_CREATURE_AGGRO] = sConfigMgr->GetOption<float>("Rate.Creature.Aggro", 1.0f);
555 _rate_values[RATE_REST_INGAME] = sConfigMgr->GetOption<float>("Rate.Rest.InGame", 1.0f);
556 _rate_values[RATE_REST_OFFLINE_IN_TAVERN_OR_CITY] = sConfigMgr->GetOption<float>("Rate.Rest.Offline.InTavernOrCity", 1.0f);
557 _rate_values[RATE_REST_OFFLINE_IN_WILDERNESS] = sConfigMgr->GetOption<float>("Rate.Rest.Offline.InWilderness", 1.0f);
558 _rate_values[RATE_DAMAGE_FALL] = sConfigMgr->GetOption<float>("Rate.Damage.Fall", 1.0f);
559 _rate_values[RATE_AUCTION_TIME] = sConfigMgr->GetOption<float>("Rate.Auction.Time", 1.0f);
560 _rate_values[RATE_AUCTION_DEPOSIT] = sConfigMgr->GetOption<float>("Rate.Auction.Deposit", 1.0f);
561 _rate_values[RATE_AUCTION_CUT] = sConfigMgr->GetOption<float>("Rate.Auction.Cut", 1.0f);
562 _rate_values[RATE_HONOR] = sConfigMgr->GetOption<float>("Rate.Honor", 1.0f);
563 _rate_values[RATE_ARENA_POINTS] = sConfigMgr->GetOption<float>("Rate.ArenaPoints", 1.0f);
564 _rate_values[RATE_INSTANCE_RESET_TIME] = sConfigMgr->GetOption<float>("Rate.InstanceResetTime", 1.0f);
565
566 _rate_values[RATE_MISS_CHANCE_MULTIPLIER_TARGET_CREATURE] = sConfigMgr->GetOption<float>("Rate.MissChanceMultiplier.TargetCreature", 11.0f);
567 _rate_values[RATE_MISS_CHANCE_MULTIPLIER_TARGET_PLAYER] = sConfigMgr->GetOption<float>("Rate.MissChanceMultiplier.TargetPlayer", 7.0f);
568 _bool_configs[CONFIG_MISS_CHANCE_MULTIPLIER_ONLY_FOR_PLAYERS] = sConfigMgr->GetOption<bool>("Rate.MissChanceMultiplier.OnlyAffectsPlayer", false);
569
570 _rate_values[RATE_TALENT] = sConfigMgr->GetOption<float>("Rate.Talent", 1.0f);
571 if (_rate_values[RATE_TALENT] < 0.0f)
572 {
573 LOG_ERROR("server.loading", "Rate.Talent ({}) must be > 0. Using 1 instead.", _rate_values[RATE_TALENT]);
575 }
576 _rate_values[RATE_TALENT_PET] = sConfigMgr->GetOption<float>("Rate.Talent.Pet", 1.0f);
577 if (_rate_values[RATE_TALENT_PET] < 0.0f)
578 {
579 LOG_ERROR("server.loading", "Rate.Talent.Pet ({}) must be > 0. Using 1 instead.", _rate_values[RATE_TALENT_PET]);
581 }
582 _rate_values[RATE_MOVESPEED] = sConfigMgr->GetOption<float>("Rate.MoveSpeed", 1.0f);
584 {
585 LOG_ERROR("server.loading", "Rate.MoveSpeed ({}) must be > 0. Using 1 instead.", _rate_values[RATE_MOVESPEED]);
587 }
589 _rate_values[RATE_CORPSE_DECAY_LOOTED] = sConfigMgr->GetOption<float>("Rate.Corpse.Decay.Looted", 0.5f);
590
591 _rate_values[RATE_DURABILITY_LOSS_ON_DEATH] = sConfigMgr->GetOption<float>("DurabilityLoss.OnDeath", 10.0f);
593 {
594 LOG_ERROR("server.loading", "DurabilityLoss.OnDeath ({}) must be >=0. Using 0.0 instead.", _rate_values[RATE_DURABILITY_LOSS_ON_DEATH]);
596 }
598 {
599 LOG_ERROR("server.loading", "DurabilityLoss.OnDeath ({}) must be <= 100. Using 100.0 instead.", _rate_values[RATE_DURABILITY_LOSS_ON_DEATH]);
601 }
603
604 _rate_values[RATE_DURABILITY_LOSS_DAMAGE] = sConfigMgr->GetOption<float>("DurabilityLossChance.Damage", 0.5f);
606 {
607 LOG_ERROR("server.loading", "DurabilityLossChance.Damage ({}) must be >=0. Using 0.0 instead.", _rate_values[RATE_DURABILITY_LOSS_DAMAGE]);
609 }
610 _rate_values[RATE_DURABILITY_LOSS_ABSORB] = sConfigMgr->GetOption<float>("DurabilityLossChance.Absorb", 0.5f);
612 {
613 LOG_ERROR("server.loading", "DurabilityLossChance.Absorb ({}) must be >=0. Using 0.0 instead.", _rate_values[RATE_DURABILITY_LOSS_ABSORB]);
615 }
616 _rate_values[RATE_DURABILITY_LOSS_PARRY] = sConfigMgr->GetOption<float>("DurabilityLossChance.Parry", 0.05f);
618 {
619 LOG_ERROR("server.loading", "DurabilityLossChance.Parry ({}) must be >=0. Using 0.0 instead.", _rate_values[RATE_DURABILITY_LOSS_PARRY]);
621 }
622 _rate_values[RATE_DURABILITY_LOSS_BLOCK] = sConfigMgr->GetOption<float>("DurabilityLossChance.Block", 0.05f);
624 {
625 LOG_ERROR("server.loading", "DurabilityLossChance.Block ({}) must be >=0. Using 0.0 instead.", _rate_values[RATE_DURABILITY_LOSS_BLOCK]);
627 }
628
630
631 _bool_configs[CONFIG_DURABILITY_LOSS_IN_PVP] = sConfigMgr->GetOption<bool>("DurabilityLoss.InPvP", false);
632
633 _int_configs[CONFIG_COMPRESSION] = sConfigMgr->GetOption<int32>("Compression", 1);
635 {
636 LOG_ERROR("server.loading", "Compression level ({}) must be in range 1..9. Using default compression level (1).", _int_configs[CONFIG_COMPRESSION]);
638 }
639 _bool_configs[CONFIG_ADDON_CHANNEL] = sConfigMgr->GetOption<bool>("AddonChannel", true);
640 _bool_configs[CONFIG_CLEAN_CHARACTER_DB] = sConfigMgr->GetOption<bool>("CleanCharacterDB", false);
641 _int_configs[CONFIG_PERSISTENT_CHARACTER_CLEAN_FLAGS] = sConfigMgr->GetOption<int32>("PersistentCharacterCleanFlags", 0);
642 _int_configs[CONFIG_CHAT_CHANNEL_LEVEL_REQ] = sConfigMgr->GetOption<int32>("ChatLevelReq.Channel", 1);
643 _int_configs[CONFIG_CHAT_WHISPER_LEVEL_REQ] = sConfigMgr->GetOption<int32>("ChatLevelReq.Whisper", 1);
644 _int_configs[CONFIG_CHAT_SAY_LEVEL_REQ] = sConfigMgr->GetOption<int32>("ChatLevelReq.Say", 1);
645 _int_configs[CONFIG_PARTY_LEVEL_REQ] = sConfigMgr->GetOption<int32>("PartyLevelReq", 1);
646 _int_configs[CONFIG_TRADE_LEVEL_REQ] = sConfigMgr->GetOption<int32>("LevelReq.Trade", 1);
647 _int_configs[CONFIG_TICKET_LEVEL_REQ] = sConfigMgr->GetOption<int32>("LevelReq.Ticket", 1);
648 _int_configs[CONFIG_AUCTION_LEVEL_REQ] = sConfigMgr->GetOption<int32>("LevelReq.Auction", 1);
649 _int_configs[CONFIG_MAIL_LEVEL_REQ] = sConfigMgr->GetOption<int32>("LevelReq.Mail", 1);
650 _bool_configs[CONFIG_ALLOW_PLAYER_COMMANDS] = sConfigMgr->GetOption<bool>("AllowPlayerCommands", 1);
651 _bool_configs[CONFIG_PRESERVE_CUSTOM_CHANNELS] = sConfigMgr->GetOption<bool>("PreserveCustomChannels", false);
652 _int_configs[CONFIG_PRESERVE_CUSTOM_CHANNEL_DURATION] = sConfigMgr->GetOption<int32>("PreserveCustomChannelDuration", 14);
653 _int_configs[CONFIG_INTERVAL_SAVE] = sConfigMgr->GetOption<int32>("PlayerSaveInterval", 15 * MINUTE * IN_MILLISECONDS);
654 _int_configs[CONFIG_INTERVAL_DISCONNECT_TOLERANCE] = sConfigMgr->GetOption<int32>("DisconnectToleranceInterval", 0);
655 _bool_configs[CONFIG_STATS_SAVE_ONLY_ON_LOGOUT] = sConfigMgr->GetOption<bool>("PlayerSave.Stats.SaveOnlyOnLogout", true);
656
657 _int_configs[CONFIG_MIN_LEVEL_STAT_SAVE] = sConfigMgr->GetOption<int32>("PlayerSave.Stats.MinLevel", 0);
659 {
660 LOG_ERROR("server.loading", "PlayerSave.Stats.MinLevel ({}) must be in range 0..80. Using default, do not save character stats (0).", _int_configs[CONFIG_MIN_LEVEL_STAT_SAVE]);
662 }
663
664 _int_configs[CONFIG_INTERVAL_MAPUPDATE] = sConfigMgr->GetOption<int32>("MapUpdateInterval", 10);
666 {
667 LOG_ERROR("server.loading", "MapUpdateInterval ({}) must be greater {}. Use this minimal value.", _int_configs[CONFIG_INTERVAL_MAPUPDATE], MIN_MAP_UPDATE_DELAY);
669 }
670 if (reload)
671 sMapMgr->SetMapUpdateInterval(_int_configs[CONFIG_INTERVAL_MAPUPDATE]);
672
673 _int_configs[CONFIG_INTERVAL_CHANGEWEATHER] = sConfigMgr->GetOption<int32>("ChangeWeatherInterval", 10 * MINUTE * IN_MILLISECONDS);
674
675 if (reload)
676 {
677 uint32 val = sConfigMgr->GetOption<int32>("WorldServerPort", 8085);
679 LOG_ERROR("server.loading", "WorldServerPort option can't be changed at worldserver.conf reload, using current value ({}).", _int_configs[CONFIG_PORT_WORLD]);
680 }
681 else
682 _int_configs[CONFIG_PORT_WORLD] = sConfigMgr->GetOption<int32>("WorldServerPort", 8085);
683
684 _bool_configs[CONFIG_CLOSE_IDLE_CONNECTIONS] = sConfigMgr->GetOption<bool>("CloseIdleConnections", true);
685 _int_configs[CONFIG_SOCKET_TIMEOUTTIME] = sConfigMgr->GetOption<int32>("SocketTimeOutTime", 900000);
686 _int_configs[CONFIG_SOCKET_TIMEOUTTIME_ACTIVE] = sConfigMgr->GetOption<int32>("SocketTimeOutTimeActive", 60000);
687 _int_configs[CONFIG_SESSION_ADD_DELAY] = sConfigMgr->GetOption<int32>("SessionAddDelay", 10000);
688
689 _float_configs[CONFIG_GROUP_XP_DISTANCE] = sConfigMgr->GetOption<float>("MaxGroupXPDistance", 74.0f);
690 _float_configs[CONFIG_MAX_RECRUIT_A_FRIEND_DISTANCE] = sConfigMgr->GetOption<float>("MaxRecruitAFriendBonusDistance", 100.0f);
691
693 _float_configs[CONFIG_SIGHT_MONSTER] = sConfigMgr->GetOption<float>("MonsterSight", 50);
694
695 if (reload)
696 {
697 uint32 val = sConfigMgr->GetOption<int32>("GameType", 0);
698 if (val != _int_configs[CONFIG_GAME_TYPE])
699 LOG_ERROR("server.loading", "GameType option can't be changed at worldserver.conf reload, using current value ({}).", _int_configs[CONFIG_GAME_TYPE]);
700 }
701 else
702 _int_configs[CONFIG_GAME_TYPE] = sConfigMgr->GetOption<int32>("GameType", 0);
703
704 if (reload)
705 {
706 uint32 val = sConfigMgr->GetOption<int32>("RealmZone", REALM_ZONE_DEVELOPMENT);
708 LOG_ERROR("server.loading", "RealmZone option can't be changed at worldserver.conf reload, using current value ({}).", _int_configs[CONFIG_REALM_ZONE]);
709 }
710 else
712
713 _bool_configs[CONFIG_STRICT_NAMES_RESERVED] = sConfigMgr->GetOption<bool> ("StrictNames.Reserved", true);
714 _bool_configs[CONFIG_STRICT_NAMES_PROFANITY] = sConfigMgr->GetOption<bool> ("StrictNames.Profanity", true);
715 _int_configs[CONFIG_STRICT_PLAYER_NAMES] = sConfigMgr->GetOption<int32> ("StrictPlayerNames", 0);
716 _int_configs[CONFIG_STRICT_CHARTER_NAMES] = sConfigMgr->GetOption<int32> ("StrictCharterNames", 0);
717 _int_configs[CONFIG_STRICT_CHANNEL_NAMES] = sConfigMgr->GetOption<int32> ("StrictChannelNames", 0);
718 _int_configs[CONFIG_STRICT_PET_NAMES] = sConfigMgr->GetOption<int32> ("StrictPetNames", 0);
719
720 _bool_configs[CONFIG_ALLOW_TWO_SIDE_ACCOUNTS] = sConfigMgr->GetOption<bool>("AllowTwoSide.Accounts", true);
721 _bool_configs[CONFIG_ALLOW_TWO_SIDE_INTERACTION_CALENDAR] = sConfigMgr->GetOption<bool>("AllowTwoSide.Interaction.Calendar", false);
722 _bool_configs[CONFIG_ALLOW_TWO_SIDE_INTERACTION_CHAT] = sConfigMgr->GetOption<bool>("AllowTwoSide.Interaction.Chat", false);
723 _bool_configs[CONFIG_ALLOW_TWO_SIDE_INTERACTION_CHANNEL] = sConfigMgr->GetOption<bool>("AllowTwoSide.Interaction.Channel", false);
724 _bool_configs[CONFIG_ALLOW_TWO_SIDE_INTERACTION_GROUP] = sConfigMgr->GetOption<bool>("AllowTwoSide.Interaction.Group", false);
725 _bool_configs[CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD] = sConfigMgr->GetOption<bool>("AllowTwoSide.Interaction.Guild", false);
726 _bool_configs[CONFIG_ALLOW_TWO_SIDE_INTERACTION_ARENA] = sConfigMgr->GetOption<bool>("AllowTwoSide.Interaction.Arena", false);
727 _bool_configs[CONFIG_ALLOW_TWO_SIDE_INTERACTION_AUCTION] = sConfigMgr->GetOption<bool>("AllowTwoSide.Interaction.Auction", false);
728 _bool_configs[CONFIG_ALLOW_TWO_SIDE_INTERACTION_MAIL] = sConfigMgr->GetOption<bool>("AllowTwoSide.Interaction.Mail", false);
729 _bool_configs[CONFIG_ALLOW_TWO_SIDE_WHO_LIST] = sConfigMgr->GetOption<bool>("AllowTwoSide.WhoList", false);
730 _bool_configs[CONFIG_ALLOW_TWO_SIDE_ADD_FRIEND] = sConfigMgr->GetOption<bool>("AllowTwoSide.AddFriend", false);
731 _bool_configs[CONFIG_ALLOW_TWO_SIDE_TRADE] = sConfigMgr->GetOption<bool>("AllowTwoSide.Trade", false);
732 _bool_configs[CONFIG_ALLOW_TWO_SIDE_INTERACTION_EMOTE] = sConfigMgr->GetOption<bool>("AllowTwoSide.Interaction.Emote", false);
733
734 _int_configs[CONFIG_MIN_PLAYER_NAME] = sConfigMgr->GetOption<int32> ("MinPlayerName", 2);
736 {
737 LOG_ERROR("server.loading", "MinPlayerName ({}) must be in range 1..{}. Set to 2.", _int_configs[CONFIG_MIN_PLAYER_NAME], MAX_PLAYER_NAME);
739 }
740
741 _int_configs[CONFIG_MIN_CHARTER_NAME] = sConfigMgr->GetOption<int32> ("MinCharterName", 2);
743 {
744 LOG_ERROR("server.loading", "MinCharterName ({}) must be in range 1..{}. Set to 2.", _int_configs[CONFIG_MIN_CHARTER_NAME], MAX_CHARTER_NAME);
746 }
747
748 _int_configs[CONFIG_MIN_PET_NAME] = sConfigMgr->GetOption<int32> ("MinPetName", 2);
750 {
751 LOG_ERROR("server.loading", "MinPetName ({}) must be in range 1..{}. Set to 2.", _int_configs[CONFIG_MIN_PET_NAME], MAX_PET_NAME);
753 }
754
755 _int_configs[CONFIG_CHARTER_COST_GUILD] = sConfigMgr->GetOption<int32>("Guild.CharterCost", 1000);
756 _int_configs[CONFIG_CHARTER_COST_ARENA_2v2] = sConfigMgr->GetOption<int32>("ArenaTeam.CharterCost.2v2", 800000);
757 _int_configs[CONFIG_CHARTER_COST_ARENA_3v3] = sConfigMgr->GetOption<int32>("ArenaTeam.CharterCost.3v3", 1200000);
758 _int_configs[CONFIG_CHARTER_COST_ARENA_5v5] = sConfigMgr->GetOption<int32>("ArenaTeam.CharterCost.5v5", 2000000);
759
760 _int_configs[CONFIG_MAX_WHO_LIST_RETURN] = sConfigMgr->GetOption<int32>("MaxWhoListReturns", 49);
761
762 _int_configs[CONFIG_CHARACTER_CREATING_DISABLED] = sConfigMgr->GetOption<int32>("CharacterCreating.Disabled", 0);
763 _int_configs[CONFIG_CHARACTER_CREATING_DISABLED_RACEMASK] = sConfigMgr->GetOption<int32>("CharacterCreating.Disabled.RaceMask", 0);
764
765 _int_configs[CONFIG_CHARACTER_CREATING_DISABLED_CLASSMASK] = sConfigMgr->GetOption<int32>("CharacterCreating.Disabled.ClassMask", 0);
766
767 _int_configs[CONFIG_CHARACTERS_PER_REALM] = sConfigMgr->GetOption<int32>("CharactersPerRealm", 10);
769 {
770 LOG_ERROR("server.loading", "CharactersPerRealm ({}) must be in range 1..10. Set to 10.", _int_configs[CONFIG_CHARACTERS_PER_REALM]);
772 }
773
774 // must be after CONFIG_CHARACTERS_PER_REALM
775 _int_configs[CONFIG_CHARACTERS_PER_ACCOUNT] = sConfigMgr->GetOption<int32>("CharactersPerAccount", 50);
777 {
778 LOG_ERROR("server.loading", "CharactersPerAccount ({}) can't be less than CharactersPerRealm ({}).", _int_configs[CONFIG_CHARACTERS_PER_ACCOUNT], _int_configs[CONFIG_CHARACTERS_PER_REALM]);
780 }
781
782 _int_configs[CONFIG_HEROIC_CHARACTERS_PER_REALM] = sConfigMgr->GetOption<int32>("HeroicCharactersPerRealm", 1);
784 {
785 LOG_ERROR("server.loading", "HeroicCharactersPerRealm ({}) must be in range 0..10. Set to 1.", _int_configs[CONFIG_HEROIC_CHARACTERS_PER_REALM]);
787 }
788
789 _int_configs[CONFIG_CHARACTER_CREATING_MIN_LEVEL_FOR_HEROIC_CHARACTER] = sConfigMgr->GetOption<int32>("CharacterCreating.MinLevelForHeroicCharacter", 55);
790
791 _int_configs[CONFIG_SKIP_CINEMATICS] = sConfigMgr->GetOption<int32>("SkipCinematics", 0);
793 {
794 LOG_ERROR("server.loading", "SkipCinematics ({}) must be in range 0..2. Set to 0.", _int_configs[CONFIG_SKIP_CINEMATICS]);
796 }
797
798 if (reload)
799 {
800 uint32 val = sConfigMgr->GetOption<int32>("MaxPlayerLevel", DEFAULT_MAX_LEVEL);
802 LOG_ERROR("server.loading", "MaxPlayerLevel option can't be changed at config reload, using current value ({}).", _int_configs[CONFIG_MAX_PLAYER_LEVEL]);
803 }
804 else
806
808 {
809 LOG_ERROR("server.loading", "MaxPlayerLevel ({}) must be in range 1..{}. Set to {}.", _int_configs[CONFIG_MAX_PLAYER_LEVEL], MAX_LEVEL, MAX_LEVEL);
811 }
812
813 _int_configs[CONFIG_MIN_DUALSPEC_LEVEL] = sConfigMgr->GetOption<int32>("MinDualSpecLevel", 40);
814
815 _int_configs[CONFIG_START_PLAYER_LEVEL] = sConfigMgr->GetOption<int32>("StartPlayerLevel", 1);
817 {
818 LOG_ERROR("server.loading", "StartPlayerLevel ({}) must be in range 1..MaxPlayerLevel({}). Set to 1.", _int_configs[CONFIG_START_PLAYER_LEVEL], _int_configs[CONFIG_MAX_PLAYER_LEVEL]);
820 }
821
822 _int_configs[CONFIG_START_HEROIC_PLAYER_LEVEL] = sConfigMgr->GetOption<int32>("StartHeroicPlayerLevel", 55);
824 {
825 LOG_ERROR("server.loading", "StartHeroicPlayerLevel ({}) must be in range 1..MaxPlayerLevel({}). Set to 55.",
828 }
829
830 _int_configs[CONFIG_START_PLAYER_MONEY] = sConfigMgr->GetOption<int32>("StartPlayerMoney", 0);
832 {
833 LOG_ERROR("server.loading", "StartPlayerMoney ({}) must be in range 0..{}. Set to {}.", _int_configs[CONFIG_START_PLAYER_MONEY], MAX_MONEY_AMOUNT, 0);
835 }
836
837 _int_configs[CONFIG_START_HEROIC_PLAYER_MONEY] = sConfigMgr->GetOption<int32>("StartHeroicPlayerMoney", 2000);
839 {
840 LOG_ERROR("server.loading", "StartHeroicPlayerMoney ({}) must be in range 0..{}. Set to {}.", _int_configs[CONFIG_START_HEROIC_PLAYER_MONEY], MAX_MONEY_AMOUNT, 2000);
842 }
843
844 _int_configs[CONFIG_MAX_HONOR_POINTS] = sConfigMgr->GetOption<int32>("MaxHonorPoints", 75000);
846 {
847 LOG_ERROR("server.loading", "MaxHonorPoints ({}) can't be negative. Set to 0.", _int_configs[CONFIG_MAX_HONOR_POINTS]);
849 }
850
851 _int_configs[CONFIG_MAX_HONOR_POINTS_MONEY_PER_POINT] = sConfigMgr->GetOption<int32>("MaxHonorPointsMoneyPerPoint", 0);
853 {
854 LOG_ERROR("server.loading", "MaxHonorPointsMoneyPerPoint ({}) can't be negative. Set to 0.", _int_configs[CONFIG_MAX_HONOR_POINTS_MONEY_PER_POINT]);
856 }
857
858 _int_configs[CONFIG_START_HONOR_POINTS] = sConfigMgr->GetOption<int32>("StartHonorPoints", 0);
860 {
861 LOG_ERROR("server.loading", "StartHonorPoints ({}) must be in range 0..MaxHonorPoints({}). Set to {}.",
864 }
865
866 _int_configs[CONFIG_MAX_ARENA_POINTS] = sConfigMgr->GetOption<int32>("MaxArenaPoints", 10000);
868 {
869 LOG_ERROR("server.loading", "MaxArenaPoints ({}) can't be negative. Set to 0.", _int_configs[CONFIG_MAX_ARENA_POINTS]);
871 }
872
873 _int_configs[CONFIG_START_ARENA_POINTS] = sConfigMgr->GetOption<int32>("StartArenaPoints", 0);
875 {
876 LOG_ERROR("server.loading", "StartArenaPoints ({}) must be in range 0..MaxArenaPoints({}). Set to {}.",
879 }
880
881 _int_configs[CONFIG_MAX_RECRUIT_A_FRIEND_BONUS_PLAYER_LEVEL] = sConfigMgr->GetOption<int32>("RecruitAFriend.MaxLevel", 60);
884 {
885 LOG_ERROR("server.loading", "RecruitAFriend.MaxLevel ({}) must be in the range 0..MaxLevel({}). Set to {}.",
888 }
889
890 _int_configs[CONFIG_MAX_RECRUIT_A_FRIEND_BONUS_PLAYER_LEVEL_DIFFERENCE] = sConfigMgr->GetOption<int32>("RecruitAFriend.MaxDifference", 4);
891 _bool_configs[CONFIG_ALL_TAXI_PATHS] = sConfigMgr->GetOption<bool>("AllFlightPaths", false);
892 _int_configs[CONFIG_INSTANT_TAXI] = sConfigMgr->GetOption<int32>("InstantFlightPaths", 0);
893
894 _bool_configs[CONFIG_INSTANCE_IGNORE_LEVEL] = sConfigMgr->GetOption<bool>("Instance.IgnoreLevel", false);
895 _bool_configs[CONFIG_INSTANCE_IGNORE_RAID] = sConfigMgr->GetOption<bool>("Instance.IgnoreRaid", false);
896 _bool_configs[CONFIG_INSTANCE_GMSUMMON_PLAYER] = sConfigMgr->GetOption<bool>("Instance.GMSummonPlayer", false);
897 _bool_configs[CONFIG_INSTANCE_SHARED_ID] = sConfigMgr->GetOption<bool>("Instance.SharedNormalHeroicId", false);
898
899 _int_configs[CONFIG_INSTANCE_RESET_TIME_HOUR] = sConfigMgr->GetOption<int32>("Instance.ResetTimeHour", 4);
900 _int_configs[CONFIG_INSTANCE_RESET_TIME_RELATIVE_TIMESTAMP] = sConfigMgr->GetOption<int32>("Instance.ResetTimeRelativeTimestamp", 1135814400);
901 _int_configs[CONFIG_INSTANCE_UNLOAD_DELAY] = sConfigMgr->GetOption<int32>("Instance.UnloadDelay", 30 * MINUTE * IN_MILLISECONDS);
902
903 _int_configs[CONFIG_MAX_PRIMARY_TRADE_SKILL] = sConfigMgr->GetOption<int32>("MaxPrimaryTradeSkill", 2);
904 _int_configs[CONFIG_MIN_PETITION_SIGNS] = sConfigMgr->GetOption<int32>("MinPetitionSigns", 9);
906 {
907 LOG_ERROR("server.loading", "MinPetitionSigns ({}) must be in range 0..9. Set to 9.", _int_configs[CONFIG_MIN_PETITION_SIGNS]);
909 }
910
911 _int_configs[CONFIG_GM_LOGIN_STATE] = sConfigMgr->GetOption<int32>("GM.LoginState", 2);
912 _int_configs[CONFIG_GM_VISIBLE_STATE] = sConfigMgr->GetOption<int32>("GM.Visible", 2);
913 _int_configs[CONFIG_GM_CHAT] = sConfigMgr->GetOption<int32>("GM.Chat", 2);
914 _int_configs[CONFIG_GM_WHISPERING_TO] = sConfigMgr->GetOption<int32>("GM.WhisperingTo", 2);
915
916 _int_configs[CONFIG_GM_LEVEL_IN_GM_LIST] = sConfigMgr->GetOption<int32>("GM.InGMList.Level", SEC_ADMINISTRATOR);
917 _int_configs[CONFIG_GM_LEVEL_IN_WHO_LIST] = sConfigMgr->GetOption<int32>("GM.InWhoList.Level", SEC_ADMINISTRATOR);
918 _int_configs[CONFIG_START_GM_LEVEL] = sConfigMgr->GetOption<int32>("GM.StartLevel", 1);
920 {
921 LOG_ERROR("server.loading", "GM.StartLevel ({}) must be in range StartPlayerLevel({})..{}. Set to {}.",
924 }
926 {
927 LOG_ERROR("server.loading", "GM.StartLevel ({}) must be in range 1..{}. Set to {}.", _int_configs[CONFIG_START_GM_LEVEL], MAX_LEVEL, MAX_LEVEL);
929 }
930 _bool_configs[CONFIG_ALLOW_GM_GROUP] = sConfigMgr->GetOption<bool>("GM.AllowInvite", false);
931 _bool_configs[CONFIG_ALLOW_GM_FRIEND] = sConfigMgr->GetOption<bool>("GM.AllowFriend", false);
932 _bool_configs[CONFIG_GM_LOWER_SECURITY] = sConfigMgr->GetOption<bool>("GM.LowerSecurity", false);
933 _float_configs[CONFIG_CHANCE_OF_GM_SURVEY] = sConfigMgr->GetOption<float>("GM.TicketSystem.ChanceOfGMSurvey", 50.0f);
934
935 _int_configs[CONFIG_GROUP_VISIBILITY] = sConfigMgr->GetOption<int32>("Visibility.GroupMode", 1);
936
937 _bool_configs[CONFIG_OBJECT_SPARKLES] = sConfigMgr->GetOption<bool>("Visibility.ObjectSparkles", true);
938
939 _bool_configs[CONFIG_LOW_LEVEL_REGEN_BOOST] = sConfigMgr->GetOption<bool>("EnableLowLevelRegenBoost", true);
940
941 _bool_configs[CONFIG_OBJECT_QUEST_MARKERS] = sConfigMgr->GetOption<bool>("Visibility.ObjectQuestMarkers", true);
942
943 _int_configs[CONFIG_MAIL_DELIVERY_DELAY] = sConfigMgr->GetOption<int32>("MailDeliveryDelay", HOUR);
944
945 _int_configs[CONFIG_UPTIME_UPDATE] = sConfigMgr->GetOption<int32>("UpdateUptimeInterval", 10);
947 {
948 LOG_ERROR("server.loading", "UpdateUptimeInterval ({}) must be > 0, set to default 10.", _int_configs[CONFIG_UPTIME_UPDATE]);
950 }
951
952 if (reload)
953 {
956 }
957
958 // log db cleanup interval
959 _int_configs[CONFIG_LOGDB_CLEARINTERVAL] = sConfigMgr->GetOption<int32>("LogDB.Opt.ClearInterval", 10);
961 {
962 LOG_ERROR("server.loading", "LogDB.Opt.ClearInterval ({}) must be > 0, set to default 10.", _int_configs[CONFIG_LOGDB_CLEARINTERVAL]);
964 }
965 if (reload)
966 {
969 }
970 _int_configs[CONFIG_LOGDB_CLEARTIME] = sConfigMgr->GetOption<int32>("LogDB.Opt.ClearTime", 1209600); // 14 days default
971 LOG_INFO("server.loading", "Will clear `logs` table of entries older than {} seconds every {} minutes.",
973
974 _int_configs[CONFIG_TELEPORT_TIMEOUT_NEAR] = sConfigMgr->GetOption<int32>("TeleportTimeoutNear", 25); // pussywizard
975 _int_configs[CONFIG_TELEPORT_TIMEOUT_FAR] = sConfigMgr->GetOption<int32>("TeleportTimeoutFar", 45); // pussywizard
976 _int_configs[CONFIG_MAX_ALLOWED_MMR_DROP] = sConfigMgr->GetOption<int32>("MaxAllowedMMRDrop", 500); // pussywizard
977 _bool_configs[CONFIG_ENABLE_LOGIN_AFTER_DC] = sConfigMgr->GetOption<bool>("EnableLoginAfterDC", true); // pussywizard
978 _bool_configs[CONFIG_DONT_CACHE_RANDOM_MOVEMENT_PATHS] = sConfigMgr->GetOption<bool>("DontCacheRandomMovementPaths", true); // pussywizard
979
980 _int_configs[CONFIG_SKILL_CHANCE_ORANGE] = sConfigMgr->GetOption<int32>("SkillChance.Orange", 100);
981 _int_configs[CONFIG_SKILL_CHANCE_YELLOW] = sConfigMgr->GetOption<int32>("SkillChance.Yellow", 75);
982 _int_configs[CONFIG_SKILL_CHANCE_GREEN] = sConfigMgr->GetOption<int32>("SkillChance.Green", 25);
983 _int_configs[CONFIG_SKILL_CHANCE_GREY] = sConfigMgr->GetOption<int32>("SkillChance.Grey", 0);
984
985 _int_configs[CONFIG_SKILL_CHANCE_MINING_STEPS] = sConfigMgr->GetOption<int32>("SkillChance.MiningSteps", 75);
986 _int_configs[CONFIG_SKILL_CHANCE_SKINNING_STEPS] = sConfigMgr->GetOption<int32>("SkillChance.SkinningSteps", 75);
987
988 _bool_configs[CONFIG_SKILL_PROSPECTING] = sConfigMgr->GetOption<bool>("SkillChance.Prospecting", false);
989 _bool_configs[CONFIG_SKILL_MILLING] = sConfigMgr->GetOption<bool>("SkillChance.Milling", false);
990
991 _int_configs[CONFIG_SKILL_GAIN_CRAFTING] = sConfigMgr->GetOption<int32>("SkillGain.Crafting", 1);
992
993 _int_configs[CONFIG_SKILL_GAIN_DEFENSE] = sConfigMgr->GetOption<int32>("SkillGain.Defense", 1);
994
995 _int_configs[CONFIG_SKILL_GAIN_GATHERING] = sConfigMgr->GetOption<int32>("SkillGain.Gathering", 1);
996
997 _int_configs[CONFIG_SKILL_GAIN_WEAPON] = sConfigMgr->GetOption<int32>("SkillGain.Weapon", 1);
998
999 _int_configs[CONFIG_MAX_OVERSPEED_PINGS] = sConfigMgr->GetOption<int32>("MaxOverspeedPings", 2);
1001 {
1002 LOG_ERROR("server.loading", "MaxOverspeedPings ({}) must be in range 2..infinity (or 0 to disable check). Set to 2.", _int_configs[CONFIG_MAX_OVERSPEED_PINGS]);
1004 }
1005
1006 _bool_configs[CONFIG_SAVE_RESPAWN_TIME_IMMEDIATELY] = sConfigMgr->GetOption<bool>("SaveRespawnTimeImmediately", true);
1007 _bool_configs[CONFIG_WEATHER] = sConfigMgr->GetOption<bool>("ActivateWeather", true);
1008
1009 _int_configs[CONFIG_DISABLE_BREATHING] = sConfigMgr->GetOption<int32>("DisableWaterBreath", SEC_CONSOLE);
1010
1011 _bool_configs[CONFIG_ALWAYS_MAX_SKILL_FOR_LEVEL] = sConfigMgr->GetOption<bool>("AlwaysMaxSkillForLevel", false);
1012
1013 if (reload)
1014 {
1015 uint32 val = sConfigMgr->GetOption<int32>("Expansion", 2);
1016 if (val != _int_configs[CONFIG_EXPANSION])
1017 LOG_ERROR("server.loading", "Expansion option can't be changed at worldserver.conf reload, using current value ({}).", _int_configs[CONFIG_EXPANSION]);
1018 }
1019 else
1020 _int_configs[CONFIG_EXPANSION] = sConfigMgr->GetOption<int32>("Expansion", 2);
1021
1022 _int_configs[CONFIG_CHATFLOOD_MESSAGE_COUNT] = sConfigMgr->GetOption<int32>("ChatFlood.MessageCount", 10);
1023 _int_configs[CONFIG_CHATFLOOD_MESSAGE_DELAY] = sConfigMgr->GetOption<int32>("ChatFlood.MessageDelay", 1);
1024 _int_configs[CONFIG_CHATFLOOD_ADDON_MESSAGE_COUNT] = sConfigMgr->GetOption<int32>("ChatFlood.AddonMessageCount", 100);
1025 _int_configs[CONFIG_CHATFLOOD_ADDON_MESSAGE_DELAY] = sConfigMgr->GetOption<int32>("ChatFlood.AddonMessageDelay", 1);
1026 _int_configs[CONFIG_CHATFLOOD_MUTE_TIME] = sConfigMgr->GetOption<int32>("ChatFlood.MuteTime", 10);
1027 _bool_configs[CONFIG_CHAT_MUTE_FIRST_LOGIN] = sConfigMgr->GetOption<bool>("Chat.MuteFirstLogin", false);
1028 _int_configs[CONFIG_CHAT_TIME_MUTE_FIRST_LOGIN] = sConfigMgr->GetOption<int32>("Chat.MuteTimeFirstLogin", 120);
1029
1030 _int_configs[CONFIG_EVENT_ANNOUNCE] = sConfigMgr->GetOption<int32>("Event.Announce", 0);
1031
1032 _float_configs[CONFIG_CREATURE_FAMILY_FLEE_ASSISTANCE_RADIUS] = sConfigMgr->GetOption<float>("CreatureFamilyFleeAssistanceRadius", 30.0f);
1033 _float_configs[CONFIG_CREATURE_FAMILY_ASSISTANCE_RADIUS] = sConfigMgr->GetOption<float>("CreatureFamilyAssistanceRadius", 10.0f);
1034 _int_configs[CONFIG_CREATURE_FAMILY_ASSISTANCE_DELAY] = sConfigMgr->GetOption<int32>("CreatureFamilyAssistanceDelay", 2000);
1035 _int_configs[CONFIG_CREATURE_FAMILY_ASSISTANCE_PERIOD] = sConfigMgr->GetOption<int32>("CreatureFamilyAssistancePeriod", 3000);
1036 _int_configs[CONFIG_CREATURE_FAMILY_FLEE_DELAY] = sConfigMgr->GetOption<int32>("CreatureFamilyFleeDelay", 7000);
1037
1038 _int_configs[CONFIG_WORLD_BOSS_LEVEL_DIFF] = sConfigMgr->GetOption<int32>("WorldBossLevelDiff", 3);
1039
1040 _bool_configs[CONFIG_QUEST_ENABLE_QUEST_TRACKER] = sConfigMgr->GetOption<bool>("Quests.EnableQuestTracker", false);
1041
1042 // note: disable value (-1) will assigned as 0xFFFFFFF, to prevent overflow at calculations limit it to max possible player level MAX_LEVEL(100)
1043 _int_configs[CONFIG_QUEST_LOW_LEVEL_HIDE_DIFF] = sConfigMgr->GetOption<int32>("Quests.LowLevelHideDiff", 4);
1046 _int_configs[CONFIG_QUEST_HIGH_LEVEL_HIDE_DIFF] = sConfigMgr->GetOption<int32>("Quests.HighLevelHideDiff", 7);
1049 _bool_configs[CONFIG_QUEST_IGNORE_RAID] = sConfigMgr->GetOption<bool>("Quests.IgnoreRaid", false);
1050 _bool_configs[CONFIG_QUEST_IGNORE_AUTO_ACCEPT] = sConfigMgr->GetOption<bool>("Quests.IgnoreAutoAccept", false);
1051 _bool_configs[CONFIG_QUEST_IGNORE_AUTO_COMPLETE] = sConfigMgr->GetOption<bool>("Quests.IgnoreAutoComplete", false);
1052
1053 _int_configs[CONFIG_RANDOM_BG_RESET_HOUR] = sConfigMgr->GetOption<int32>("Battleground.Random.ResetHour", 6);
1055 {
1056 LOG_ERROR("server.loading", "Battleground.Random.ResetHour ({}) can't be load. Set to 6.", _int_configs[CONFIG_RANDOM_BG_RESET_HOUR]);
1058 }
1059
1060 _int_configs[CONFIG_CALENDAR_DELETE_OLD_EVENTS_HOUR] = sConfigMgr->GetOption<int32>("Calendar.DeleteOldEventsHour", 6);
1062 {
1063 LOG_ERROR("server.loading", "Calendar.DeleteOldEventsHour ({}) can't be load. Set to 6.", _int_configs[CONFIG_CALENDAR_DELETE_OLD_EVENTS_HOUR]);
1065 }
1066
1067 _int_configs[CONFIG_GUILD_RESET_HOUR] = sConfigMgr->GetOption<int32>("Guild.ResetHour", 6);
1069 {
1070 LOG_ERROR("server.loading", "Guild.ResetHour ({}) can't be load. Set to 6.", _int_configs[CONFIG_GUILD_RESET_HOUR]);
1072 }
1073
1074 _int_configs[CONFIG_GUILD_BANK_INITIAL_TABS] = sConfigMgr->GetOption<int32>("Guild.BankInitialTabs", 0);
1075 _int_configs[CONFIG_GUILD_BANK_TAB_COST_0] = sConfigMgr->GetOption<int32>("Guild.BankTabCost0", 1000000);
1076 _int_configs[CONFIG_GUILD_BANK_TAB_COST_1] = sConfigMgr->GetOption<int32>("Guild.BankTabCost1", 2500000);
1077 _int_configs[CONFIG_GUILD_BANK_TAB_COST_2] = sConfigMgr->GetOption<int32>("Guild.BankTabCost2", 5000000);
1078 _int_configs[CONFIG_GUILD_BANK_TAB_COST_3] = sConfigMgr->GetOption<int32>("Guild.BankTabCost3", 10000000);
1079 _int_configs[CONFIG_GUILD_BANK_TAB_COST_4] = sConfigMgr->GetOption<int32>("Guild.BankTabCost4", 25000000);
1080 _int_configs[CONFIG_GUILD_BANK_TAB_COST_5] = sConfigMgr->GetOption<int32>("Guild.BankTabCost5", 50000000);
1081
1082 _bool_configs[CONFIG_DETECT_POS_COLLISION] = sConfigMgr->GetOption<bool>("DetectPosCollision", true);
1083
1084 _bool_configs[CONFIG_RESTRICTED_LFG_CHANNEL] = sConfigMgr->GetOption<bool>("Channel.RestrictedLfg", true);
1085 _bool_configs[CONFIG_SILENTLY_GM_JOIN_TO_CHANNEL] = sConfigMgr->GetOption<bool>("Channel.SilentlyGMJoin", false);
1086
1087 _bool_configs[CONFIG_TALENTS_INSPECTING] = sConfigMgr->GetOption<bool>("TalentsInspecting", true);
1088 _bool_configs[CONFIG_CHAT_FAKE_MESSAGE_PREVENTING] = sConfigMgr->GetOption<bool>("ChatFakeMessagePreventing", false);
1089 _int_configs[CONFIG_CHAT_STRICT_LINK_CHECKING_SEVERITY] = sConfigMgr->GetOption<int32>("ChatStrictLinkChecking.Severity", 0);
1090 _int_configs[CONFIG_CHAT_STRICT_LINK_CHECKING_KICK] = sConfigMgr->GetOption<int32>("ChatStrictLinkChecking.Kick", 0);
1091
1092 _int_configs[CONFIG_CORPSE_DECAY_NORMAL] = sConfigMgr->GetOption<int32>("Corpse.Decay.NORMAL", 60);
1093 _int_configs[CONFIG_CORPSE_DECAY_RARE] = sConfigMgr->GetOption<int32>("Corpse.Decay.RARE", 300);
1094 _int_configs[CONFIG_CORPSE_DECAY_ELITE] = sConfigMgr->GetOption<int32>("Corpse.Decay.ELITE", 300);
1095 _int_configs[CONFIG_CORPSE_DECAY_RAREELITE] = sConfigMgr->GetOption<int32>("Corpse.Decay.RAREELITE", 300);
1096 _int_configs[CONFIG_CORPSE_DECAY_WORLDBOSS] = sConfigMgr->GetOption<int32>("Corpse.Decay.WORLDBOSS", 3600);
1097
1098 _int_configs[CONFIG_DEATH_SICKNESS_LEVEL] = sConfigMgr->GetOption<int32> ("Death.SicknessLevel", 11);
1099 _bool_configs[CONFIG_DEATH_CORPSE_RECLAIM_DELAY_PVP] = sConfigMgr->GetOption<bool>("Death.CorpseReclaimDelay.PvP", true);
1100 _bool_configs[CONFIG_DEATH_CORPSE_RECLAIM_DELAY_PVE] = sConfigMgr->GetOption<bool>("Death.CorpseReclaimDelay.PvE", true);
1101 _bool_configs[CONFIG_DEATH_BONES_WORLD] = sConfigMgr->GetOption<bool>("Death.Bones.World", true);
1102 _bool_configs[CONFIG_DEATH_BONES_BG_OR_ARENA] = sConfigMgr->GetOption<bool>("Death.Bones.BattlegroundOrArena", true);
1103
1104 _bool_configs[CONFIG_DIE_COMMAND_MODE] = sConfigMgr->GetOption<bool>("Die.Command.Mode", true);
1105
1106 // always use declined names in the russian client
1108 (_int_configs[CONFIG_REALM_ZONE] == REALM_ZONE_RUSSIAN) ? true : sConfigMgr->GetOption<bool>("DeclinedNames", false);
1109
1110 _float_configs[CONFIG_LISTEN_RANGE_SAY] = sConfigMgr->GetOption<float>("ListenRange.Say", 25.0f);
1111 _float_configs[CONFIG_LISTEN_RANGE_TEXTEMOTE] = sConfigMgr->GetOption<float>("ListenRange.TextEmote", 25.0f);
1112 _float_configs[CONFIG_LISTEN_RANGE_YELL] = sConfigMgr->GetOption<float>("ListenRange.Yell", 300.0f);
1113
1114 _bool_configs[CONFIG_BATTLEGROUND_DISABLE_QUEST_SHARE_IN_BG] = sConfigMgr->GetOption<bool>("Battleground.DisableQuestShareInBG", false);
1115 _bool_configs[CONFIG_BATTLEGROUND_DISABLE_READY_CHECK_IN_BG] = sConfigMgr->GetOption<bool>("Battleground.DisableReadyCheckInBG", false);
1116 _bool_configs[CONFIG_BATTLEGROUND_CAST_DESERTER] = sConfigMgr->GetOption<bool>("Battleground.CastDeserter", true);
1117 _bool_configs[CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_ENABLE] = sConfigMgr->GetOption<bool>("Battleground.QueueAnnouncer.Enable", false);
1118 _int_configs[CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_LIMIT_MIN_LEVEL] = sConfigMgr->GetOption<uint32>("Battleground.QueueAnnouncer.Limit.MinLevel", 0);
1119 _int_configs[CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_LIMIT_MIN_PLAYERS] = sConfigMgr->GetOption<uint32>("Battleground.QueueAnnouncer.Limit.MinPlayers", 3);
1120 _int_configs[CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_SPAM_DELAY] = sConfigMgr->GetOption<uint32>("Battleground.QueueAnnouncer.SpamProtection.Delay", 30);
1121 _bool_configs[CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_PLAYERONLY] = sConfigMgr->GetOption<bool>("Battleground.QueueAnnouncer.PlayerOnly", false);
1122 _bool_configs[CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_TIMED] = sConfigMgr->GetOption<bool>("Battleground.QueueAnnouncer.Timed", false);
1123 _int_configs[CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_TIMER] = sConfigMgr->GetOption<uint32>("Battleground.QueueAnnouncer.Timer", 30000);
1124 _bool_configs[CONFIG_BATTLEGROUND_STORE_STATISTICS_ENABLE] = sConfigMgr->GetOption<bool>("Battleground.StoreStatistics.Enable", false);
1125 _bool_configs[CONFIG_BATTLEGROUND_TRACK_DESERTERS] = sConfigMgr->GetOption<bool>("Battleground.TrackDeserters.Enable", false);
1126 _int_configs[CONFIG_BATTLEGROUND_PREMATURE_FINISH_TIMER] = sConfigMgr->GetOption<int32> ("Battleground.PrematureFinishTimer", 5 * MINUTE * IN_MILLISECONDS);
1127 _int_configs[CONFIG_BATTLEGROUND_INVITATION_TYPE] = sConfigMgr->GetOption<int32>("Battleground.InvitationType", 0);
1128 _int_configs[CONFIG_BATTLEGROUND_PREMADE_GROUP_WAIT_FOR_MATCH] = sConfigMgr->GetOption<int32> ("Battleground.PremadeGroupWaitForMatch", 30 * MINUTE * IN_MILLISECONDS);
1129 _bool_configs[CONFIG_BG_XP_FOR_KILL] = sConfigMgr->GetOption<bool>("Battleground.GiveXPForKills", false);
1130 _int_configs[CONFIG_BATTLEGROUND_REPORT_AFK_TIMER] = sConfigMgr->GetOption<int32>("Battleground.ReportAFK.Timer", 4);
1131 _int_configs[CONFIG_BATTLEGROUND_REPORT_AFK] = sConfigMgr->GetOption<int32>("Battleground.ReportAFK", 3);
1133 {
1134 LOG_ERROR("server.loading", "Battleground.ReportAFK ({}) must be >0. Using 3 instead.", _int_configs[CONFIG_BATTLEGROUND_REPORT_AFK]);
1136 }
1138 {
1139 LOG_ERROR("server.loading", "Battleground.ReportAFK ({}) must be <10. Using 3 instead.", _int_configs[CONFIG_BATTLEGROUND_REPORT_AFK]);
1141 }
1142 _int_configs[CONFIG_BATTLEGROUND_PLAYER_RESPAWN] = sConfigMgr->GetOption<int32>("Battleground.PlayerRespawn", 30);
1144 {
1145 LOG_ERROR("server.loading", "Battleground.PlayerRespawn ({}) must be >2. Using 30 instead.", _int_configs[CONFIG_BATTLEGROUND_PLAYER_RESPAWN]);
1147 }
1148 _int_configs[CONFIG_BATTLEGROUND_RESTORATION_BUFF_RESPAWN] = sConfigMgr->GetOption<int32>("Battleground.RestorationBuffRespawn", 20);
1150 {
1151 LOG_ERROR("server.loading", "Battleground.RestorationBuffRespawn ({}) must be > 0. Using 20 instead.", _int_configs[CONFIG_BATTLEGROUND_RESTORATION_BUFF_RESPAWN]);
1153 }
1154 _int_configs[CONFIG_BATTLEGROUND_BERSERKING_BUFF_RESPAWN] = sConfigMgr->GetOption<int32>("Battleground.BerserkingBuffRespawn", 120);
1156 {
1157 LOG_ERROR("server.loading", "Battleground.BerserkingBuffRespawn ({}) must be > 0. Using 120 instead.", _int_configs[CONFIG_BATTLEGROUND_BERSERKING_BUFF_RESPAWN]);
1159 }
1160 _int_configs[CONFIG_BATTLEGROUND_SPEED_BUFF_RESPAWN] = sConfigMgr->GetOption<int32>("Battleground.SpeedBuffRespawn", 150);
1162 {
1163 LOG_ERROR("server.loading", "Battleground.SpeedBuffRespawn ({}) must be > 0. Using 150 instead.", _int_configs[CONFIG_BATTLEGROUND_SPEED_BUFF_RESPAWN]);
1165 }
1166
1167 _int_configs[CONFIG_ARENA_MAX_RATING_DIFFERENCE] = sConfigMgr->GetOption<uint32>("Arena.MaxRatingDifference", 150);
1168 _int_configs[CONFIG_ARENA_RATING_DISCARD_TIMER] = sConfigMgr->GetOption<uint32>("Arena.RatingDiscardTimer", 10 * MINUTE * IN_MILLISECONDS);
1169 _int_configs[CONFIG_ARENA_PREV_OPPONENTS_DISCARD_TIMER] = sConfigMgr->GetOption<uint32>("Arena.PreviousOpponentsDiscardTimer", 2 * MINUTE * IN_MILLISECONDS);
1170 _bool_configs[CONFIG_ARENA_AUTO_DISTRIBUTE_POINTS] = sConfigMgr->GetOption<bool>("Arena.AutoDistributePoints", false);
1171 _int_configs[CONFIG_ARENA_AUTO_DISTRIBUTE_INTERVAL_DAYS] = sConfigMgr->GetOption<uint32>("Arena.AutoDistributeInterval", 7); // pussywizard: spoiled by implementing constant day and hour, always 7 now
1172 _int_configs[CONFIG_ARENA_GAMES_REQUIRED] = sConfigMgr->GetOption<uint32>("Arena.GamesRequired", 10);
1173 _int_configs[CONFIG_ARENA_SEASON_ID] = sConfigMgr->GetOption<uint32>("Arena.ArenaSeason.ID", 1);
1174 _int_configs[CONFIG_ARENA_START_RATING] = sConfigMgr->GetOption<uint32>("Arena.ArenaStartRating", 0);
1175 _int_configs[CONFIG_LEGACY_ARENA_POINTS_CALC] = sConfigMgr->GetOption<uint32>("Arena.LegacyArenaPoints", 0);
1176 _int_configs[CONFIG_ARENA_START_PERSONAL_RATING] = sConfigMgr->GetOption<uint32>("Arena.ArenaStartPersonalRating", 1000);
1177 _int_configs[CONFIG_ARENA_START_MATCHMAKER_RATING] = sConfigMgr->GetOption<uint32>("Arena.ArenaStartMatchmakerRating", 1500);
1178 _bool_configs[CONFIG_ARENA_SEASON_IN_PROGRESS] = sConfigMgr->GetOption<bool>("Arena.ArenaSeason.InProgress", true);
1179 _float_configs[CONFIG_ARENA_WIN_RATING_MODIFIER_1] = sConfigMgr->GetOption<float>("Arena.ArenaWinRatingModifier1", 48.0f);
1180 _float_configs[CONFIG_ARENA_WIN_RATING_MODIFIER_2] = sConfigMgr->GetOption<float>("Arena.ArenaWinRatingModifier2", 24.0f);
1181 _float_configs[CONFIG_ARENA_LOSE_RATING_MODIFIER] = sConfigMgr->GetOption<float>("Arena.ArenaLoseRatingModifier", 24.0f);
1182 _float_configs[CONFIG_ARENA_MATCHMAKER_RATING_MODIFIER] = sConfigMgr->GetOption<float>("Arena.ArenaMatchmakerRatingModifier", 24.0f);
1183 _bool_configs[CONFIG_ARENA_QUEUE_ANNOUNCER_ENABLE] = sConfigMgr->GetOption<bool>("Arena.QueueAnnouncer.Enable", false);
1184 _bool_configs[CONFIG_ARENA_QUEUE_ANNOUNCER_PLAYERONLY] = sConfigMgr->GetOption<bool>("Arena.QueueAnnouncer.PlayerOnly", false);
1185 _int_configs[CONFIG_ARENA_QUEUE_ANNOUNCER_DETAIL] = sConfigMgr->GetOption<uint32>("Arena.QueueAnnouncer.Detail", 3);
1186
1187 _bool_configs[CONFIG_OFFHAND_CHECK_AT_SPELL_UNLEARN] = sConfigMgr->GetOption<bool>("OffhandCheckAtSpellUnlearn", true);
1188 _int_configs[CONFIG_CREATURE_STOP_FOR_PLAYER] = sConfigMgr->GetOption<uint32>("Creature.MovingStopTimeForPlayer", 3 * MINUTE * IN_MILLISECONDS);
1189
1190 _int_configs[CONFIG_WATER_BREATH_TIMER] = sConfigMgr->GetOption<uint32>("WaterBreath.Timer", 180000);
1192 {
1193 LOG_ERROR("server.loading", "WaterBreath.Timer ({}) must be > 0. Using 180000 instead.", _int_configs[CONFIG_WATER_BREATH_TIMER]);
1195 }
1196
1197 if (int32 clientCacheId = sConfigMgr->GetOption<int32>("ClientCacheVersion", 0))
1198 {
1199 // overwrite DB/old value
1200 if (clientCacheId > 0)
1201 {
1203 LOG_INFO("server.loading", "Client cache version set to: {}", clientCacheId);
1204 }
1205 else
1206 LOG_ERROR("server.loading", "ClientCacheVersion can't be negative {}, ignored.", clientCacheId);
1207 }
1208
1209 _int_configs[CONFIG_INSTANT_LOGOUT] = sConfigMgr->GetOption<int32>("InstantLogout", SEC_MODERATOR);
1210
1211 _int_configs[CONFIG_GUILD_EVENT_LOG_COUNT] = sConfigMgr->GetOption<int32>("Guild.EventLogRecordsCount", GUILD_EVENTLOG_MAX_RECORDS);
1214 _int_configs[CONFIG_GUILD_BANK_EVENT_LOG_COUNT] = sConfigMgr->GetOption<int32>("Guild.BankEventLogRecordsCount", GUILD_BANKLOG_MAX_RECORDS);
1217
1218 //visibility on continents
1219 _maxVisibleDistanceOnContinents = sConfigMgr->GetOption<float>("Visibility.Distance.Continents", DEFAULT_VISIBILITY_DISTANCE);
1220 if (_maxVisibleDistanceOnContinents < 45 * sWorld->getRate(RATE_CREATURE_AGGRO))
1221 {
1222 LOG_ERROR("server.loading", "Visibility.Distance.Continents can't be less max aggro radius {}", 45 * sWorld->getRate(RATE_CREATURE_AGGRO));
1224 }
1226 {
1227 LOG_ERROR("server.loading", "Visibility.Distance.Continents can't be greater {}", MAX_VISIBILITY_DISTANCE);
1229 }
1230
1231 //visibility in instances
1232 _maxVisibleDistanceInInstances = sConfigMgr->GetOption<float>("Visibility.Distance.Instances", DEFAULT_VISIBILITY_INSTANCE);
1233 if (_maxVisibleDistanceInInstances < 45 * sWorld->getRate(RATE_CREATURE_AGGRO))
1234 {
1235 LOG_ERROR("server.loading", "Visibility.Distance.Instances can't be less max aggro radius {}", 45 * sWorld->getRate(RATE_CREATURE_AGGRO));
1237 }
1239 {
1240 LOG_ERROR("server.loading", "Visibility.Distance.Instances can't be greater {}", MAX_VISIBILITY_DISTANCE);
1242 }
1243
1244 //visibility in BG/Arenas
1245 _maxVisibleDistanceInBGArenas = sConfigMgr->GetOption<float>("Visibility.Distance.BGArenas", DEFAULT_VISIBILITY_BGARENAS);
1246 if (_maxVisibleDistanceInBGArenas < 45 * sWorld->getRate(RATE_CREATURE_AGGRO))
1247 {
1248 LOG_ERROR("server.loading", "Visibility.Distance.BGArenas can't be less max aggro radius {}", 45 * sWorld->getRate(RATE_CREATURE_AGGRO));
1250 }
1252 {
1253 LOG_ERROR("server.loading", "Visibility.Distance.BGArenas can't be greater {}", MAX_VISIBILITY_DISTANCE);
1255 }
1256
1258 _int_configs[CONFIG_CHARDELETE_METHOD] = sConfigMgr->GetOption<int32>("CharDelete.Method", 0);
1259 _int_configs[CONFIG_CHARDELETE_MIN_LEVEL] = sConfigMgr->GetOption<int32>("CharDelete.MinLevel", 0);
1260 _int_configs[CONFIG_CHARDELETE_KEEP_DAYS] = sConfigMgr->GetOption<int32>("CharDelete.KeepDays", 30);
1261
1263 _bool_configs[CONFIG_ITEMDELETE_METHOD] = sConfigMgr->GetOption<bool>("ItemDelete.Method", 0);
1264 _bool_configs[CONFIG_ITEMDELETE_VENDOR] = sConfigMgr->GetOption<bool>("ItemDelete.Vendor", 0);
1265 _int_configs[CONFIG_ITEMDELETE_QUALITY] = sConfigMgr->GetOption<int32>("ItemDelete.Quality", 3);
1266 _int_configs[CONFIG_ITEMDELETE_ITEM_LEVEL] = sConfigMgr->GetOption<int32>("ItemDelete.ItemLevel", 80);
1267
1268 _int_configs[CONFIG_FFA_PVP_TIMER] = sConfigMgr->GetOption<int32>("FFAPvPTimer", 30);
1269
1270 _int_configs[CONFIG_LOOT_NEED_BEFORE_GREED_ILVL_RESTRICTION] = sConfigMgr->GetOption<int32>("LootNeedBeforeGreedILvlRestriction", 70);
1271
1272 _bool_configs[CONFIG_PLAYER_SETTINGS_ENABLED] = sConfigMgr->GetOption<bool>("EnablePlayerSettings", 0);
1273
1274 _bool_configs[CONFIG_ALLOW_JOIN_BG_AND_LFG] = sConfigMgr->GetOption<bool>("JoinBGAndLFG.Enable", false);
1275
1276 _bool_configs[CONFIG_LEAVE_GROUP_ON_LOGOUT] = sConfigMgr->GetOption<bool>("LeaveGroupOnLogout.Enabled", true);
1277
1278 _bool_configs[CONFIG_QUEST_POI_ENABLED] = sConfigMgr->GetOption<bool>("QuestPOI.Enabled", true);
1279
1280 _int_configs[CONFIG_CHANGE_FACTION_MAX_MONEY] = sConfigMgr->GetOption<uint32>("ChangeFaction.MaxMoney", 0);
1281
1282 _bool_configs[CONFIG_ALLOWS_RANK_MOD_FOR_PET_HEALTH] = sConfigMgr->GetOption<bool>("Pet.RankMod.Health", true);
1283
1284 _int_configs[CONFIG_DAILY_RBG_MIN_LEVEL_AP_REWARD] = sConfigMgr->GetOption<uint32>("DailyRBGArenaPoints.MinLevel", 71);
1285
1286 _int_configs[CONFIG_AUCTION_HOUSE_SEARCH_TIMEOUT] = sConfigMgr->GetOption<uint32>("AuctionHouse.SearchTimeout", 1000);
1287
1289 std::string dataPath = sConfigMgr->GetOption<std::string>("DataDir", "./");
1290 if (dataPath.empty() || (dataPath.at(dataPath.length() - 1) != '/' && dataPath.at(dataPath.length() - 1) != '\\'))
1291 dataPath.push_back('/');
1292
1293#if AC_PLATFORM == AC_PLATFORM_UNIX || AC_PLATFORM == AC_PLATFORM_APPLE
1294 if (dataPath[0] == '~')
1295 {
1296 const char* home = getenv("HOME");
1297 if (home)
1298 dataPath.replace(0, 1, home);
1299 }
1300#endif
1301
1302 if (reload)
1303 {
1304 if (dataPath != _dataPath)
1305 LOG_ERROR("server.loading", "DataDir option can't be changed at worldserver.conf reload, using current value ({}).", _dataPath);
1306 }
1307 else
1308 {
1309 _dataPath = dataPath;
1310 LOG_INFO("server.loading", "Using DataDir {}", _dataPath);
1311 }
1312
1313 _bool_configs[CONFIG_VMAP_INDOOR_CHECK] = sConfigMgr->GetOption<bool>("vmap.enableIndoorCheck", 0);
1314 bool enableIndoor = sConfigMgr->GetOption<bool>("vmap.enableIndoorCheck", true);
1315 bool enableLOS = sConfigMgr->GetOption<bool>("vmap.enableLOS", true);
1316 bool enableHeight = sConfigMgr->GetOption<bool>("vmap.enableHeight", true);
1317 bool enablePetLOS = sConfigMgr->GetOption<bool>("vmap.petLOS", true);
1318 _bool_configs[CONFIG_VMAP_BLIZZLIKE_PVP_LOS] = sConfigMgr->GetOption<bool>("vmap.BlizzlikePvPLOS", true);
1319
1320 if (!enableHeight)
1321 LOG_ERROR("server.loading", "VMap height checking disabled! Creatures movements and other various things WILL be broken! Expect no support.");
1322
1325 LOG_INFO("server.loading", "WORLD: VMap support included. LineOfSight:{}, getHeight:{}, indoorCheck:{} PetLOS:{}", enableLOS, enableHeight, enableIndoor, enablePetLOS);
1326
1327 _bool_configs[CONFIG_PET_LOS] = sConfigMgr->GetOption<bool>("vmap.petLOS", true);
1328 _bool_configs[CONFIG_START_CUSTOM_SPELLS] = sConfigMgr->GetOption<bool>("PlayerStart.CustomSpells", false);
1329 _int_configs[CONFIG_HONOR_AFTER_DUEL] = sConfigMgr->GetOption<int32>("HonorPointsAfterDuel", 0);
1330 _bool_configs[CONFIG_START_ALL_EXPLORED] = sConfigMgr->GetOption<bool>("PlayerStart.MapsExplored", false);
1331 _bool_configs[CONFIG_START_ALL_REP] = sConfigMgr->GetOption<bool>("PlayerStart.AllReputation", false);
1332 _bool_configs[CONFIG_ALWAYS_MAXSKILL] = sConfigMgr->GetOption<bool>("AlwaysMaxWeaponSkill", false);
1333 _bool_configs[CONFIG_PVP_TOKEN_ENABLE] = sConfigMgr->GetOption<bool>("PvPToken.Enable", false);
1334 _int_configs[CONFIG_PVP_TOKEN_MAP_TYPE] = sConfigMgr->GetOption<int32>("PvPToken.MapAllowType", 4);
1335 _int_configs[CONFIG_PVP_TOKEN_ID] = sConfigMgr->GetOption<int32>("PvPToken.ItemID", 29434);
1336 _int_configs[CONFIG_PVP_TOKEN_COUNT] = sConfigMgr->GetOption<int32>("PvPToken.ItemCount", 1);
1339
1340 _bool_configs[CONFIG_NO_RESET_TALENT_COST] = sConfigMgr->GetOption<bool>("NoResetTalentsCost", false);
1341 _int_configs[CONFIG_TOGGLE_XP_COST] = sConfigMgr->GetOption<int32>("ToggleXP.Cost", 100000);
1342 _bool_configs[CONFIG_SHOW_KICK_IN_WORLD] = sConfigMgr->GetOption<bool>("ShowKickInWorld", false);
1343 _bool_configs[CONFIG_SHOW_MUTE_IN_WORLD] = sConfigMgr->GetOption<bool>("ShowMuteInWorld", false);
1344 _bool_configs[CONFIG_SHOW_BAN_IN_WORLD] = sConfigMgr->GetOption<bool>("ShowBanInWorld", false);
1345 _int_configs[CONFIG_NUMTHREADS] = sConfigMgr->GetOption<int32>("MapUpdate.Threads", 1);
1346 _int_configs[CONFIG_MAX_RESULTS_LOOKUP_COMMANDS] = sConfigMgr->GetOption<int32>("Command.LookupMaxResults", 0);
1347
1348 // Warden
1349 _bool_configs[CONFIG_WARDEN_ENABLED] = sConfigMgr->GetOption<bool>("Warden.Enabled", true);
1350 _int_configs[CONFIG_WARDEN_NUM_MEM_CHECKS] = sConfigMgr->GetOption<int32>("Warden.NumMemChecks", 3);
1351 _int_configs[CONFIG_WARDEN_NUM_LUA_CHECKS] = sConfigMgr->GetOption<int32>("Warden.NumLuaChecks", 1);
1352 _int_configs[CONFIG_WARDEN_NUM_OTHER_CHECKS] = sConfigMgr->GetOption<int32>("Warden.NumOtherChecks", 7);
1353 _int_configs[CONFIG_WARDEN_CLIENT_BAN_DURATION] = sConfigMgr->GetOption<int32>("Warden.BanDuration", 86400);
1354 _int_configs[CONFIG_WARDEN_CLIENT_CHECK_HOLDOFF] = sConfigMgr->GetOption<int32>("Warden.ClientCheckHoldOff", 30);
1355 _int_configs[CONFIG_WARDEN_CLIENT_FAIL_ACTION] = sConfigMgr->GetOption<int32>("Warden.ClientCheckFailAction", 0);
1356 _int_configs[CONFIG_WARDEN_CLIENT_RESPONSE_DELAY] = sConfigMgr->GetOption<int32>("Warden.ClientResponseDelay", 600);
1357
1358 // Dungeon finder
1359 _int_configs[CONFIG_LFG_OPTIONSMASK] = sConfigMgr->GetOption<int32>("DungeonFinder.OptionsMask", 5);
1360
1361 // DBC_ItemAttributes
1362 _bool_configs[CONFIG_DBC_ENFORCE_ITEM_ATTRIBUTES] = sConfigMgr->GetOption<bool>("DBC.EnforceItemAttributes", true);
1363
1364 // Max instances per hour
1365 _int_configs[CONFIG_MAX_INSTANCES_PER_HOUR] = sConfigMgr->GetOption<int32>("AccountInstancesPerHour", 5);
1366
1367 // AutoBroadcast
1368 _bool_configs[CONFIG_AUTOBROADCAST] = sConfigMgr->GetOption<bool>("AutoBroadcast.On", false);
1369 _int_configs[CONFIG_AUTOBROADCAST_CENTER] = sConfigMgr->GetOption<int32>("AutoBroadcast.Center", 0);
1370 _int_configs[CONFIG_AUTOBROADCAST_INTERVAL] = sConfigMgr->GetOption<int32>("AutoBroadcast.Timer", 60000);
1371 _int_configs[CONFIG_AUTOBROADCAST_MIN_LEVEL_DISABLE] = sConfigMgr->GetOption<int32>("AutoBroadcast.MinDisableLevel", 0);
1372 if (reload)
1373 {
1376 }
1377
1378 // MySQL ping time interval
1379 _int_configs[CONFIG_DB_PING_INTERVAL] = sConfigMgr->GetOption<int32>("MaxPingTime", 30);
1380
1381 // misc
1382 _bool_configs[CONFIG_PDUMP_NO_PATHS] = sConfigMgr->GetOption<bool>("PlayerDump.DisallowPaths", true);
1383 _bool_configs[CONFIG_PDUMP_NO_OVERWRITE] = sConfigMgr->GetOption<bool>("PlayerDump.DisallowOverwrite", true);
1384 _bool_configs[CONFIG_ENABLE_MMAPS] = sConfigMgr->GetOption<bool>("MoveMaps.Enable", true);
1386
1387 // Wintergrasp
1388 _int_configs[CONFIG_WINTERGRASP_ENABLE] = sConfigMgr->GetOption<int32>("Wintergrasp.Enable", 1);
1389 _int_configs[CONFIG_WINTERGRASP_PLR_MAX] = sConfigMgr->GetOption<int32>("Wintergrasp.PlayerMax", 100);
1390 _int_configs[CONFIG_WINTERGRASP_PLR_MIN] = sConfigMgr->GetOption<int32>("Wintergrasp.PlayerMin", 0);
1391 _int_configs[CONFIG_WINTERGRASP_PLR_MIN_LVL] = sConfigMgr->GetOption<int32>("Wintergrasp.PlayerMinLvl", 77);
1392 _int_configs[CONFIG_WINTERGRASP_BATTLETIME] = sConfigMgr->GetOption<int32>("Wintergrasp.BattleTimer", 30);
1393 _int_configs[CONFIG_WINTERGRASP_NOBATTLETIME] = sConfigMgr->GetOption<int32>("Wintergrasp.NoBattleTimer", 150);
1394 _int_configs[CONFIG_WINTERGRASP_RESTART_AFTER_CRASH] = sConfigMgr->GetOption<int32>("Wintergrasp.CrashRestartTimer", 10);
1395
1396 _int_configs[CONFIG_BIRTHDAY_TIME] = sConfigMgr->GetOption<int32>("BirthdayTime", 1222964635);
1397 _bool_configs[CONFIG_MINIGOB_MANABONK] = sConfigMgr->GetOption<bool>("Minigob.Manabonk.Enable", true);
1398
1399 _bool_configs[CONFIG_ENABLE_CONTINENT_TRANSPORT] = sConfigMgr->GetOption<bool>("IsContinentTransport.Enabled", true);
1400 _bool_configs[CONFIG_ENABLE_CONTINENT_TRANSPORT_PRELOADING] = sConfigMgr->GetOption<bool>("IsPreloadedContinentTransport.Enabled", false);
1401
1402 _bool_configs[CONFIG_IP_BASED_ACTION_LOGGING] = sConfigMgr->GetOption<bool>("Allow.IP.Based.Action.Logging", false);
1403
1404 // Whether to use LoS from game objects
1405 _bool_configs[CONFIG_CHECK_GOBJECT_LOS] = sConfigMgr->GetOption<bool>("CheckGameObjectLoS", true);
1406
1407 _bool_configs[CONFIG_CALCULATE_CREATURE_ZONE_AREA_DATA] = sConfigMgr->GetOption<bool>("Calculate.Creature.Zone.Area.Data", false);
1408 _bool_configs[CONFIG_CALCULATE_GAMEOBJECT_ZONE_AREA_DATA] = sConfigMgr->GetOption<bool>("Calculate.Gameoject.Zone.Area.Data", false);
1409
1410 // Player can join LFG anywhere
1411 _bool_configs[CONFIG_LFG_LOCATION_ALL] = sConfigMgr->GetOption<bool>("LFG.Location.All", false);
1412
1413 // Prevent players AFK from being logged out
1414 _int_configs[CONFIG_AFK_PREVENT_LOGOUT] = sConfigMgr->GetOption<int32>("PreventAFKLogout", 0);
1415
1416 // Preload all grids of all non-instanced maps
1417 _bool_configs[CONFIG_PRELOAD_ALL_NON_INSTANCED_MAP_GRIDS] = sConfigMgr->GetOption<bool>("PreloadAllNonInstancedMapGrids", false);
1418
1419 // ICC buff override
1420 _int_configs[CONFIG_ICC_BUFF_HORDE] = sConfigMgr->GetOption<int32>("ICC.Buff.Horde", 73822);
1421 _int_configs[CONFIG_ICC_BUFF_ALLIANCE] = sConfigMgr->GetOption<int32>("ICC.Buff.Alliance", 73828);
1422
1423 _bool_configs[CONFIG_SET_ALL_CREATURES_WITH_WAYPOINT_MOVEMENT_ACTIVE] = sConfigMgr->GetOption<bool>("SetAllCreaturesWithWaypointMovementActive", false);
1424
1425 // packet spoof punishment
1427 _int_configs[CONFIG_PACKET_SPOOF_BANMODE] = sConfigMgr->GetOption<int32>("PacketSpoof.BanMode", (uint32)0);
1430
1431 _int_configs[CONFIG_PACKET_SPOOF_BANDURATION] = sConfigMgr->GetOption<int32>("PacketSpoof.BanDuration", 86400);
1432
1433 // Random Battleground Rewards
1434 _int_configs[CONFIG_BG_REWARD_WINNER_HONOR_FIRST] = sConfigMgr->GetOption<int32>("Battleground.RewardWinnerHonorFirst", 30);
1435 _int_configs[CONFIG_BG_REWARD_WINNER_ARENA_FIRST] = sConfigMgr->GetOption<int32>("Battleground.RewardWinnerArenaFirst", 25);
1436 _int_configs[CONFIG_BG_REWARD_WINNER_HONOR_LAST] = sConfigMgr->GetOption<int32>("Battleground.RewardWinnerHonorLast", 15);
1437 _int_configs[CONFIG_BG_REWARD_WINNER_ARENA_LAST] = sConfigMgr->GetOption<int32>("Battleground.RewardWinnerArenaLast", 0);
1438 _int_configs[CONFIG_BG_REWARD_LOSER_HONOR_FIRST] = sConfigMgr->GetOption<int32>("Battleground.RewardLoserHonorFirst", 5);
1439 _int_configs[CONFIG_BG_REWARD_LOSER_HONOR_LAST] = sConfigMgr->GetOption<int32>("Battleground.RewardLoserHonorLast", 5);
1440
1441 _int_configs[CONFIG_WAYPOINT_MOVEMENT_STOP_TIME_FOR_PLAYER] = sConfigMgr->GetOption<int32>("WaypointMovementStopTimeForPlayer", 120);
1442
1443 _int_configs[CONFIG_DUNGEON_ACCESS_REQUIREMENTS_PRINT_MODE] = sConfigMgr->GetOption<int32>("DungeonAccessRequirements.PrintMode", 1);
1444 _bool_configs[CONFIG_DUNGEON_ACCESS_REQUIREMENTS_PORTAL_CHECK_ILVL] = sConfigMgr->GetOption<bool>("DungeonAccessRequirements.PortalAvgIlevelCheck", false);
1445 _bool_configs[CONFIG_DUNGEON_ACCESS_REQUIREMENTS_LFG_DBC_LEVEL_OVERRIDE] = sConfigMgr->GetOption<bool>("DungeonAccessRequirements.LFGLevelDBCOverride", false);
1446 _int_configs[CONFIG_DUNGEON_ACCESS_REQUIREMENTS_OPTIONAL_STRING_ID] = sConfigMgr->GetOption<int32>("DungeonAccessRequirements.OptionalStringID", 0);
1447 _int_configs[CONFIG_NPC_EVADE_IF_NOT_REACHABLE] = sConfigMgr->GetOption<int32>("NpcEvadeIfTargetIsUnreachable", 5);
1448 _int_configs[CONFIG_NPC_REGEN_TIME_IF_NOT_REACHABLE_IN_RAID] = sConfigMgr->GetOption<int32>("NpcRegenHPTimeIfTargetIsUnreachable", 10);
1449 _bool_configs[CONFIG_REGEN_HP_CANNOT_REACH_TARGET_IN_RAID] = sConfigMgr->GetOption<bool>("NpcRegenHPIfTargetIsUnreachable", true);
1450
1451 //Debug
1452 _bool_configs[CONFIG_DEBUG_BATTLEGROUND] = sConfigMgr->GetOption<bool>("Debug.Battleground", false);
1453 _bool_configs[CONFIG_DEBUG_ARENA] = sConfigMgr->GetOption<bool>("Debug.Arena", false);
1454
1455 _int_configs[CONFIG_GM_LEVEL_CHANNEL_MODERATION] = sConfigMgr->GetOption<int32>("Channel.ModerationGMLevel", 1);
1456
1457 _bool_configs[CONFIG_SET_BOP_ITEM_TRADEABLE] = sConfigMgr->GetOption<bool>("Item.SetItemTradeable", true);
1458
1459 // Specifies if IP addresses can be logged to the database
1460 _bool_configs[CONFIG_ALLOW_LOGGING_IP_ADDRESSES_IN_DATABASE] = sConfigMgr->GetOption<bool>("AllowLoggingIPAddressesInDatabase", true, true);
1461
1462 // LFG group mechanics.
1463 _int_configs[CONFIG_LFG_MAX_KICK_COUNT] = sConfigMgr->GetOption<int32>("LFG.MaxKickCount", 2);
1465 {
1467 LOG_ERROR("server.loading", "LFG.MaxKickCount can't be higher than 3.");
1468 }
1469
1470 _int_configs[CONFIG_LFG_KICK_PREVENTION_TIMER] = sConfigMgr->GetOption<int32>("LFG.KickPreventionTimer", 15 * MINUTE * IN_MILLISECONDS) * IN_MILLISECONDS;
1472 {
1474 LOG_ERROR("server.loading", "LFG.KickPreventionTimer can't be higher than 15 minutes.");
1475 }
1476
1477 // Realm Availability
1478 _bool_configs[CONFIG_REALM_LOGIN_ENABLED] = sConfigMgr->GetOption<bool>("World.RealmAvailability", true);
1479
1480 // call ScriptMgr if we're reloading the configuration
1481 sScriptMgr->OnAfterConfigLoad(reload);
1482}
constexpr auto IN_MILLISECONDS
Definition: Common.h:55
constexpr auto HOUR
Definition: Common.h:50
@ SEC_ADMINISTRATOR
Definition: Common.h:62
@ SEC_MODERATOR
Definition: Common.h:60
@ SEC_CONSOLE
Definition: Common.h:63
constexpr auto MINUTE
Definition: Common.h:49
#define sLog
Definition: Log.h:126
#define sMetric
Definition: Metric.h:132
#define MAX_VISIBILITY_DISTANCE
Definition: ObjectDefines.h:31
#define DEFAULT_VISIBILITY_DISTANCE
Definition: ObjectDefines.h:40
#define DEFAULT_VISIBILITY_BGARENAS
Definition: ObjectDefines.h:43
#define DEFAULT_VISIBILITY_INSTANCE
Definition: ObjectDefines.h:41
#define MAX_MONEY_AMOUNT
Definition: Player.h:922
float baseMoveSpeed[MAX_MOVE_TYPE]
Definition: Unit.cpp:76
float playerBaseMoveSpeed[MAX_MOVE_TYPE]
Definition: Unit.cpp:89
#define MAX_MOVE_TYPE
Definition: Unit.h:389
#define MAX_PLAYER_NAME
Definition: ObjectMgr.h:688
#define MAX_CHARTER_NAME
Definition: ObjectMgr.h:691
#define MAX_PET_NAME
Definition: ObjectMgr.h:690
#define MIN_MAP_UPDATE_DELAY
Definition: GridDefines.h:42
#define sMapMgr
Definition: MapMgr.h:221
#define sScriptMgr
Definition: ScriptMgr.h:698
WorldUpdateTime sWorldUpdateTime
Definition: UpdateTime.cpp:24
@ CONFIG_AUTOBROADCAST_CENTER
Definition: IWorld.h:355
@ CONFIG_CHANGE_FACTION_MAX_MONEY
Definition: IWorld.h:417
@ CONFIG_ARENA_START_MATCHMAKER_RATING
Definition: IWorld.h:331
@ CONFIG_ARENA_SEASON_ID
Definition: IWorld.h:327
@ CONFIG_MAX_ALLOWED_MMR_DROP
Definition: IWorld.h:344
@ CONFIG_BATTLEGROUND_PLAYER_RESPAWN
Definition: IWorld.h:315
@ CONFIG_START_HEROIC_PLAYER_MONEY
Definition: IWorld.h:241
@ CONFIG_CORPSE_DECAY_ELITE
Definition: IWorld.h:302
@ CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_LIMIT_MIN_LEVEL
Definition: IWorld.h:319
@ CONFIG_ARENA_GAMES_REQUIRED
Definition: IWorld.h:326
@ CONFIG_MAX_INSTANCES_PER_HOUR
Definition: IWorld.h:363
@ CONFIG_GUILD_EVENT_LOG_COUNT
Definition: IWorld.h:346
@ CONFIG_ARENA_START_RATING
Definition: IWorld.h:328
@ CONFIG_SOCKET_TIMEOUTTIME
Definition: IWorld.h:216
@ CONFIG_BATTLEGROUND_REPORT_AFK_TIMER
Definition: IWorld.h:312
@ CONFIG_MAX_OVERSPEED_PINGS
Definition: IWorld.h:275
@ CONFIG_WARDEN_NUM_LUA_CHECKS
Definition: IWorld.h:378
@ CONFIG_BATTLEGROUND_BERSERKING_BUFF_RESPAWN
Definition: IWorld.h:317
@ CONFIG_CHARDELETE_METHOD
Definition: IWorld.h:353
@ CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_SPAM_DELAY
Definition: IWorld.h:308
@ CONFIG_SESSION_ADD_DELAY
Definition: IWorld.h:217
@ CONFIG_AUTOBROADCAST_MIN_LEVEL_DISABLE
Definition: IWorld.h:357
@ CONFIG_CHARACTER_CREATING_DISABLED_CLASSMASK
Definition: IWorld.h:229
@ CONFIG_WARDEN_CLIENT_BAN_DURATION
Definition: IWorld.h:376
@ CONFIG_CLIENTCACHE_VERSION
Definition: IWorld.h:345
@ CONFIG_DAILY_RBG_MIN_LEVEL_AP_REWARD
Definition: IWorld.h:420
@ CONFIG_QUEST_LOW_LEVEL_HIDE_DIFF
Definition: IWorld.h:287
@ CONFIG_SKILL_CHANCE_ORANGE
Definition: IWorld.h:265
@ CONFIG_GM_CHAT
Definition: IWorld.h:257
@ CONFIG_LFG_KICK_PREVENTION_TIMER
Definition: IWorld.h:416
@ CONFIG_FFA_PVP_TIMER
Definition: IWorld.h:413
@ CONFIG_CHATFLOOD_MUTE_TIME
Definition: IWorld.h:281
@ CONFIG_STRICT_PET_NAMES
Definition: IWorld.h:223
@ CONFIG_CHARACTER_CREATING_DISABLED
Definition: IWorld.h:227
@ CONFIG_MIN_PET_NAME
Definition: IWorld.h:226
@ CONFIG_LOGDB_CLEARTIME
Definition: IWorld.h:341
@ CONFIG_LOOT_NEED_BEFORE_GREED_ILVL_RESTRICTION
Definition: IWorld.h:414
@ CONFIG_INSTANCE_RESET_TIME_RELATIVE_TIMESTAMP
Definition: IWorld.h:250
@ CONFIG_QUEST_HIGH_LEVEL_HIDE_DIFF
Definition: IWorld.h:288
@ CONFIG_CHARACTER_CREATING_DISABLED_RACEMASK
Definition: IWorld.h:228
@ CONFIG_INTERVAL_CHANGEWEATHER
Definition: IWorld.h:212
@ CONFIG_GUILD_BANK_TAB_COST_4
Definition: IWorld.h:407
@ CONFIG_NPC_EVADE_IF_NOT_REACHABLE
Definition: IWorld.h:411
@ CONFIG_EVENT_ANNOUNCE
Definition: IWorld.h:282
@ CONFIG_PRESERVE_CUSTOM_CHANNEL_DURATION
Definition: IWorld.h:360
@ CONFIG_GM_WHISPERING_TO
Definition: IWorld.h:258
@ CONFIG_SKILL_CHANCE_SKINNING_STEPS
Definition: IWorld.h:270
@ CONFIG_INSTANT_LOGOUT
Definition: IWorld.h:306
@ CONFIG_SKILL_CHANCE_YELLOW
Definition: IWorld.h:266
@ CONFIG_BATTLEGROUND_RESTORATION_BUFF_RESPAWN
Definition: IWorld.h:316
@ CONFIG_DUNGEON_ACCESS_REQUIREMENTS_OPTIONAL_STRING_ID
Definition: IWorld.h:401
@ CONFIG_AUTOBROADCAST_INTERVAL
Definition: IWorld.h:356
@ CONFIG_MAX_HONOR_POINTS
Definition: IWorld.h:242
@ CONFIG_PVP_TOKEN_MAP_TYPE
Definition: IWorld.h:334
@ CONFIG_ENABLE_SINFO_LOGIN
Definition: IWorld.h:337
@ CONFIG_CHARTER_COST_GUILD
Definition: IWorld.h:394
@ CONFIG_CHARDELETE_MIN_LEVEL
Definition: IWorld.h:354
@ CONFIG_WARDEN_NUM_MEM_CHECKS
Definition: IWorld.h:377
@ CONFIG_MAX_ARENA_POINTS
Definition: IWorld.h:245
@ CONFIG_ARENA_MAX_RATING_DIFFERENCE
Definition: IWorld.h:322
@ CONFIG_BG_REWARD_LOSER_HONOR_LAST
Definition: IWorld.h:393
@ CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_LIMIT_MIN_PLAYERS
Definition: IWorld.h:320
@ CONFIG_BATTLEGROUND_SPEED_BUFF_RESPAWN
Definition: IWorld.h:318
@ CONFIG_START_GM_LEVEL
Definition: IWorld.h:261
@ CONFIG_MAIL_LEVEL_REQ
Definition: IWorld.h:299
@ CONFIG_SKILL_GAIN_DEFENSE
Definition: IWorld.h:272
@ CONFIG_MIN_PETITION_SIGNS
Definition: IWorld.h:253
@ CONFIG_BIRTHDAY_TIME
Definition: IWorld.h:380
@ CONFIG_WARDEN_CLIENT_CHECK_HOLDOFF
Definition: IWorld.h:374
@ CONFIG_PARTY_LEVEL_REQ
Definition: IWorld.h:294
@ CONFIG_AUCTION_HOUSE_SEARCH_TIMEOUT
Definition: IWorld.h:419
@ CONFIG_MIN_LEVEL_STAT_SAVE
Definition: IWorld.h:348
@ CONFIG_START_HEROIC_PLAYER_LEVEL
Definition: IWorld.h:239
@ CONFIG_BATTLEGROUND_INVITATION_TYPE
Definition: IWorld.h:314
@ CONFIG_GUILD_BANK_TAB_COST_3
Definition: IWorld.h:406
@ CONFIG_START_ARENA_POINTS
Definition: IWorld.h:246
@ CONFIG_MIN_CHARTER_NAME
Definition: IWorld.h:225
@ CONFIG_NPC_REGEN_TIME_IF_NOT_REACHABLE_IN_RAID
Definition: IWorld.h:412
@ CONFIG_CHAT_CHANNEL_LEVEL_REQ
Definition: IWorld.h:291
@ CONFIG_STRICT_CHANNEL_NAMES
Definition: IWorld.h:222
@ CONFIG_BG_REWARD_WINNER_ARENA_FIRST
Definition: IWorld.h:389
@ CONFIG_CHARACTERS_PER_ACCOUNT
Definition: IWorld.h:230
@ CONFIG_DEATH_SICKNESS_LEVEL
Definition: IWorld.h:305
@ CONFIG_CHARTER_COST_ARENA_5v5
Definition: IWorld.h:397
@ CONFIG_INSTANCE_RESET_TIME_HOUR
Definition: IWorld.h:249
@ CONFIG_GM_LEVEL_CHANNEL_MODERATION
Definition: IWorld.h:409
@ CONFIG_WINTERGRASP_PLR_MIN_LVL
Definition: IWorld.h:366
@ CONFIG_PVP_TOKEN_ID
Definition: IWorld.h:335
@ CONFIG_GUILD_RESET_HOUR
Definition: IWorld.h:351
@ CONFIG_SKILL_GAIN_WEAPON
Definition: IWorld.h:274
@ CONFIG_MAIL_DELIVERY_DELAY
Definition: IWorld.h:263
@ CONFIG_WINTERGRASP_BATTLETIME
Definition: IWorld.h:367
@ CONFIG_WINTERGRASP_NOBATTLETIME
Definition: IWorld.h:368
@ CONFIG_PVP_TOKEN_COUNT
Definition: IWorld.h:336
@ CONFIG_PACKET_SPOOF_BANDURATION
Definition: IWorld.h:372
@ CONFIG_WATER_BREATH_TIMER
Definition: IWorld.h:418
@ CONFIG_INSTANT_TAXI
Definition: IWorld.h:382
@ CONFIG_SKILL_CHANCE_MINING_STEPS
Definition: IWorld.h:269
@ CONFIG_ARENA_AUTO_DISTRIBUTE_INTERVAL_DAYS
Definition: IWorld.h:325
@ CONFIG_START_PLAYER_MONEY
Definition: IWorld.h:240
@ CONFIG_GUILD_BANK_EVENT_LOG_COUNT
Definition: IWorld.h:347
@ CONFIG_TRADE_LEVEL_REQ
Definition: IWorld.h:296
@ CONFIG_BG_REWARD_WINNER_ARENA_LAST
Definition: IWorld.h:391
@ CONFIG_ICC_BUFF_ALLIANCE
Definition: IWorld.h:385
@ CONFIG_BATTLEGROUND_PREMADE_GROUP_WAIT_FOR_MATCH
Definition: IWorld.h:311
@ CONFIG_CORPSE_DECAY_NORMAL
Definition: IWorld.h:300
@ CONFIG_WINTERGRASP_RESTART_AFTER_CRASH
Definition: IWorld.h:369
@ CONFIG_TELEPORT_TIMEOUT_FAR
Definition: IWorld.h:343
@ CONFIG_SOCKET_TIMEOUTTIME_ACTIVE
Definition: IWorld.h:381
@ CONFIG_START_PLAYER_LEVEL
Definition: IWorld.h:238
@ CONFIG_GUILD_BANK_TAB_COST_2
Definition: IWorld.h:405
@ CONFIG_MAX_RECRUIT_A_FRIEND_BONUS_PLAYER_LEVEL
Definition: IWorld.h:247
@ CONFIG_MAX_RECRUIT_A_FRIEND_BONUS_PLAYER_LEVEL_DIFFERENCE
Definition: IWorld.h:248
@ CONFIG_BG_REWARD_WINNER_HONOR_FIRST
Definition: IWorld.h:388
@ CONFIG_ARENA_START_PERSONAL_RATING
Definition: IWorld.h:330
@ CONFIG_COMPRESSION
Definition: IWorld.h:210
@ CONFIG_STRICT_CHARTER_NAMES
Definition: IWorld.h:221
@ CONFIG_INTERVAL_SAVE
Definition: IWorld.h:214
@ CONFIG_BG_REWARD_LOSER_HONOR_FIRST
Definition: IWorld.h:392
@ CONFIG_CORPSE_DECAY_WORLDBOSS
Definition: IWorld.h:304
@ CONFIG_TICKET_LEVEL_REQ
Definition: IWorld.h:297
@ CONFIG_PACKET_SPOOF_POLICY
Definition: IWorld.h:370
@ CONFIG_CHATFLOOD_ADDON_MESSAGE_COUNT
Definition: IWorld.h:279
@ CONFIG_DUNGEON_ACCESS_REQUIREMENTS_PRINT_MODE
Definition: IWorld.h:400
@ CONFIG_GUILD_BANK_TAB_COST_5
Definition: IWorld.h:408
@ CONFIG_LFG_OPTIONSMASK
Definition: IWorld.h:362
@ CONFIG_GM_LOGIN_STATE
Definition: IWorld.h:254
@ CONFIG_ARENA_PREV_OPPONENTS_DISCARD_TIMER
Definition: IWorld.h:324
@ CONFIG_AUCTION_LEVEL_REQ
Definition: IWorld.h:298
@ CONFIG_REALM_ZONE
Definition: IWorld.h:219
@ CONFIG_CHAT_STRICT_LINK_CHECKING_KICK
Definition: IWorld.h:290
@ CONFIG_GM_LEVEL_IN_GM_LIST
Definition: IWorld.h:259
@ CONFIG_ARENA_RATING_DISCARD_TIMER
Definition: IWorld.h:323
@ CONFIG_WARDEN_NUM_OTHER_CHECKS
Definition: IWorld.h:379
@ CONFIG_HEROIC_CHARACTERS_PER_REALM
Definition: IWorld.h:233
@ CONFIG_WINTERGRASP_ENABLE
Definition: IWorld.h:321
@ CONFIG_WAYPOINT_MOVEMENT_STOP_TIME_FOR_PLAYER
Definition: IWorld.h:399
@ CONFIG_GM_VISIBLE_STATE
Definition: IWorld.h:255
@ CONFIG_MAX_WHO_LIST_RETURN
Definition: IWorld.h:398
@ CONFIG_GROUP_VISIBILITY
Definition: IWorld.h:262
@ CONFIG_CREATURE_FAMILY_FLEE_DELAY
Definition: IWorld.h:285
@ CONFIG_PACKET_SPOOF_BANMODE
Definition: IWorld.h:371
@ CONFIG_LEGACY_ARENA_POINTS_CALC
Definition: IWorld.h:329
@ CONFIG_CHARDELETE_KEEP_DAYS
Definition: IWorld.h:352
@ CONFIG_MAX_RESULTS_LOOKUP_COMMANDS
Definition: IWorld.h:358
@ CONFIG_START_HONOR_POINTS
Definition: IWorld.h:244
@ CONFIG_CREATURE_STOP_FOR_PLAYER
Definition: IWorld.h:232
@ CONFIG_CHAT_WHISPER_LEVEL_REQ
Definition: IWorld.h:292
@ CONFIG_SKILL_GAIN_GATHERING
Definition: IWorld.h:273
@ CONFIG_CHARTER_COST_ARENA_2v2
Definition: IWorld.h:395
@ CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_TIMER
Definition: IWorld.h:309
@ CONFIG_AFK_PREVENT_LOGOUT
Definition: IWorld.h:383
@ CONFIG_CHATFLOOD_MESSAGE_DELAY
Definition: IWorld.h:278
@ CONFIG_DISABLE_BREATHING
Definition: IWorld.h:307
@ CONFIG_STRICT_PLAYER_NAMES
Definition: IWorld.h:220
@ CONFIG_LOGDB_CLEARINTERVAL
Definition: IWorld.h:340
@ CONFIG_MAX_HONOR_POINTS_MONEY_PER_POINT
Definition: IWorld.h:243
@ CONFIG_BATTLEGROUND_REPORT_AFK
Definition: IWorld.h:313
@ CONFIG_INSTANCE_UNLOAD_DELAY
Definition: IWorld.h:251
@ CONFIG_GM_LEVEL_IN_WHO_LIST
Definition: IWorld.h:260
@ CONFIG_TELEPORT_TIMEOUT_NEAR
Definition: IWorld.h:342
@ CONFIG_GUILD_BANK_TAB_COST_1
Definition: IWorld.h:404
@ CONFIG_BATTLEGROUND_PREMATURE_FINISH_TIMER
Definition: IWorld.h:310
@ CONFIG_GUILD_BANK_TAB_COST_0
Definition: IWorld.h:403
@ CONFIG_HONOR_AFTER_DUEL
Definition: IWorld.h:333
@ CONFIG_PERSISTENT_CHARACTER_CLEAN_FLAGS
Definition: IWorld.h:361
@ CONFIG_EXPANSION
Definition: IWorld.h:276
@ CONFIG_CORPSE_DECAY_RARE
Definition: IWorld.h:301
@ CONFIG_CHAT_STRICT_LINK_CHECKING_SEVERITY
Definition: IWorld.h:289
@ CONFIG_UPTIME_UPDATE
Definition: IWorld.h:264
@ CONFIG_WARDEN_CLIENT_RESPONSE_DELAY
Definition: IWorld.h:373
@ CONFIG_CREATURE_FAMILY_ASSISTANCE_PERIOD
Definition: IWorld.h:284
@ CONFIG_WINTERGRASP_PLR_MAX
Definition: IWorld.h:364
@ CONFIG_CHARACTER_CREATING_MIN_LEVEL_FOR_HEROIC_CHARACTER
Definition: IWorld.h:234
@ CONFIG_PORT_WORLD
Definition: IWorld.h:215
@ CONFIG_MIN_DUALSPEC_LEVEL
Definition: IWorld.h:237
@ CONFIG_LFG_MAX_KICK_COUNT
Definition: IWorld.h:415
@ CONFIG_SKILL_GAIN_CRAFTING
Definition: IWorld.h:271
@ CONFIG_RANDOM_BG_RESET_HOUR
Definition: IWorld.h:349
@ CONFIG_DB_PING_INTERVAL
Definition: IWorld.h:359
@ CONFIG_WORLD_BOSS_LEVEL_DIFF
Definition: IWorld.h:286
@ CONFIG_CORPSE_DECAY_RAREELITE
Definition: IWorld.h:303
@ CONFIG_CHATFLOOD_MESSAGE_COUNT
Definition: IWorld.h:277
@ CONFIG_CHAT_TIME_MUTE_FIRST_LOGIN
Definition: IWorld.h:295
@ CONFIG_ARENA_QUEUE_ANNOUNCER_DETAIL
Definition: IWorld.h:332
@ CONFIG_WARDEN_CLIENT_FAIL_ACTION
Definition: IWorld.h:375
@ CONFIG_ITEMDELETE_QUALITY
Definition: IWorld.h:386
@ CONFIG_CHARTER_COST_ARENA_3v3
Definition: IWorld.h:396
@ CONFIG_MIN_PLAYER_NAME
Definition: IWorld.h:224
@ CONFIG_ICC_BUFF_HORDE
Definition: IWorld.h:384
@ CONFIG_CHATFLOOD_ADDON_MESSAGE_DELAY
Definition: IWorld.h:280
@ CONFIG_SKILL_CHANCE_GREY
Definition: IWorld.h:268
@ CONFIG_TOGGLE_XP_COST
Definition: IWorld.h:410
@ CONFIG_INTERVAL_MAPUPDATE
Definition: IWorld.h:211
@ CONFIG_NUMTHREADS
Definition: IWorld.h:339
@ CONFIG_CREATURE_FAMILY_ASSISTANCE_DELAY
Definition: IWorld.h:283
@ CONFIG_MAX_PRIMARY_TRADE_SKILL
Definition: IWorld.h:252
@ CONFIG_ITEMDELETE_ITEM_LEVEL
Definition: IWorld.h:387
@ CONFIG_SKIP_CINEMATICS
Definition: IWorld.h:235
@ CONFIG_SKILL_CHANCE_GREEN
Definition: IWorld.h:267
@ CONFIG_CHAT_SAY_LEVEL_REQ
Definition: IWorld.h:293
@ CONFIG_WINTERGRASP_PLR_MIN
Definition: IWorld.h:365
@ CONFIG_BG_REWARD_WINNER_HONOR_LAST
Definition: IWorld.h:390
@ CONFIG_CHARACTERS_PER_REALM
Definition: IWorld.h:231
@ CONFIG_GUILD_BANK_INITIAL_TABS
Definition: IWorld.h:402
@ CONFIG_ALLOW_TWO_SIDE_INTERACTION_CALENDAR
Definition: IWorld.h:77
@ CONFIG_SHOW_KICK_IN_WORLD
Definition: IWorld.h:136
@ CONFIG_QUEST_IGNORE_AUTO_COMPLETE
Definition: IWorld.h:150
@ CONFIG_SAVE_RESPAWN_TIME_IMMEDIATELY
Definition: IWorld.h:98
@ CONFIG_BG_XP_FOR_KILL
Definition: IWorld.h:122
@ CONFIG_ALLOW_TWO_SIDE_INTERACTION_CHAT
Definition: IWorld.h:78
@ CONFIG_AUTOBROADCAST
Definition: IWorld.h:139
@ CONFIG_CHECK_GOBJECT_LOS
Definition: IWorld.h:159
@ CONFIG_WEATHER
Definition: IWorld.h:99
@ CONFIG_ALL_TAXI_PATHS
Definition: IWorld.h:88
@ CONFIG_GM_LOWER_SECURITY
Definition: IWorld.h:95
@ CONFIG_ARENA_AUTO_DISTRIBUTE_POINTS
Definition: IWorld.h:123
@ CONFIG_DUNGEON_ACCESS_REQUIREMENTS_LFG_DBC_LEVEL_OVERRIDE
Definition: IWorld.h:170
@ CONFIG_DONT_CACHE_RANDOM_MOVEMENT_PATHS
Definition: IWorld.h:148
@ CONFIG_SILENTLY_GM_JOIN_TO_CHANNEL
Definition: IWorld.h:104
@ CONFIG_BATTLEGROUND_DISABLE_QUEST_SHARE_IN_BG
Definition: IWorld.h:114
@ CONFIG_START_CUSTOM_SPELLS
Definition: IWorld.h:130
@ CONFIG_SKILL_MILLING
Definition: IWorld.h:97
@ CONFIG_PDUMP_NO_OVERWRITE
Definition: IWorld.h:145
@ CONFIG_DEATH_CORPSE_RECLAIM_DELAY_PVP
Definition: IWorld.h:108
@ CONFIG_ALLOW_TWO_SIDE_WHO_LIST
Definition: IWorld.h:85
@ CONFIG_STRICT_NAMES_PROFANITY
Definition: IWorld.h:185
@ CONFIG_ALLOW_LOGGING_IP_ADDRESSES_IN_DATABASE
Definition: IWorld.h:173
@ CONFIG_SHOW_MUTE_IN_WORLD
Definition: IWorld.h:137
@ CONFIG_STRICT_NAMES_RESERVED
Definition: IWorld.h:184
@ CONFIG_ALLOW_TWO_SIDE_INTERACTION_AUCTION
Definition: IWorld.h:83
@ CONFIG_ALLOW_GM_GROUP
Definition: IWorld.h:93
@ CONFIG_DECLINED_NAMES_USED
Definition: IWorld.h:113
@ CONFIG_MINIGOB_MANABONK
Definition: IWorld.h:155
@ CONFIG_PRELOAD_ALL_NON_INSTANCED_MAP_GRIDS
Definition: IWorld.h:162
@ CONFIG_LFG_LOCATION_ALL
Definition: IWorld.h:161
@ CONFIG_LEAVE_GROUP_ON_LOGOUT
Definition: IWorld.h:178
@ CONFIG_CALCULATE_GAMEOBJECT_ZONE_AREA_DATA
Definition: IWorld.h:158
@ CONFIG_ALLOW_PLAYER_COMMANDS
Definition: IWorld.h:73
@ CONFIG_ALLOW_GM_FRIEND
Definition: IWorld.h:94
@ CONFIG_INSTANCE_GMSUMMON_PLAYER
Definition: IWorld.h:91
@ CONFIG_QUEST_IGNORE_RAID
Definition: IWorld.h:101
@ CONFIG_SHOW_BAN_IN_WORLD
Definition: IWorld.h:138
@ CONFIG_CLEAN_CHARACTER_DB
Definition: IWorld.h:74
@ CONFIG_CHAT_MUTE_FIRST_LOGIN
Definition: IWorld.h:107
@ CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_PLAYERONLY
Definition: IWorld.h:118
@ CONFIG_CHAT_FAKE_MESSAGE_PREVENTING
Definition: IWorld.h:106
@ CONFIG_ALLOW_TWO_SIDE_TRADE
Definition: IWorld.h:87
@ CONFIG_DEATH_CORPSE_RECLAIM_DELAY_PVE
Definition: IWorld.h:109
@ CONFIG_ALLOW_TWO_SIDE_ADD_FRIEND
Definition: IWorld.h:86
@ CONFIG_SKILL_PROSPECTING
Definition: IWorld.h:96
@ CONFIG_MISS_CHANCE_MULTIPLIER_ONLY_FOR_PLAYERS
Definition: IWorld.h:177
@ CONFIG_IP_BASED_ACTION_LOGGING
Definition: IWorld.h:156
@ CONFIG_ADDON_CHANNEL
Definition: IWorld.h:72
@ CONFIG_START_ALL_REP
Definition: IWorld.h:132
@ CONFIG_PVP_TOKEN_ENABLE
Definition: IWorld.h:134
@ CONFIG_ARENA_SEASON_IN_PROGRESS
Definition: IWorld.h:124
@ CONFIG_DETECT_POS_COLLISION
Definition: IWorld.h:102
@ CONFIG_DEATH_BONES_BG_OR_ARENA
Definition: IWorld.h:111
@ CONFIG_VMAP_BLIZZLIKE_PVP_LOS
Definition: IWorld.h:180
@ CONFIG_BATTLEGROUND_STORE_STATISTICS_ENABLE
Definition: IWorld.h:120
@ CONFIG_INSTANCE_IGNORE_RAID
Definition: IWorld.h:90
@ CONFIG_ALLOW_TWO_SIDE_INTERACTION_MAIL
Definition: IWorld.h:84
@ CONFIG_BATTLEGROUND_CAST_DESERTER
Definition: IWorld.h:116
@ CONFIG_CLOSE_IDLE_CONNECTIONS
Definition: IWorld.h:160
@ CONFIG_OBJECT_QUEST_MARKERS
Definition: IWorld.h:183
@ CONFIG_SET_BOP_ITEM_TRADEABLE
Definition: IWorld.h:172
@ CONFIG_STATS_SAVE_ONLY_ON_LOGOUT
Definition: IWorld.h:75
@ CONFIG_ENABLE_CONTINENT_TRANSPORT_PRELOADING
Definition: IWorld.h:154
@ CONFIG_DEBUG_ARENA
Definition: IWorld.h:168
@ CONFIG_ARENA_QUEUE_ANNOUNCER_ENABLE
Definition: IWorld.h:125
@ CONFIG_RESTRICTED_LFG_CHANNEL
Definition: IWorld.h:103
@ CONFIG_NO_RESET_TALENT_COST
Definition: IWorld.h:135
@ CONFIG_CALCULATE_CREATURE_ZONE_AREA_DATA
Definition: IWorld.h:157
@ CONFIG_ALLOW_TWO_SIDE_INTERACTION_CHANNEL
Definition: IWorld.h:79
@ CONFIG_PRESERVE_CUSTOM_CHANNELS
Definition: IWorld.h:143
@ CONFIG_ENABLE_MMAPS
Definition: IWorld.h:146
@ CONFIG_ALLOW_JOIN_BG_AND_LFG
Definition: IWorld.h:176
@ CONFIG_ALLOWS_RANK_MOD_FOR_PET_HEALTH
Definition: IWorld.h:186
@ CONFIG_OFFHAND_CHECK_AT_SPELL_UNLEARN
Definition: IWorld.h:127
@ CONFIG_QUEST_POI_ENABLED
Definition: IWorld.h:179
@ CONFIG_ITEMDELETE_METHOD
Definition: IWorld.h:164
@ CONFIG_DURABILITY_LOSS_IN_PVP
Definition: IWorld.h:71
@ CONFIG_ARENA_QUEUE_ANNOUNCER_PLAYERONLY
Definition: IWorld.h:126
@ CONFIG_ENABLE_LOGIN_AFTER_DC
Definition: IWorld.h:147
@ CONFIG_BATTLEGROUND_TRACK_DESERTERS
Definition: IWorld.h:121
@ CONFIG_QUEST_IGNORE_AUTO_ACCEPT
Definition: IWorld.h:149
@ CONFIG_DIE_COMMAND_MODE
Definition: IWorld.h:112
@ CONFIG_DEBUG_BATTLEGROUND
Definition: IWorld.h:167
@ CONFIG_ALLOW_TWO_SIDE_ACCOUNTS
Definition: IWorld.h:76
@ CONFIG_PLAYER_SETTINGS_ENABLED
Definition: IWorld.h:175
@ CONFIG_VMAP_INDOOR_CHECK
Definition: IWorld.h:128
@ CONFIG_INSTANCE_SHARED_ID
Definition: IWorld.h:92
@ CONFIG_WARDEN_ENABLED
Definition: IWorld.h:152
@ CONFIG_ITEMDELETE_VENDOR
Definition: IWorld.h:165
@ CONFIG_SET_ALL_CREATURES_WITH_WAYPOINT_MOVEMENT_ACTIVE
Definition: IWorld.h:166
@ CONFIG_PDUMP_NO_PATHS
Definition: IWorld.h:144
@ CONFIG_ALLOW_TWO_SIDE_INTERACTION_EMOTE
Definition: IWorld.h:163
@ CONFIG_ALWAYS_MAX_SKILL_FOR_LEVEL
Definition: IWorld.h:100
@ CONFIG_BATTLEGROUND_DISABLE_READY_CHECK_IN_BG
Definition: IWorld.h:115
@ CONFIG_ALLOW_TWO_SIDE_INTERACTION_GROUP
Definition: IWorld.h:80
@ CONFIG_OBJECT_SPARKLES
Definition: IWorld.h:181
@ CONFIG_DUNGEON_ACCESS_REQUIREMENTS_PORTAL_CHECK_ILVL
Definition: IWorld.h:169
@ CONFIG_DELETE_CHARACTER_TICKET_TRACE
Definition: IWorld.h:141
@ CONFIG_REALM_LOGIN_ENABLED
Definition: IWorld.h:174
@ CONFIG_ENABLE_CONTINENT_TRANSPORT
Definition: IWorld.h:153
@ CONFIG_DEATH_BONES_WORLD
Definition: IWorld.h:110
@ CONFIG_QUEST_ENABLE_QUEST_TRACKER
Definition: IWorld.h:151
@ CONFIG_REGEN_HP_CANNOT_REACH_TARGET_IN_RAID
Definition: IWorld.h:171
@ CONFIG_ALWAYS_MAXSKILL
Definition: IWorld.h:133
@ CONFIG_TALENTS_INSPECTING
Definition: IWorld.h:105
@ CONFIG_LOW_LEVEL_REGEN_BOOST
Definition: IWorld.h:182
@ CONFIG_DBC_ENFORCE_ITEM_ATTRIBUTES
Definition: IWorld.h:142
@ CONFIG_ALLOW_TICKETS
Definition: IWorld.h:140
@ CONFIG_START_ALL_EXPLORED
Definition: IWorld.h:131
@ CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD
Definition: IWorld.h:81
@ CONFIG_PET_LOS
Definition: IWorld.h:129
@ CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_TIMED
Definition: IWorld.h:119
@ CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_ENABLE
Definition: IWorld.h:117
@ CONFIG_INSTANCE_IGNORE_LEVEL
Definition: IWorld.h:89
@ CONFIG_ALLOW_TWO_SIDE_INTERACTION_ARENA
Definition: IWorld.h:82
@ RATE_REWARD_BONUS_MONEY
Definition: IWorld.h:463
@ RATE_SELLVALUE_ITEM_ARTIFACT
Definition: IWorld.h:452
@ RATE_BUYVALUE_ITEM_ARTIFACT
Definition: IWorld.h:460
@ RATE_CREATURE_NORMAL_SPELLDAMAGE
Definition: IWorld.h:491
@ RATE_CREATURE_NORMAL_HP
Definition: IWorld.h:481
@ RATE_DAMAGE_FALL
Definition: IWorld.h:500
@ RATE_DROP_ITEM_REFERENCED_AMOUNT
Definition: IWorld.h:444
@ RATE_CREATURE_NORMAL_DAMAGE
Definition: IWorld.h:486
@ RATE_POWER_RAGE_INCOME
Definition: IWorld.h:429
@ RATE_CREATURE_ELITE_RARE_DAMAGE
Definition: IWorld.h:490
@ RATE_CREATURE_AGGRO
Definition: IWorld.h:496
@ RATE_BUYVALUE_ITEM_POOR
Definition: IWorld.h:454
@ RATE_SELLVALUE_ITEM_EPIC
Definition: IWorld.h:450
@ RATE_POWER_RAGE_LOSS
Definition: IWorld.h:430
@ RATE_REPUTATION_LOWLEVEL_QUEST
Definition: IWorld.h:479
@ RATE_ARENA_POINTS
Definition: IWorld.h:505
@ RATE_DURABILITY_LOSS_BLOCK
Definition: IWorld.h:514
@ RATE_DROP_ITEM_RARE
Definition: IWorld.h:439
@ RATE_XP_PET_NEXT_LEVEL
Definition: IWorld.h:475
@ RATE_CREATURE_ELITE_ELITE_SPELLDAMAGE
Definition: IWorld.h:492
@ RATE_REPUTATION_LOWLEVEL_KILL
Definition: IWorld.h:478
@ RATE_XP_KILL
Definition: IWorld.h:464
@ RATE_XP_QUEST_DF
Definition: IWorld.h:472
@ RATE_POWER_RUNICPOWER_INCOME
Definition: IWorld.h:431
@ RATE_INSTANCE_RESET_TIME
Definition: IWorld.h:509
@ RATE_REST_OFFLINE_IN_WILDERNESS
Definition: IWorld.h:499
@ RATE_POWER_RUNICPOWER_LOSS
Definition: IWorld.h:432
@ RATE_CREATURE_ELITE_WORLDBOSS_DAMAGE
Definition: IWorld.h:489
@ RATE_XP_BG_KILL_SOTA
Definition: IWorld.h:469
@ RATE_POWER_ENERGY
Definition: IWorld.h:434
@ RATE_TALENT
Definition: IWorld.h:506
@ RATE_SELLVALUE_ITEM_NORMAL
Definition: IWorld.h:447
@ RATE_XP_BG_KILL_WSG
Definition: IWorld.h:466
@ RATE_CREATURE_ELITE_RAREELITE_DAMAGE
Definition: IWorld.h:488
@ RATE_POWER_MANA
Definition: IWorld.h:428
@ RATE_CREATURE_ELITE_WORLDBOSS_HP
Definition: IWorld.h:484
@ RATE_DROP_ITEM_LEGENDARY
Definition: IWorld.h:441
@ RATE_DURABILITY_LOSS_PARRY
Definition: IWorld.h:512
@ RATE_XP_BG_KILL_AB
Definition: IWorld.h:467
@ RATE_BUYVALUE_ITEM_UNCOMMON
Definition: IWorld.h:456
@ RATE_MISS_CHANCE_MULTIPLIER_TARGET_PLAYER
Definition: IWorld.h:517
@ RATE_DROP_ITEM_POOR
Definition: IWorld.h:436
@ RATE_BUYVALUE_ITEM_LEGENDARY
Definition: IWorld.h:459
@ RATE_REST_OFFLINE_IN_TAVERN_OR_CITY
Definition: IWorld.h:498
@ RATE_SELLVALUE_ITEM_HEIRLOOM
Definition: IWorld.h:453
@ RATE_AUCTION_DEPOSIT
Definition: IWorld.h:502
@ RATE_DROP_ITEM_UNCOMMON
Definition: IWorld.h:438
@ RATE_DROP_ITEM_REFERENCED
Definition: IWorld.h:443
@ RATE_BUYVALUE_ITEM_NORMAL
Definition: IWorld.h:455
@ RATE_CREATURE_ELITE_RAREELITE_SPELLDAMAGE
Definition: IWorld.h:493
@ RATE_XP_BG_KILL_EOTS
Definition: IWorld.h:468
@ RATE_REPUTATION_RECRUIT_A_FRIEND_BONUS
Definition: IWorld.h:480
@ RATE_REPAIRCOST
Definition: IWorld.h:476
@ RATE_DROP_MONEY
Definition: IWorld.h:462
@ RATE_DURABILITY_LOSS_DAMAGE
Definition: IWorld.h:511
@ RATE_AUCTION_CUT
Definition: IWorld.h:503
@ RATE_BUYVALUE_ITEM_HEIRLOOM
Definition: IWorld.h:461
@ RATE_HEALTH
Definition: IWorld.h:427
@ RATE_MISS_CHANCE_MULTIPLIER_TARGET_CREATURE
Definition: IWorld.h:516
@ RATE_XP_PET
Definition: IWorld.h:474
@ RATE_MOVESPEED
Definition: IWorld.h:515
@ RATE_SELLVALUE_ITEM_UNCOMMON
Definition: IWorld.h:448
@ RATE_DURABILITY_LOSS_ON_DEATH
Definition: IWorld.h:510
@ RATE_SELLVALUE_ITEM_POOR
Definition: IWorld.h:446
@ RATE_BUYVALUE_ITEM_EPIC
Definition: IWorld.h:458
@ RATE_CREATURE_ELITE_ELITE_DAMAGE
Definition: IWorld.h:487
@ RATE_XP_QUEST
Definition: IWorld.h:471
@ RATE_CREATURE_ELITE_WORLDBOSS_SPELLDAMAGE
Definition: IWorld.h:494
@ RATE_DROP_ITEM_EPIC
Definition: IWorld.h:440
@ RATE_SELLVALUE_ITEM_RARE
Definition: IWorld.h:449
@ RATE_SKILL_DISCOVERY
Definition: IWorld.h:435
@ RATE_DROP_ITEM_ARTIFACT
Definition: IWorld.h:442
@ RATE_CREATURE_ELITE_RARE_SPELLDAMAGE
Definition: IWorld.h:495
@ RATE_CREATURE_ELITE_ELITE_HP
Definition: IWorld.h:482
@ RATE_XP_EXPLORE
Definition: IWorld.h:473
@ RATE_CREATURE_ELITE_RARE_HP
Definition: IWorld.h:485
@ RATE_REPUTATION_GAIN
Definition: IWorld.h:477
@ RATE_REST_INGAME
Definition: IWorld.h:497
@ RATE_BUYVALUE_ITEM_RARE
Definition: IWorld.h:457
@ RATE_POWER_FOCUS
Definition: IWorld.h:433
@ RATE_SELLVALUE_ITEM_LEGENDARY
Definition: IWorld.h:451
@ RATE_HONOR
Definition: IWorld.h:504
@ RATE_CORPSE_DECAY_LOOTED
Definition: IWorld.h:508
@ RATE_DURABILITY_LOSS_ABSORB
Definition: IWorld.h:513
@ RATE_AUCTION_TIME
Definition: IWorld.h:501
@ RATE_XP_BG_KILL_IC
Definition: IWorld.h:470
@ RATE_DROP_ITEM_GROUP_AMOUNT
Definition: IWorld.h:445
@ RATE_TALENT_PET
Definition: IWorld.h:507
@ RATE_CREATURE_ELITE_RAREELITE_HP
Definition: IWorld.h:483
@ RATE_DROP_ITEM_NORMAL
Definition: IWorld.h:437
@ RATE_XP_BG_KILL_AV
Definition: IWorld.h:465
@ CONFIG_SIGHT_MONSTER
Definition: IWorld.h:194
@ CONFIG_ARENA_WIN_RATING_MODIFIER_1
Definition: IWorld.h:201
@ CONFIG_GROUP_XP_DISTANCE
Definition: IWorld.h:192
@ CONFIG_LISTEN_RANGE_YELL
Definition: IWorld.h:197
@ CONFIG_CREATURE_FAMILY_FLEE_ASSISTANCE_RADIUS
Definition: IWorld.h:198
@ CONFIG_ARENA_WIN_RATING_MODIFIER_2
Definition: IWorld.h:202
@ CONFIG_ARENA_LOSE_RATING_MODIFIER
Definition: IWorld.h:203
@ CONFIG_CREATURE_FAMILY_ASSISTANCE_RADIUS
Definition: IWorld.h:199
@ CONFIG_LISTEN_RANGE_SAY
Definition: IWorld.h:195
@ CONFIG_MAX_RECRUIT_A_FRIEND_DISTANCE
Definition: IWorld.h:193
@ CONFIG_ARENA_MATCHMAKER_RATING_MODIFIER
Definition: IWorld.h:204
@ CONFIG_CHANCE_OF_GM_SURVEY
Definition: IWorld.h:200
@ CONFIG_LISTEN_RANGE_TEXTEMOTE
Definition: IWorld.h:196
#define MAX_LEVEL
Definition: DBCEnums.h:47
#define DEFAULT_MAX_LEVEL
Definition: DBCEnums.h:43
#define GUILD_EVENTLOG_MAX_RECORDS
Definition: SharedDefines.h:3236
#define GUILD_BANKLOG_MAX_RECORDS
Definition: SharedDefines.h:3235
@ REALM_ZONE_RUSSIAN
Definition: World.h:104
@ REALM_ZONE_DEVELOPMENT
Definition: World.h:93
@ WUPDATE_CLEANDB
Definition: World.h:67
@ WUPDATE_AUTOBROADCAST
Definition: World.h:68
@ WUPDATE_UPTIME
Definition: World.h:64
void setEnableHeightCalc(bool pVal)
Definition: IVMapMgr.h:116
void setEnableLineOfSightCalc(bool pVal)
Definition: IVMapMgr.h:111
static void InitializeDisabledMaps()
Definition: MMapFactory.cpp:39
static VMapMgr2 * createOrGetVMapMgr()
Definition: VMapFactory.cpp:27
@ POLICY_KICK
Definition: WorldSession.h:1104
void LoadFromConfig()
Definition: UpdateTime.cpp:103
float getRate(Rates rate) const override
Get a server rate (see Rates)
Definition: World.h:268
void SetPlayerAmountLimit(uint32 limit) override
Active session server limit.
Definition: World.h:200
void SetNewCharString(std::string const &str) override
Set the string for new characters (first login)
Definition: World.h:217

References _bool_configs, _dataPath, _float_configs, _int_configs, _maxVisibleDistanceInBGArenas, _maxVisibleDistanceInInstances, _maxVisibleDistanceOnContinents, _rate_values, _timers, baseMoveSpeed, CONFIG_ADDON_CHANNEL, CONFIG_AFK_PREVENT_LOGOUT, CONFIG_ALL_TAXI_PATHS, CONFIG_ALLOW_GM_FRIEND, CONFIG_ALLOW_GM_GROUP, CONFIG_ALLOW_JOIN_BG_AND_LFG, CONFIG_ALLOW_LOGGING_IP_ADDRESSES_IN_DATABASE, CONFIG_ALLOW_PLAYER_COMMANDS, CONFIG_ALLOW_TICKETS, CONFIG_ALLOW_TWO_SIDE_ACCOUNTS, CONFIG_ALLOW_TWO_SIDE_ADD_FRIEND, CONFIG_ALLOW_TWO_SIDE_INTERACTION_ARENA, CONFIG_ALLOW_TWO_SIDE_INTERACTION_AUCTION, CONFIG_ALLOW_TWO_SIDE_INTERACTION_CALENDAR, CONFIG_ALLOW_TWO_SIDE_INTERACTION_CHANNEL, CONFIG_ALLOW_TWO_SIDE_INTERACTION_CHAT, CONFIG_ALLOW_TWO_SIDE_INTERACTION_EMOTE, CONFIG_ALLOW_TWO_SIDE_INTERACTION_GROUP, CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD, CONFIG_ALLOW_TWO_SIDE_INTERACTION_MAIL, CONFIG_ALLOW_TWO_SIDE_TRADE, CONFIG_ALLOW_TWO_SIDE_WHO_LIST, CONFIG_ALLOWS_RANK_MOD_FOR_PET_HEALTH, CONFIG_ALWAYS_MAX_SKILL_FOR_LEVEL, CONFIG_ALWAYS_MAXSKILL, CONFIG_ARENA_AUTO_DISTRIBUTE_INTERVAL_DAYS, CONFIG_ARENA_AUTO_DISTRIBUTE_POINTS, CONFIG_ARENA_GAMES_REQUIRED, CONFIG_ARENA_LOSE_RATING_MODIFIER, CONFIG_ARENA_MATCHMAKER_RATING_MODIFIER, CONFIG_ARENA_MAX_RATING_DIFFERENCE, CONFIG_ARENA_PREV_OPPONENTS_DISCARD_TIMER, CONFIG_ARENA_QUEUE_ANNOUNCER_DETAIL, CONFIG_ARENA_QUEUE_ANNOUNCER_ENABLE, CONFIG_ARENA_QUEUE_ANNOUNCER_PLAYERONLY, CONFIG_ARENA_RATING_DISCARD_TIMER, CONFIG_ARENA_SEASON_ID, CONFIG_ARENA_SEASON_IN_PROGRESS, CONFIG_ARENA_START_MATCHMAKER_RATING, CONFIG_ARENA_START_PERSONAL_RATING, CONFIG_ARENA_START_RATING, CONFIG_ARENA_WIN_RATING_MODIFIER_1, CONFIG_ARENA_WIN_RATING_MODIFIER_2, CONFIG_AUCTION_HOUSE_SEARCH_TIMEOUT, CONFIG_AUCTION_LEVEL_REQ, CONFIG_AUTOBROADCAST, CONFIG_AUTOBROADCAST_CENTER, CONFIG_AUTOBROADCAST_INTERVAL, CONFIG_AUTOBROADCAST_MIN_LEVEL_DISABLE, CONFIG_BATTLEGROUND_BERSERKING_BUFF_RESPAWN, CONFIG_BATTLEGROUND_CAST_DESERTER, CONFIG_BATTLEGROUND_DISABLE_QUEST_SHARE_IN_BG, CONFIG_BATTLEGROUND_DISABLE_READY_CHECK_IN_BG, CONFIG_BATTLEGROUND_INVITATION_TYPE, CONFIG_BATTLEGROUND_PLAYER_RESPAWN, CONFIG_BATTLEGROUND_PREMADE_GROUP_WAIT_FOR_MATCH, CONFIG_BATTLEGROUND_PREMATURE_FINISH_TIMER, CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_ENABLE, CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_LIMIT_MIN_LEVEL, CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_LIMIT_MIN_PLAYERS, CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_PLAYERONLY, CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_SPAM_DELAY, CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_TIMED, CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_TIMER, CONFIG_BATTLEGROUND_REPORT_AFK, CONFIG_BATTLEGROUND_REPORT_AFK_TIMER, CONFIG_BATTLEGROUND_RESTORATION_BUFF_RESPAWN, CONFIG_BATTLEGROUND_SPEED_BUFF_RESPAWN, CONFIG_BATTLEGROUND_STORE_STATISTICS_ENABLE, CONFIG_BATTLEGROUND_TRACK_DESERTERS, CONFIG_BG_REWARD_LOSER_HONOR_FIRST, CONFIG_BG_REWARD_LOSER_HONOR_LAST, CONFIG_BG_REWARD_WINNER_ARENA_FIRST, CONFIG_BG_REWARD_WINNER_ARENA_LAST, CONFIG_BG_REWARD_WINNER_HONOR_FIRST, CONFIG_BG_REWARD_WINNER_HONOR_LAST, CONFIG_BG_XP_FOR_KILL, CONFIG_BIRTHDAY_TIME, CONFIG_CALCULATE_CREATURE_ZONE_AREA_DATA, CONFIG_CALCULATE_GAMEOBJECT_ZONE_AREA_DATA, CONFIG_CALENDAR_DELETE_OLD_EVENTS_HOUR, CONFIG_CHANCE_OF_GM_SURVEY, CONFIG_CHANGE_FACTION_MAX_MONEY, CONFIG_CHARACTER_CREATING_DISABLED, CONFIG_CHARACTER_CREATING_DISABLED_CLASSMASK, CONFIG_CHARACTER_CREATING_DISABLED_RACEMASK, CONFIG_CHARACTER_CREATING_MIN_LEVEL_FOR_HEROIC_CHARACTER, CONFIG_CHARACTERS_PER_ACCOUNT, CONFIG_CHARACTERS_PER_REALM, CONFIG_CHARDELETE_KEEP_DAYS, CONFIG_CHARDELETE_METHOD, CONFIG_CHARDELETE_MIN_LEVEL, CONFIG_CHARTER_COST_ARENA_2v2, CONFIG_CHARTER_COST_ARENA_3v3, CONFIG_CHARTER_COST_ARENA_5v5, CONFIG_CHARTER_COST_GUILD, CONFIG_CHAT_CHANNEL_LEVEL_REQ, CONFIG_CHAT_FAKE_MESSAGE_PREVENTING, CONFIG_CHAT_MUTE_FIRST_LOGIN, CONFIG_CHAT_SAY_LEVEL_REQ, CONFIG_CHAT_STRICT_LINK_CHECKING_KICK, CONFIG_CHAT_STRICT_LINK_CHECKING_SEVERITY, CONFIG_CHAT_TIME_MUTE_FIRST_LOGIN, CONFIG_CHAT_WHISPER_LEVEL_REQ, CONFIG_CHATFLOOD_ADDON_MESSAGE_COUNT, CONFIG_CHATFLOOD_ADDON_MESSAGE_DELAY, CONFIG_CHATFLOOD_MESSAGE_COUNT, CONFIG_CHATFLOOD_MESSAGE_DELAY, CONFIG_CHATFLOOD_MUTE_TIME, CONFIG_CHECK_GOBJECT_LOS, CONFIG_CLEAN_CHARACTER_DB, CONFIG_CLIENTCACHE_VERSION, CONFIG_CLOSE_IDLE_CONNECTIONS, CONFIG_COMPRESSION, CONFIG_CORPSE_DECAY_ELITE, CONFIG_CORPSE_DECAY_NORMAL, CONFIG_CORPSE_DECAY_RARE, CONFIG_CORPSE_DECAY_RAREELITE, CONFIG_CORPSE_DECAY_WORLDBOSS, CONFIG_CREATURE_FAMILY_ASSISTANCE_DELAY, CONFIG_CREATURE_FAMILY_ASSISTANCE_PERIOD, CONFIG_CREATURE_FAMILY_ASSISTANCE_RADIUS, CONFIG_CREATURE_FAMILY_FLEE_ASSISTANCE_RADIUS, CONFIG_CREATURE_FAMILY_FLEE_DELAY, CONFIG_CREATURE_STOP_FOR_PLAYER, CONFIG_DAILY_RBG_MIN_LEVEL_AP_REWARD, CONFIG_DB_PING_INTERVAL, CONFIG_DBC_ENFORCE_ITEM_ATTRIBUTES, CONFIG_DEATH_BONES_BG_OR_ARENA, CONFIG_DEATH_BONES_WORLD, CONFIG_DEATH_CORPSE_RECLAIM_DELAY_PVE, CONFIG_DEATH_CORPSE_RECLAIM_DELAY_PVP, CONFIG_DEATH_SICKNESS_LEVEL, CONFIG_DEBUG_ARENA, CONFIG_DEBUG_BATTLEGROUND, CONFIG_DECLINED_NAMES_USED, CONFIG_DELETE_CHARACTER_TICKET_TRACE, CONFIG_DETECT_POS_COLLISION, CONFIG_DIE_COMMAND_MODE, CONFIG_DISABLE_BREATHING, CONFIG_DONT_CACHE_RANDOM_MOVEMENT_PATHS, CONFIG_DUNGEON_ACCESS_REQUIREMENTS_LFG_DBC_LEVEL_OVERRIDE, CONFIG_DUNGEON_ACCESS_REQUIREMENTS_OPTIONAL_STRING_ID, CONFIG_DUNGEON_ACCESS_REQUIREMENTS_PORTAL_CHECK_ILVL, CONFIG_DUNGEON_ACCESS_REQUIREMENTS_PRINT_MODE, CONFIG_DURABILITY_LOSS_IN_PVP, CONFIG_ENABLE_CONTINENT_TRANSPORT, CONFIG_ENABLE_CONTINENT_TRANSPORT_PRELOADING, CONFIG_ENABLE_LOGIN_AFTER_DC, CONFIG_ENABLE_MMAPS, CONFIG_ENABLE_SINFO_LOGIN, CONFIG_EVENT_ANNOUNCE, CONFIG_EXPANSION, CONFIG_FFA_PVP_TIMER, CONFIG_GAME_TYPE, CONFIG_GM_CHAT, CONFIG_GM_LEVEL_CHANNEL_MODERATION, CONFIG_GM_LEVEL_IN_GM_LIST, CONFIG_GM_LEVEL_IN_WHO_LIST, CONFIG_GM_LOGIN_STATE, CONFIG_GM_LOWER_SECURITY, CONFIG_GM_VISIBLE_STATE, CONFIG_GM_WHISPERING_TO, CONFIG_GROUP_VISIBILITY, CONFIG_GROUP_XP_DISTANCE, CONFIG_GUILD_BANK_EVENT_LOG_COUNT, CONFIG_GUILD_BANK_INITIAL_TABS, CONFIG_GUILD_BANK_TAB_COST_0, CONFIG_GUILD_BANK_TAB_COST_1, CONFIG_GUILD_BANK_TAB_COST_2, CONFIG_GUILD_BANK_TAB_COST_3, CONFIG_GUILD_BANK_TAB_COST_4, CONFIG_GUILD_BANK_TAB_COST_5, CONFIG_GUILD_EVENT_LOG_COUNT, CONFIG_GUILD_RESET_HOUR, CONFIG_HEROIC_CHARACTERS_PER_REALM, CONFIG_HONOR_AFTER_DUEL, CONFIG_ICC_BUFF_ALLIANCE, CONFIG_ICC_BUFF_HORDE, CONFIG_INSTANCE_GMSUMMON_PLAYER, CONFIG_INSTANCE_IGNORE_LEVEL, CONFIG_INSTANCE_IGNORE_RAID, CONFIG_INSTANCE_RESET_TIME_HOUR, CONFIG_INSTANCE_RESET_TIME_RELATIVE_TIMESTAMP, CONFIG_INSTANCE_SHARED_ID, CONFIG_INSTANCE_UNLOAD_DELAY, CONFIG_INSTANT_LOGOUT, CONFIG_INSTANT_TAXI, CONFIG_INTERVAL_CHANGEWEATHER, CONFIG_INTERVAL_DISCONNECT_TOLERANCE, CONFIG_INTERVAL_MAPUPDATE, CONFIG_INTERVAL_SAVE, CONFIG_IP_BASED_ACTION_LOGGING, CONFIG_ITEMDELETE_ITEM_LEVEL, CONFIG_ITEMDELETE_METHOD, CONFIG_ITEMDELETE_QUALITY, CONFIG_ITEMDELETE_VENDOR, CONFIG_LEAVE_GROUP_ON_LOGOUT, CONFIG_LEGACY_ARENA_POINTS_CALC, CONFIG_LFG_KICK_PREVENTION_TIMER, CONFIG_LFG_LOCATION_ALL, CONFIG_LFG_MAX_KICK_COUNT, CONFIG_LFG_OPTIONSMASK, CONFIG_LISTEN_RANGE_SAY, CONFIG_LISTEN_RANGE_TEXTEMOTE, CONFIG_LISTEN_RANGE_YELL, CONFIG_LOGDB_CLEARINTERVAL, CONFIG_LOGDB_CLEARTIME, CONFIG_LOOT_NEED_BEFORE_GREED_ILVL_RESTRICTION, CONFIG_LOW_LEVEL_REGEN_BOOST, CONFIG_MAIL_DELIVERY_DELAY, CONFIG_MAIL_LEVEL_REQ, CONFIG_MAX_ALLOWED_MMR_DROP, CONFIG_MAX_ARENA_POINTS, CONFIG_MAX_HONOR_POINTS, CONFIG_MAX_HONOR_POINTS_MONEY_PER_POINT, CONFIG_MAX_INSTANCES_PER_HOUR, CONFIG_MAX_OVERSPEED_PINGS, CONFIG_MAX_PLAYER_LEVEL, CONFIG_MAX_PRIMARY_TRADE_SKILL, CONFIG_MAX_RECRUIT_A_FRIEND_BONUS_PLAYER_LEVEL, CONFIG_MAX_RECRUIT_A_FRIEND_BONUS_PLAYER_LEVEL_DIFFERENCE, CONFIG_MAX_RECRUIT_A_FRIEND_DISTANCE, CONFIG_MAX_RESULTS_LOOKUP_COMMANDS, CONFIG_MAX_WHO_LIST_RETURN, CONFIG_MIN_CHARTER_NAME, CONFIG_MIN_DUALSPEC_LEVEL, CONFIG_MIN_LEVEL_STAT_SAVE, CONFIG_MIN_PET_NAME, CONFIG_MIN_PETITION_SIGNS, CONFIG_MIN_PLAYER_NAME, CONFIG_MINIGOB_MANABONK, CONFIG_MISS_CHANCE_MULTIPLIER_ONLY_FOR_PLAYERS, CONFIG_NO_RESET_TALENT_COST, CONFIG_NPC_EVADE_IF_NOT_REACHABLE, CONFIG_NPC_REGEN_TIME_IF_NOT_REACHABLE_IN_RAID, CONFIG_NUMTHREADS, CONFIG_OBJECT_QUEST_MARKERS, CONFIG_OBJECT_SPARKLES, CONFIG_OFFHAND_CHECK_AT_SPELL_UNLEARN, CONFIG_PACKET_SPOOF_BANDURATION, CONFIG_PACKET_SPOOF_BANMODE, CONFIG_PACKET_SPOOF_POLICY, CONFIG_PARTY_LEVEL_REQ, CONFIG_PDUMP_NO_OVERWRITE, CONFIG_PDUMP_NO_PATHS, CONFIG_PERSISTENT_CHARACTER_CLEAN_FLAGS, CONFIG_PET_LOS, CONFIG_PLAYER_SETTINGS_ENABLED, CONFIG_PORT_WORLD, CONFIG_PRELOAD_ALL_NON_INSTANCED_MAP_GRIDS, CONFIG_PRESERVE_CUSTOM_CHANNEL_DURATION, CONFIG_PRESERVE_CUSTOM_CHANNELS, CONFIG_PVP_TOKEN_COUNT, CONFIG_PVP_TOKEN_ENABLE, CONFIG_PVP_TOKEN_ID, CONFIG_PVP_TOKEN_MAP_TYPE, CONFIG_QUEST_ENABLE_QUEST_TRACKER, CONFIG_QUEST_HIGH_LEVEL_HIDE_DIFF, CONFIG_QUEST_IGNORE_AUTO_ACCEPT, CONFIG_QUEST_IGNORE_AUTO_COMPLETE, CONFIG_QUEST_IGNORE_RAID, CONFIG_QUEST_LOW_LEVEL_HIDE_DIFF, CONFIG_QUEST_POI_ENABLED, CONFIG_RANDOM_BG_RESET_HOUR, CONFIG_REALM_LOGIN_ENABLED, CONFIG_REALM_ZONE, CONFIG_REGEN_HP_CANNOT_REACH_TARGET_IN_RAID, CONFIG_RESTRICTED_LFG_CHANNEL, CONFIG_SAVE_RESPAWN_TIME_IMMEDIATELY, CONFIG_SESSION_ADD_DELAY, CONFIG_SET_ALL_CREATURES_WITH_WAYPOINT_MOVEMENT_ACTIVE, CONFIG_SET_BOP_ITEM_TRADEABLE, CONFIG_SHOW_BAN_IN_WORLD, CONFIG_SHOW_KICK_IN_WORLD, CONFIG_SHOW_MUTE_IN_WORLD, CONFIG_SIGHT_MONSTER, CONFIG_SILENTLY_GM_JOIN_TO_CHANNEL, CONFIG_SKILL_CHANCE_GREEN, CONFIG_SKILL_CHANCE_GREY, CONFIG_SKILL_CHANCE_MINING_STEPS, CONFIG_SKILL_CHANCE_ORANGE, CONFIG_SKILL_CHANCE_SKINNING_STEPS, CONFIG_SKILL_CHANCE_YELLOW, CONFIG_SKILL_GAIN_CRAFTING, CONFIG_SKILL_GAIN_DEFENSE, CONFIG_SKILL_GAIN_GATHERING, CONFIG_SKILL_GAIN_WEAPON, CONFIG_SKILL_MILLING, CONFIG_SKILL_PROSPECTING, CONFIG_SKIP_CINEMATICS, CONFIG_SOCKET_TIMEOUTTIME, CONFIG_SOCKET_TIMEOUTTIME_ACTIVE, CONFIG_START_ALL_EXPLORED, CONFIG_START_ALL_REP, CONFIG_START_ARENA_POINTS, CONFIG_START_CUSTOM_SPELLS, CONFIG_START_GM_LEVEL, CONFIG_START_HEROIC_PLAYER_LEVEL, CONFIG_START_HEROIC_PLAYER_MONEY, CONFIG_START_HONOR_POINTS, CONFIG_START_PLAYER_LEVEL, CONFIG_START_PLAYER_MONEY, CONFIG_STATS_SAVE_ONLY_ON_LOGOUT, CONFIG_STRICT_CHANNEL_NAMES, CONFIG_STRICT_CHARTER_NAMES, CONFIG_STRICT_NAMES_PROFANITY, CONFIG_STRICT_NAMES_RESERVED, CONFIG_STRICT_PET_NAMES, CONFIG_STRICT_PLAYER_NAMES, CONFIG_TALENTS_INSPECTING, CONFIG_TELEPORT_TIMEOUT_FAR, CONFIG_TELEPORT_TIMEOUT_NEAR, CONFIG_TICKET_LEVEL_REQ, CONFIG_TOGGLE_XP_COST, CONFIG_TRADE_LEVEL_REQ, CONFIG_UPTIME_UPDATE, CONFIG_VMAP_BLIZZLIKE_PVP_LOS, CONFIG_VMAP_INDOOR_CHECK, CONFIG_WARDEN_CLIENT_BAN_DURATION, CONFIG_WARDEN_CLIENT_CHECK_HOLDOFF, CONFIG_WARDEN_CLIENT_FAIL_ACTION, CONFIG_WARDEN_CLIENT_RESPONSE_DELAY, CONFIG_WARDEN_ENABLED, CONFIG_WARDEN_NUM_LUA_CHECKS, CONFIG_WARDEN_NUM_MEM_CHECKS, CONFIG_WARDEN_NUM_OTHER_CHECKS, CONFIG_WATER_BREATH_TIMER, CONFIG_WAYPOINT_MOVEMENT_STOP_TIME_FOR_PLAYER, CONFIG_WEATHER, CONFIG_WINTERGRASP_BATTLETIME, CONFIG_WINTERGRASP_ENABLE, CONFIG_WINTERGRASP_NOBATTLETIME, CONFIG_WINTERGRASP_PLR_MAX, CONFIG_WINTERGRASP_PLR_MIN, CONFIG_WINTERGRASP_PLR_MIN_LVL, CONFIG_WINTERGRASP_RESTART_AFTER_CRASH, CONFIG_WORLD_BOSS_LEVEL_DIFF, VMAP::VMapFactory::createOrGetVMapMgr(), DEFAULT_MAX_LEVEL, DEFAULT_VISIBILITY_BGARENAS, DEFAULT_VISIBILITY_DISTANCE, DEFAULT_VISIBILITY_INSTANCE, getRate(), GUILD_BANKLOG_MAX_RECORDS, GUILD_EVENTLOG_MAX_RECORDS, HOUR, Realm::Id, IN_MILLISECONDS, MMAP::MMapFactory::InitializeDisabledMaps(), WorldUpdateTime::LoadFromConfig(), LOG_ERROR, LOG_INFO, MAX_CHARTER_NAME, MAX_LEVEL, MAX_MONEY_AMOUNT, MAX_MOVE_TYPE, MAX_PET_NAME, MAX_PLAYER_NAME, MAX_VISIBILITY_DISTANCE, MIN_MAP_UPDATE_DELAY, MINUTE, playerBaseMoveSpeed, WorldSession::DosProtection::POLICY_KICK, RATE_ARENA_POINTS, RATE_AUCTION_CUT, RATE_AUCTION_DEPOSIT, RATE_AUCTION_TIME, RATE_BUYVALUE_ITEM_ARTIFACT, RATE_BUYVALUE_ITEM_EPIC, RATE_BUYVALUE_ITEM_HEIRLOOM, RATE_BUYVALUE_ITEM_LEGENDARY, RATE_BUYVALUE_ITEM_NORMAL, RATE_BUYVALUE_ITEM_POOR, RATE_BUYVALUE_ITEM_RARE, RATE_BUYVALUE_ITEM_UNCOMMON, RATE_CORPSE_DECAY_LOOTED, RATE_CREATURE_AGGRO, RATE_CREATURE_ELITE_ELITE_DAMAGE, RATE_CREATURE_ELITE_ELITE_HP, RATE_CREATURE_ELITE_ELITE_SPELLDAMAGE, RATE_CREATURE_ELITE_RARE_DAMAGE, RATE_CREATURE_ELITE_RARE_HP, RATE_CREATURE_ELITE_RARE_SPELLDAMAGE, RATE_CREATURE_ELITE_RAREELITE_DAMAGE, RATE_CREATURE_ELITE_RAREELITE_HP, RATE_CREATURE_ELITE_RAREELITE_SPELLDAMAGE, RATE_CREATURE_ELITE_WORLDBOSS_DAMAGE, RATE_CREATURE_ELITE_WORLDBOSS_HP, RATE_CREATURE_ELITE_WORLDBOSS_SPELLDAMAGE, RATE_CREATURE_NORMAL_DAMAGE, RATE_CREATURE_NORMAL_HP, RATE_CREATURE_NORMAL_SPELLDAMAGE, RATE_DAMAGE_FALL, RATE_DROP_ITEM_ARTIFACT, RATE_DROP_ITEM_EPIC, RATE_DROP_ITEM_GROUP_AMOUNT, RATE_DROP_ITEM_LEGENDARY, RATE_DROP_ITEM_NORMAL, RATE_DROP_ITEM_POOR, RATE_DROP_ITEM_RARE, RATE_DROP_ITEM_REFERENCED, RATE_DROP_ITEM_REFERENCED_AMOUNT, RATE_DROP_ITEM_UNCOMMON, RATE_DROP_MONEY, RATE_DURABILITY_LOSS_ABSORB, RATE_DURABILITY_LOSS_BLOCK, RATE_DURABILITY_LOSS_DAMAGE, RATE_DURABILITY_LOSS_ON_DEATH, RATE_DURABILITY_LOSS_PARRY, RATE_HEALTH, RATE_HONOR, RATE_INSTANCE_RESET_TIME, RATE_MISS_CHANCE_MULTIPLIER_TARGET_CREATURE, RATE_MISS_CHANCE_MULTIPLIER_TARGET_PLAYER, RATE_MOVESPEED, RATE_POWER_ENERGY, RATE_POWER_FOCUS, RATE_POWER_MANA, RATE_POWER_RAGE_INCOME, RATE_POWER_RAGE_LOSS, RATE_POWER_RUNICPOWER_INCOME, RATE_POWER_RUNICPOWER_LOSS, RATE_REPAIRCOST, RATE_REPUTATION_GAIN, RATE_REPUTATION_LOWLEVEL_KILL, RATE_REPUTATION_LOWLEVEL_QUEST, RATE_REPUTATION_RECRUIT_A_FRIEND_BONUS, RATE_REST_INGAME, RATE_REST_OFFLINE_IN_TAVERN_OR_CITY, RATE_REST_OFFLINE_IN_WILDERNESS, RATE_REWARD_BONUS_MONEY, RATE_SELLVALUE_ITEM_ARTIFACT, RATE_SELLVALUE_ITEM_EPIC, RATE_SELLVALUE_ITEM_HEIRLOOM, RATE_SELLVALUE_ITEM_LEGENDARY, RATE_SELLVALUE_ITEM_NORMAL, RATE_SELLVALUE_ITEM_POOR, RATE_SELLVALUE_ITEM_RARE, RATE_SELLVALUE_ITEM_UNCOMMON, RATE_SKILL_DISCOVERY, RATE_TALENT, RATE_TALENT_PET, RATE_XP_BG_KILL_AB, RATE_XP_BG_KILL_AV, RATE_XP_BG_KILL_EOTS, RATE_XP_BG_KILL_IC, RATE_XP_BG_KILL_SOTA, RATE_XP_BG_KILL_WSG, RATE_XP_EXPLORE, RATE_XP_KILL, RATE_XP_PET, RATE_XP_PET_NEXT_LEVEL, RATE_XP_QUEST, RATE_XP_QUEST_DF, realm, RealmHandle::Realm, REALM_ZONE_DEVELOPMENT, REALM_ZONE_RUSSIAN, IntervalTimer::Reset(), sConfigMgr, SEC_ADMINISTRATOR, SEC_CONSOLE, SEC_MODERATOR, VMAP::IVMapMgr::setEnableHeightCalc(), VMAP::IVMapMgr::setEnableLineOfSightCalc(), IntervalTimer::SetInterval(), SetNewCharString(), SetPlayerAmountLimit(), sLog, sMapMgr, sMetric, sScriptMgr, sWorld, sWorldUpdateTime, WUPDATE_AUTOBROADCAST, WUPDATE_CLEANDB, and WUPDATE_UPTIME.

Referenced by SetInitialWorldSettings().

◆ LoadDBAllowedSecurityLevel()

void World::LoadDBAllowedSecurityLevel ( )
overridevirtual

Implements IWorld.

3070{
3072 stmt->SetData(0, int32(realm.Id.Realm));
3073 PreparedQueryResult result = LoginDatabase.Query(stmt);
3074
3075 if (result)
3076 SetPlayerSecurityLimit(AccountTypes(result->Fetch()->Get<uint8>()));
3077}
AccountTypes
Definition: Common.h:58
std::shared_ptr< PreparedResultSet > PreparedQueryResult
Definition: DatabaseEnvFwd.h:46
@ LOGIN_SEL_REALMLIST_SECURITY_LEVEL
Definition: LoginDatabase.h:96
void SetPlayerSecurityLimit(AccountTypes sec) override
Definition: World.cpp:3079

References Realm::Id, LOGIN_SEL_REALMLIST_SECURITY_LEVEL, LoginDatabase, realm, RealmHandle::Realm, PreparedStatementBase::SetData(), and SetPlayerSecurityLimit().

Referenced by SetInitialWorldSettings().

◆ LoadDBVersion()

void World::LoadDBVersion ( )
overridevirtual

Implements IWorld.

3171{
3172 QueryResult result = WorldDatabase.Query("SELECT db_version, cache_id FROM version LIMIT 1");
3173 if (result)
3174 {
3175 Field* fields = result->Fetch();
3176
3177 _dbVersion = fields[0].Get<std::string>();
3178
3179 // will be overwrite by config values if different and non-0
3181 }
3182
3183 if (_dbVersion.empty())
3184 _dbVersion = "Unknown world database.";
3185}
DatabaseWorkerPool< WorldDatabaseConnection > WorldDatabase
Accessor to the world database.
Definition: DatabaseEnv.cpp:20
std::shared_ptr< ResultSet > QueryResult
Definition: DatabaseEnvFwd.h:28

References _dbVersion, _int_configs, CONFIG_CLIENTCACHE_VERSION, Field::Get(), and WorldDatabase.

◆ LoadWorldStates()

void World::LoadWorldStates ( )
overridevirtual

Implements IWorld.

3199{
3200 uint32 oldMSTime = getMSTime();
3201
3202 QueryResult result = CharacterDatabase.Query("SELECT entry, value FROM worldstates");
3203
3204 if (!result)
3205 {
3206 LOG_WARN("server.loading", ">> Loaded 0 world states. DB table `worldstates` is empty!");
3207 LOG_INFO("server.loading", " ");
3208 return;
3209 }
3210
3211 do
3212 {
3213 Field* fields = result->Fetch();
3214 _worldstates[fields[0].Get<uint32>()] = fields[1].Get<uint32>();
3215 } while (result->NextRow());
3216
3217 LOG_INFO("server.loading", ">> Loaded {} World States in {} ms", _worldstates.size(), GetMSTimeDiffToNow(oldMSTime));
3218 LOG_INFO("server.loading", " ");
3219}
#define LOG_WARN(filterType__,...)
Definition: Log.h:161
uint32 GetMSTimeDiffToNow(uint32 oldMSTime)
Definition: Timer.h:131
uint32 getMSTime()
Definition: Timer.h:103
DatabaseWorkerPool< CharacterDatabaseConnection > CharacterDatabase
Accessor to the character database.
Definition: DatabaseEnv.cpp:21

References _worldstates, CharacterDatabase, Field::Get(), getMSTime(), GetMSTimeDiffToNow(), LOG_INFO, and LOG_WARN.

Referenced by SetInitialWorldSettings().

◆ ProcessCliCommands()

void World::ProcessCliCommands ( )
overridevirtual

Implements IWorld.

2943{
2944 CliCommandHolder::Print zprint = nullptr;
2945 void* callbackArg = nullptr;
2946 CliCommandHolder* command = nullptr;
2947 while (_cliCmdQueue.next(command))
2948 {
2949 LOG_DEBUG("server.worldserver", "CLI command under processing...");
2950 zprint = command->m_print;
2951 callbackArg = command->m_callbackArg;
2952 CliHandler handler(callbackArg, zprint);
2953 handler.ParseCommands(command->m_command);
2954 if (command->m_commandFinished)
2955 command->m_commandFinished(callbackArg, !handler.HasSentErrorMessage());
2956 delete command;
2957 }
2958}
#define LOG_DEBUG(filterType__,...)
Definition: Log.h:169
Definition: Chat.h:152
CommandFinished m_commandFinished
Definition: IWorld.h:46
void * m_callbackArg
Definition: IWorld.h:43
Print m_print
Definition: IWorld.h:45
void(*)(void *, std::string_view) Print
Definition: IWorld.h:40
char * m_command
Definition: IWorld.h:44

References _cliCmdQueue, ChatHandler::HasSentErrorMessage(), LOG_DEBUG, CliCommandHolder::m_callbackArg, CliCommandHolder::m_command, CliCommandHolder::m_commandFinished, CliCommandHolder::m_print, LockedQueue< T, StorageType >::next(), and CliHandler::ParseCommands().

Referenced by Update().

◆ ProcessQueryCallbacks()

void World::ProcessQueryCallbacks ( )
private
3250{
3252}
void ProcessReadyCallbacks()
Definition: AsyncCallbackProcessor.h:41
QueryCallbackProcessor _queryProcessor
Definition: World.h:436

References _queryProcessor, and AsyncCallbackProcessor< T >::ProcessReadyCallbacks().

Referenced by Update().

◆ QueueCliCommand()

void World::QueueCliCommand ( CliCommandHolder commandHolder)
inlineoverridevirtual

Implements IWorld.

329{ _cliCmdQueue.add(commandHolder); }

References _cliCmdQueue, and LockedQueue< T, StorageType >::add().

◆ RemoveOldCorpses()

void World::RemoveOldCorpses ( )
overridevirtual

Implements IWorld.

3255{
3257}
@ WUPDATE_CORPSES
Definition: World.h:65
void SetCurrent(time_t current)
Definition: Timer.h:174

References _timers, IntervalTimer::SetCurrent(), and WUPDATE_CORPSES.

◆ RemoveQueuedPlayer()

bool World::RemoveQueuedPlayer ( WorldSession session)
overridevirtual

Implements IWorld.

367{
368 uint32 sessions = GetActiveSessionCount();
369
370 uint32 position = 1;
371 Queue::iterator iter = _queuedPlayer.begin();
372
373 // search to remove and count skipped positions
374 bool found = false;
375
376 for (; iter != _queuedPlayer.end(); ++iter, ++position)
377 {
378 if (*iter == sess)
379 {
380 sess->SetInQueue(false);
381 sess->ResetTimeOutTime(false);
382 iter = _queuedPlayer.erase(iter);
383 found = true;
384 break;
385 }
386 }
387
388 // if session not queued then it was an active session
389 if (!found)
390 {
391 ASSERT(sessions > 0);
392 --sessions;
393 }
394
395 // accept first in queue
396 if ((!GetPlayerAmountLimit() || sessions < GetPlayerAmountLimit()) && !_queuedPlayer.empty())
397 {
398 WorldSession* pop_sess = _queuedPlayer.front();
399 pop_sess->InitializeSession();
400 _queuedPlayer.pop_front();
401
402 // update iter to point first queued socket or end() if queue is empty now
403 iter = _queuedPlayer.begin();
404 position = 1;
405 }
406
407 // update queue position from iter to end()
408 for (; iter != _queuedPlayer.end(); ++iter, ++position)
409 (*iter)->SendAuthWaitQueue(position);
410
411 return found;
412}
uint32 GetActiveSessionCount() const override
Definition: World.h:169

References _queuedPlayer, ASSERT, GetActiveSessionCount(), GetPlayerAmountLimit(), WorldSession::InitializeSession(), WorldSession::ResetTimeOutTime(), and WorldSession::SetInQueue().

Referenced by AddSession_(), and UpdateSessions().

◆ ResetDailyQuests()

void World::ResetDailyQuests ( )
protected
3054{
3056 CharacterDatabase.Execute(stmt);
3057
3058 for (SessionMap::const_iterator itr = _sessions.begin(); itr != _sessions.end(); ++itr)
3059 if (itr->second->GetPlayer())
3060 itr->second->GetPlayer()->ResetDailyQuestStatus();
3061
3063 sWorld->setWorldState(WS_DAILY_QUEST_RESET_TIME, _nextDailyQuestReset.count());
3064
3065 // change available dailies
3066 sPoolMgr->ChangeDailyQuests();
3067}
@ CHAR_DEL_QUEST_STATUS_DAILY
Definition: CharacterDatabase.h:55
#define sPoolMgr
Definition: PoolMgr.h:163

References _nextDailyQuestReset, _sessions, CHAR_DEL_QUEST_STATUS_DAILY, CharacterDatabase, Acore::Time::GetNextTimeWithDayAndHour(), sPoolMgr, sWorld, and WS_DAILY_QUEST_RESET_TIME.

Referenced by Update().

◆ ResetEventSeasonalQuests()

void World::ResetEventSeasonalQuests ( uint16  event_id)
overridevirtual

Implements IWorld.

3120{
3122 stmt->SetData(0, event_id);
3123 CharacterDatabase.Execute(stmt);
3124
3125 for (SessionMap::const_iterator itr = _sessions.begin(); itr != _sessions.end(); ++itr)
3126 if (itr->second->GetPlayer())
3127 itr->second->GetPlayer()->ResetSeasonalQuestStatus(event_id);
3128}
@ CHAR_DEL_QUEST_STATUS_SEASONAL
Definition: CharacterDatabase.h:58

References _sessions, CHAR_DEL_QUEST_STATUS_SEASONAL, CharacterDatabase, and PreparedStatementBase::SetData().

◆ ResetGuildCap()

void World::ResetGuildCap ( )
protected
3155{
3156 LOG_INFO("server.worldserver", "Guild Daily Cap reset.");
3157
3159 sWorld->setWorldState(WS_GUILD_DAILY_RESET_TIME, _nextGuildReset.count());
3160
3161 sGuildMgr->ResetTimes();
3162}
#define sGuildMgr
Definition: GuildMgr.h:51

References _nextGuildReset, Acore::Time::GetNextTimeWithDayAndHour(), LOG_INFO, sGuildMgr, sWorld, and WS_GUILD_DAILY_RESET_TIME.

Referenced by Update().

◆ ResetMonthlyQuests()

void World::ResetMonthlyQuests ( )
protected
3105{
3106 LOG_INFO("server.worldserver", "Monthly quests reset for all characters.");
3107
3109 CharacterDatabase.Execute(stmt);
3110
3111 for (SessionMap::const_iterator itr = _sessions.begin(); itr != _sessions.end(); ++itr)
3112 if (itr->second->GetPlayer())
3113 itr->second->GetPlayer()->ResetMonthlyQuestStatus();
3114
3117}
@ CHAR_DEL_QUEST_STATUS_MONTHLY
Definition: CharacterDatabase.h:57
AC_COMMON_API time_t GetNextTimeWithMonthAndHour(int8 month, int8 hour)
Definition: Timer.cpp:333

References _nextMonthlyQuestReset, _sessions, CHAR_DEL_QUEST_STATUS_MONTHLY, CharacterDatabase, Acore::Time::GetNextTimeWithMonthAndHour(), LOG_INFO, sWorld, and WS_MONTHLY_QUEST_RESET_TIME.

Referenced by Update().

◆ ResetRandomBG()

void World::ResetRandomBG ( )
protected
3131{
3132 LOG_DEBUG("server.worldserver", "Random BG status reset for all characters.");
3133
3135 CharacterDatabase.Execute(stmt);
3136
3137 for (SessionMap::const_iterator itr = _sessions.begin(); itr != _sessions.end(); ++itr)
3138 if (itr->second->GetPlayer())
3139 itr->second->GetPlayer()->SetRandomWinner(false);
3140
3142 sWorld->setWorldState(WS_BG_DAILY_RESET_TIME, _nextRandomBGReset.count());
3143}
@ CHAR_DEL_BATTLEGROUND_RANDOM
Definition: CharacterDatabase.h:63

References _nextRandomBGReset, _sessions, CHAR_DEL_BATTLEGROUND_RANDOM, CharacterDatabase, Acore::Time::GetNextTimeWithDayAndHour(), LOG_DEBUG, sWorld, and WS_BG_DAILY_RESET_TIME.

Referenced by Update().

◆ ResetWeeklyQuests()

void World::ResetWeeklyQuests ( )
protected
3089{
3091 CharacterDatabase.Execute(stmt);
3092
3093 for (SessionMap::const_iterator itr = _sessions.begin(); itr != _sessions.end(); ++itr)
3094 if (itr->second->GetPlayer())
3095 itr->second->GetPlayer()->ResetWeeklyQuestStatus();
3096
3099
3100 // change available weeklies
3101 sPoolMgr->ChangeWeeklyQuests();
3102}
@ CHAR_DEL_QUEST_STATUS_WEEKLY
Definition: CharacterDatabase.h:56

References _nextWeeklyQuestReset, _sessions, CHAR_DEL_QUEST_STATUS_WEEKLY, CharacterDatabase, Acore::Time::GetNextTimeWithDayAndHour(), sPoolMgr, sWorld, and WS_WEEKLY_QUEST_RESET_TIME.

Referenced by Update().

◆ SendGlobalGMMessage()

void World::SendGlobalGMMessage ( WorldPacket const *  packet,
WorldSession self = nullptr,
TeamId  teamId = TEAM_NEUTRAL 
)
overridevirtual

Send a packet to all GMs (except self if mentioned)

Implements IWorld.

2516{
2517 SessionMap::iterator itr;
2518 for (itr = _sessions.begin(); itr != _sessions.end(); ++itr)
2519 {
2520 if (itr->second &&
2521 itr->second->GetPlayer() &&
2522 itr->second->GetPlayer()->IsInWorld() &&
2523 itr->second != self &&
2524 !AccountMgr::IsPlayerAccount(itr->second->GetSecurity()) &&
2525 (teamId == TEAM_NEUTRAL || itr->second->GetPlayer()->GetTeamId() == teamId))
2526 {
2527 itr->second->SendPacket(packet);
2528 }
2529 }
2530}
@ TEAM_NEUTRAL
Definition: SharedDefines.h:762

References _sessions, AccountMgr::IsPlayerAccount(), and TEAM_NEUTRAL.

◆ SendGlobalMessage()

void World::SendGlobalMessage ( WorldPacket const *  packet,
WorldSession self = nullptr,
TeamId  teamId = TEAM_NEUTRAL 
)
overridevirtual

Send a packet to all players (except self if mentioned)

Implements IWorld.

2499{
2500 SessionMap::const_iterator itr;
2501 for (itr = _sessions.begin(); itr != _sessions.end(); ++itr)
2502 {
2503 if (itr->second &&
2504 itr->second->GetPlayer() &&
2505 itr->second->GetPlayer()->IsInWorld() &&
2506 itr->second != self &&
2507 (teamId == TEAM_NEUTRAL || itr->second->GetPlayer()->GetTeamId() == teamId))
2508 {
2509 itr->second->SendPacket(packet);
2510 }
2511 }
2512}

References _sessions, and TEAM_NEUTRAL.

Referenced by SendGlobalText(), and SendServerMessage().

◆ SendGlobalText()

void World::SendGlobalText ( const char *  text,
WorldSession self 
)
overridevirtual
Deprecated:
only for debug purpose. Send a System Message to all players (except self if mentioned)

Implements IWorld.

2651{
2652 WorldPacket data;
2653
2654 // need copy to prevent corruption by strtok call in LineFromMessage original string
2655 char* buf = strdup(text);
2656 char* pos = buf;
2657
2658 while (char* line = ChatHandler::LineFromMessage(pos))
2659 {
2660 ChatHandler::BuildChatPacket(data, CHAT_MSG_SYSTEM, LANG_UNIVERSAL, nullptr, nullptr, line);
2661 SendGlobalMessage(&data, self);
2662 }
2663
2664 free(buf);
2665}
@ CHAT_MSG_SYSTEM
Definition: SharedDefines.h:3152
@ LANG_UNIVERSAL
Definition: SharedDefines.h:735
static char * LineFromMessage(char *&pos)
Definition: Chat.h:51
static size_t BuildChatPacket(WorldPacket &data, ChatMsg chatType, Language language, ObjectGuid senderGUID, ObjectGuid receiverGUID, std::string_view message, uint8 chatTag, std::string const &senderName="", std::string const &receiverName="", uint32 achievementId=0, bool gmMessage=false, std::string const &channelName="")
Definition: Chat.cpp:201
Definition: WorldPacket.h:27
void SendGlobalMessage(WorldPacket const *packet, WorldSession *self=nullptr, TeamId teamId=TEAM_NEUTRAL) override
Send a packet to all players (except self if mentioned)
Definition: World.cpp:2498

References ChatHandler::BuildChatPacket(), CHAT_MSG_SYSTEM, LANG_UNIVERSAL, ChatHandler::LineFromMessage(), and SendGlobalMessage().

◆ SendGMText()

void World::SendGMText ( uint32  string_id,
  ... 
)
overridevirtual

Send a System Message to all GMs (except self if mentioned)

Implements IWorld.

2625{
2626 va_list ap;
2627 va_start(ap, string_id);
2628
2629 Acore::WorldWorldTextBuilder wt_builder(string_id, &ap);
2631 for (SessionMap::iterator itr = _sessions.begin(); itr != _sessions.end(); ++itr)
2632 {
2633 // Session should have permissions to receive global gm messages
2634 WorldSession* session = itr->second;
2635 if (!session || AccountMgr::IsPlayerAccount(session->GetSecurity()))
2636 continue;
2637
2638 // Player should be in world
2639 Player* player = session->GetPlayer();
2640 if (!player || !player->IsInWorld())
2641 continue;
2642
2643 wt_do(session->GetPlayer());
2644 }
2645
2646 va_end(ap);
2647}
Definition: GridNotifiers.h:1722
Player * GetPlayer() const
Definition: WorldSession.h:364
Definition: World.cpp:2535

References _sessions, WorldSession::GetPlayer(), WorldSession::GetSecurity(), Object::IsInWorld(), and AccountMgr::IsPlayerAccount().

◆ SendServerMessage()

void World::SendServerMessage ( ServerMessageType  messageID,
std::string  stringParam = "",
Player player = nullptr 
)
overridevirtual

Send a server message to the user(s)

Implements IWorld.

2856{
2857 WorldPackets::Chat::ChatServerMessage chatServerMessage;
2858 chatServerMessage.MessageID = int32(messageID);
2859 if (messageID <= SERVER_MSG_STRING)
2860 chatServerMessage.StringParam = stringParam;
2861
2862 if (player)
2863 player->SendDirectMessage(chatServerMessage.Write());
2864 else
2865 SendGlobalMessage(chatServerMessage.Write());
2866}
@ SERVER_MSG_STRING
Definition: IWorld.h:63
void SendDirectMessage(WorldPacket const *data) const
Definition: Player.cpp:5607
Definition: ChatPackets.h:50
std::string StringParam
Definition: ChatPackets.h:57
WorldPacket const * Write() override
Definition: ChatPackets.cpp:33
int32 MessageID
Definition: ChatPackets.h:56

References WorldPackets::Chat::ChatServerMessage::MessageID, Player::SendDirectMessage(), SendGlobalMessage(), SERVER_MSG_STRING, WorldPackets::Chat::ChatServerMessage::StringParam, and WorldPackets::Chat::ChatServerMessage::Write().

Referenced by ShutdownCancel(), and ShutdownMsg().

◆ SendWorldText()

void World::SendWorldText ( uint32  string_id,
  ... 
)
overridevirtual

Send a System Message to all players (except self if mentioned)

Implements IWorld.

2578{
2579 va_list ap;
2580 va_start(ap, string_id);
2581
2582 Acore::WorldWorldTextBuilder wt_builder(string_id, &ap);
2584 for (SessionMap::const_iterator itr = _sessions.begin(); itr != _sessions.end(); ++itr)
2585 {
2586 if (!itr->second || !itr->second->GetPlayer() || !itr->second->GetPlayer()->IsInWorld())
2587 continue;
2588
2589 wt_do(itr->second->GetPlayer());
2590 }
2591
2592 va_end(ap);
2593}

References _sessions.

◆ SendWorldTextOptional()

void World::SendWorldTextOptional ( uint32  string_id,
uint32  flag,
  ... 
)
overridevirtual

Implements IWorld.

2596{
2597 va_list ap;
2598 va_start(ap, flag);
2599
2600 Acore::WorldWorldTextBuilder wt_builder(string_id, &ap);
2602 for (auto const& itr : _sessions)
2603 {
2604 if (!itr.second || !itr.second->GetPlayer() || !itr.second->GetPlayer()->IsInWorld())
2605 {
2606 continue;
2607 }
2608
2609 if (sWorld->getBoolConfig(CONFIG_PLAYER_SETTINGS_ENABLED))
2610 {
2611 if (itr.second->GetPlayer()->GetPlayerSetting(AzerothcorePSSource, SETTING_ANNOUNCER_FLAGS).HasFlag(flag))
2612 {
2613 continue;
2614 }
2615 }
2616
2617 wt_do(itr.second->GetPlayer());
2618 }
2619
2620 va_end(ap);
2621}
const std::string AzerothcorePSSource
Definition: PlayerSettings.h:23
@ SETTING_ANNOUNCER_FLAGS
Definition: PlayerSettings.h:27

References _sessions, AzerothcorePSSource, CONFIG_PLAYER_SETTINGS_ENABLED, SETTING_ANNOUNCER_FLAGS, and sWorld.

◆ SendZoneMessage()

bool World::SendZoneMessage ( uint32  zone,
WorldPacket const *  packet,
WorldSession self = nullptr,
TeamId  teamId = TEAM_NEUTRAL 
)
overridevirtual

Send a packet to all players (or players selected team) in the zone (except self if mentioned)

Implements IWorld.

2669{
2670 bool foundPlayerToSend = false;
2671 SessionMap::const_iterator itr;
2672
2673 for (itr = _sessions.begin(); itr != _sessions.end(); ++itr)
2674 {
2675 if (itr->second &&
2676 itr->second->GetPlayer() &&
2677 itr->second->GetPlayer()->IsInWorld() &&
2678 itr->second->GetPlayer()->GetZoneId() == zone &&
2679 itr->second != self &&
2680 (teamId == TEAM_NEUTRAL || itr->second->GetPlayer()->GetTeamId() == teamId))
2681 {
2682 itr->second->SendPacket(packet);
2683 foundPlayerToSend = true;
2684 }
2685 }
2686
2687 return foundPlayerToSend;
2688}

References _sessions, and TEAM_NEUTRAL.

Referenced by SendZoneText().

◆ SendZoneText()

void World::SendZoneText ( uint32  zone,
const char *  text,
WorldSession self = nullptr,
TeamId  teamId = TEAM_NEUTRAL 
)
overridevirtual

Send a System Message to all players in the zone (except self if mentioned)

Implements IWorld.

2692{
2693 WorldPacket data;
2694 ChatHandler::BuildChatPacket(data, CHAT_MSG_SYSTEM, LANG_UNIVERSAL, nullptr, nullptr, text);
2695 SendZoneMessage(zone, &data, self, teamId);
2696}
bool SendZoneMessage(uint32 zone, WorldPacket const *packet, WorldSession *self=nullptr, TeamId teamId=TEAM_NEUTRAL) override
Send a packet to all players (or players selected team) in the zone (except self if mentioned)
Definition: World.cpp:2668

References ChatHandler::BuildChatPacket(), CHAT_MSG_SYSTEM, LANG_UNIVERSAL, and SendZoneMessage().

◆ SetAllowMovement()

void World::SetAllowMovement ( bool  allow)
inlineoverridevirtual

Allow/Disallow object movements.

Implements IWorld.

214{ _allowMovement = allow; }

References _allowMovement.

◆ setBoolConfig()

void World::setBoolConfig ( WorldBoolConfigs  index,
bool  value 
)
inlineoverridevirtual

Set a server configuration element (see #WorldConfigs)

Implements IWorld.

272 {
273 if (index < BOOL_CONFIG_VALUE_COUNT)
274 _bool_configs[index] = value;
275 }

References _bool_configs, and BOOL_CONFIG_VALUE_COUNT.

◆ SetCleaningFlags()

void World::SetCleaningFlags ( uint32  flags)
inlineoverridevirtual

Implements IWorld.

344{ _cleaningFlags = flags; }

References _cleaningFlags.

◆ SetClosed()

void World::SetClosed ( bool  val)
overridevirtual

Close world.

Implements IWorld.

202{
203 _isClosed = val;
204
205 // Invert the value, for simplicity for scripters.
206 sScriptMgr->OnOpenStateChange(!val);
207}

References _isClosed, and sScriptMgr.

◆ setFloatConfig()

void World::setFloatConfig ( WorldFloatConfigs  index,
float  value 
)
inlineoverridevirtual

Set a server configuration element (see #WorldConfigs)

Implements IWorld.

285 {
286 if (index < FLOAT_CONFIG_VALUE_COUNT)
287 _float_configs[index] = value;
288 }

References _float_configs, and FLOAT_CONFIG_VALUE_COUNT.

◆ SetInitialWorldSettings()

void World::SetInitialWorldSettings ( )
overridevirtual

Initialize the World.

  • Server startup begin
  • Initialize the random number generator
  • Initialize detour memory management
  • Initialize VMapMgr function pointers (to untangle game/collision circular deps)
  • Initialize config settings
  • Initialize Allowed Security Level
  • Init highest guids before any table loading to prevent using not initialized guids in some code.
  • Check the existence of the map files for all starting areas.
  • Initialize pool manager
  • Initialize game event manager
  • Loading strings. Getting no records means core load has to be canceled because no error message can be output.
  • Update the realm entry in the database with the realm type from the config file
  • Custom Hook for loading DB items
  • Load the DBC files
  • Initilize static helper structures
  • Load dynamic data tables from the database
  • Handle outdated emails (delete/return)
  • Load AutoBroadCast
  • Load Motd
  • Load and initialize scripts
  • Initialize game time and timers
  • Initialize MapMgr
  • Initialize Battlegrounds
  • Initialize outdoor pvp
  • Initialize Battlefield
  • Initialize Warden

Implements IWorld.

1486{
1488 uint32 startupBegin = getMSTime();
1489
1491 srand((unsigned int)GameTime::GetGameTime().count());
1492
1494 dtAllocSetCustom(dtCustomAlloc, dtCustomFree);
1495
1500
1503
1506
1508 sObjectMgr->SetHighestGuids();
1509
1510 if (!sConfigMgr->isDryRun())
1511 {
1513 if (!MapMgr::ExistMapAndVMap(0, -6240.32f, 331.033f)
1514 || !MapMgr::ExistMapAndVMap(0, -8949.95f, -132.493f)
1515 || !MapMgr::ExistMapAndVMap(1, -618.518f, -4251.67f)
1516 || !MapMgr::ExistMapAndVMap(0, 1676.35f, 1677.45f)
1517 || !MapMgr::ExistMapAndVMap(1, 10311.3f, 832.463f)
1518 || !MapMgr::ExistMapAndVMap(1, -2917.58f, -257.98f)
1520 !MapMgr::ExistMapAndVMap(530, 10349.6f, -6357.29f) ||
1521 !MapMgr::ExistMapAndVMap(530, -3961.64f, -13931.2f))))
1522 {
1523 exit(1);
1524 }
1525 }
1526
1528 sPoolMgr->Initialize();
1529
1531 sGameEventMgr->Initialize();
1532
1534 LOG_INFO("server.loading", " ");
1535 LOG_INFO("server.loading", "Loading Acore Strings...");
1536 if (!sObjectMgr->LoadAcoreStrings())
1537 exit(1); // Error message displayed in function already
1538
1540 //No SQL injection as values are treated as integers
1541
1542 // not send custom type REALM_FFA_PVP to realm list
1543 uint32 server_type;
1544 if (IsFFAPvPRealm())
1545 server_type = REALM_TYPE_PVP;
1546 else
1547 server_type = getIntConfig(CONFIG_GAME_TYPE);
1548
1550
1551 LoginDatabase.Execute("UPDATE realmlist SET icon = {}, timezone = {} WHERE id = '{}'", server_type, realm_zone, realm.Id.Realm); // One-time query
1552
1554 sScriptMgr->OnLoadCustomDatabaseTable();
1555
1557 LOG_INFO("server.loading", "Initialize Data Stores...");
1559 DetectDBCLang();
1560
1561 // Load cinematic cameras
1563
1564 // Load IP Location Database
1565 sIPLocation->Load();
1566
1567 std::vector<uint32> mapIds;
1568 for (auto const& map : sMapStore)
1569 {
1570 mapIds.emplace_back(map->MapID);
1571 }
1572
1573 vmmgr2->InitializeThreadUnsafe(mapIds);
1574
1576 mmmgr->InitializeThreadUnsafe(mapIds);
1577
1578 LOG_INFO("server.loading", "Loading Game Graveyard...");
1579 sGraveyard->LoadGraveyardFromDB();
1580
1581 LOG_INFO("server.loading", "Initializing PlayerDump Tables...");
1583
1586
1587 LOG_INFO("server.loading", "Loading SpellInfo Store...");
1588 sSpellMgr->LoadSpellInfoStore();
1589
1590 LOG_INFO("server.loading", "Loading Spell Cooldown Overrides...");
1591 sSpellMgr->LoadSpellCooldownOverrides();
1592
1593 LOG_INFO("server.loading", "Loading SpellInfo Data Corrections...");
1594 sSpellMgr->LoadSpellInfoCorrections();
1595
1596 LOG_INFO("server.loading", "Loading Spell Rank Data...");
1597 sSpellMgr->LoadSpellRanks();
1598
1599 LOG_INFO("server.loading", "Loading Spell Specific And Aura State...");
1600 sSpellMgr->LoadSpellSpecificAndAuraState();
1601
1602 LOG_INFO("server.loading", "Loading SkillLineAbilityMultiMap Data...");
1603 sSpellMgr->LoadSkillLineAbilityMap();
1604
1605 LOG_INFO("server.loading", "Loading SpellInfo Custom Attributes...");
1606 sSpellMgr->LoadSpellInfoCustomAttributes();
1607
1608 LOG_INFO("server.loading", "Loading GameObject Models...");
1610
1611 LOG_INFO("server.loading", "Loading Script Names...");
1612 sObjectMgr->LoadScriptNames();
1613
1614 LOG_INFO("server.loading", "Loading Instance Template...");
1615 sObjectMgr->LoadInstanceTemplate();
1616
1617 LOG_INFO("server.loading", "Loading Instance Saved Gameobject State Data...");
1618 sObjectMgr->LoadInstanceSavedGameobjectStateData();
1619
1620 LOG_INFO("server.loading", "Loading Character Cache...");
1621 sCharacterCache->LoadCharacterCacheStorage();
1622
1623 // Must be called before `creature_respawn`/`gameobject_respawn` tables
1624 LOG_INFO("server.loading", "Loading Instances...");
1625 sInstanceSaveMgr->LoadInstances();
1626
1627 LOG_INFO("server.loading", "Loading Broadcast Texts...");
1628 sObjectMgr->LoadBroadcastTexts();
1629 sObjectMgr->LoadBroadcastTextLocales();
1630
1631 LOG_INFO("server.loading", "Loading Localization Strings...");
1632 uint32 oldMSTime = getMSTime();
1633 sObjectMgr->LoadCreatureLocales();
1634 sObjectMgr->LoadGameObjectLocales();
1635 sObjectMgr->LoadItemLocales();
1636 sObjectMgr->LoadItemSetNameLocales();
1637 sObjectMgr->LoadQuestLocales();
1638 sObjectMgr->LoadQuestOfferRewardLocale();
1639 sObjectMgr->LoadQuestRequestItemsLocale();
1640 sObjectMgr->LoadNpcTextLocales();
1641 sObjectMgr->LoadPageTextLocales();
1642 sObjectMgr->LoadGossipMenuItemsLocales();
1643 sObjectMgr->LoadPointOfInterestLocales();
1644 sObjectMgr->LoadPetNamesLocales();
1645
1646 sObjectMgr->SetDBCLocaleIndex(GetDefaultDbcLocale()); // Get once for all the locale index of DBC language (console/broadcasts)
1647 LOG_INFO("server.loading", ">> Localization Strings loaded in {} ms", GetMSTimeDiffToNow(oldMSTime));
1648 LOG_INFO("server.loading", " ");
1649
1650 LOG_INFO("server.loading", "Loading Page Texts...");
1651 sObjectMgr->LoadPageTexts();
1652
1653 LOG_INFO("server.loading", "Loading Game Object Templates..."); // must be after LoadPageTexts
1654 sObjectMgr->LoadGameObjectTemplate();
1655
1656 LOG_INFO("server.loading", "Loading Game Object Template Addons...");
1657 sObjectMgr->LoadGameObjectTemplateAddons();
1658
1659 LOG_INFO("server.loading", "Loading Transport Templates...");
1660 sTransportMgr->LoadTransportTemplates();
1661
1662 LOG_INFO("server.loading", "Loading Spell Required Data...");
1663 sSpellMgr->LoadSpellRequired();
1664
1665 LOG_INFO("server.loading", "Loading Spell Group Types...");
1666 sSpellMgr->LoadSpellGroups();
1667
1668 LOG_INFO("server.loading", "Loading Spell Learn Skills...");
1669 sSpellMgr->LoadSpellLearnSkills(); // must be after LoadSpellRanks
1670
1671 LOG_INFO("server.loading", "Loading Spell Proc Event Conditions...");
1672 sSpellMgr->LoadSpellProcEvents();
1673
1674 LOG_INFO("server.loading", "Loading Spell Proc Conditions and Data...");
1675 sSpellMgr->LoadSpellProcs();
1676
1677 LOG_INFO("server.loading", "Loading Spell Bonus Data...");
1678 sSpellMgr->LoadSpellBonuses();
1679
1680 LOG_INFO("server.loading", "Loading Aggro Spells Definitions...");
1681 sSpellMgr->LoadSpellThreats();
1682
1683 LOG_INFO("server.loading", "Loading Mixology Bonuses...");
1684 sSpellMgr->LoadSpellMixology();
1685
1686 LOG_INFO("server.loading", "Loading Spell Group Stack Rules...");
1687 sSpellMgr->LoadSpellGroupStackRules();
1688
1689 LOG_INFO("server.loading", "Loading NPC Texts...");
1690 sObjectMgr->LoadGossipText();
1691
1692 LOG_INFO("server.loading", "Loading Enchant Spells Proc Datas...");
1693 sSpellMgr->LoadSpellEnchantProcData();
1694
1695 LOG_INFO("server.loading", "Loading Item Random Enchantments Table...");
1697
1698 LOG_INFO("server.loading", "Loading Disables");
1699 DisableMgr::LoadDisables(); // must be before loading quests and items
1700
1701 LOG_INFO("server.loading", "Loading Items..."); // must be after LoadRandomEnchantmentsTable and LoadPageTexts
1702 sObjectMgr->LoadItemTemplates();
1703
1704 LOG_INFO("server.loading", "Loading Item Set Names..."); // must be after LoadItemPrototypes
1705 sObjectMgr->LoadItemSetNames();
1706
1707 LOG_INFO("server.loading", "Loading Creature Model Based Info Data...");
1708 sObjectMgr->LoadCreatureModelInfo();
1709
1710 LOG_INFO("server.loading", "Loading Creature Custom IDs Config...");
1711 sObjectMgr->LoadCreatureCustomIDs();
1712
1713 LOG_INFO("server.loading", "Loading Creature Templates...");
1714 sObjectMgr->LoadCreatureTemplates();
1715
1716 LOG_INFO("server.loading", "Loading Equipment Templates..."); // must be after LoadCreatureTemplates
1717 sObjectMgr->LoadEquipmentTemplates();
1718
1719 LOG_INFO("server.loading", "Loading Creature Template Addons...");
1720 sObjectMgr->LoadCreatureTemplateAddons();
1721
1722 LOG_INFO("server.loading", "Loading Reputation Reward Rates...");
1723 sObjectMgr->LoadReputationRewardRate();
1724
1725 LOG_INFO("server.loading", "Loading Creature Reputation OnKill Data...");
1726 sObjectMgr->LoadReputationOnKill();
1727
1728 LOG_INFO("server.loading", "Loading Reputation Spillover Data..." );
1729 sObjectMgr->LoadReputationSpilloverTemplate();
1730
1731 LOG_INFO("server.loading", "Loading Points Of Interest Data...");
1732 sObjectMgr->LoadPointsOfInterest();
1733
1734 LOG_INFO("server.loading", "Loading Creature Base Stats...");
1735 sObjectMgr->LoadCreatureClassLevelStats();
1736
1737 LOG_INFO("server.loading", "Loading Creature Data...");
1738 sObjectMgr->LoadCreatures();
1739
1740 LOG_INFO("server.loading", "Loading Temporary Summon Data...");
1741 sObjectMgr->LoadTempSummons(); // must be after LoadCreatureTemplates() and LoadGameObjectTemplates()
1742
1743 LOG_INFO("server.loading", "Loading Pet Levelup Spells...");
1744 sSpellMgr->LoadPetLevelupSpellMap();
1745
1746 LOG_INFO("server.loading", "Loading Pet default Spells additional to Levelup Spells...");
1747 sSpellMgr->LoadPetDefaultSpells();
1748
1749 LOG_INFO("server.loading", "Loading Creature Addon Data...");
1750 sObjectMgr->LoadCreatureAddons(); // must be after LoadCreatureTemplates() and LoadCreatures()
1751
1752 LOG_INFO("server.loading", "Loading Creature Movement Overrides...");
1753 sObjectMgr->LoadCreatureMovementOverrides(); // must be after LoadCreatures()
1754
1755 LOG_INFO("server.loading", "Loading Gameobject Data...");
1756 sObjectMgr->LoadGameobjects();
1757
1758 LOG_INFO("server.loading", "Loading GameObject Addon Data...");
1759 sObjectMgr->LoadGameObjectAddons(); // must be after LoadGameObjectTemplate() and LoadGameobjects()
1760
1761 LOG_INFO("server.loading", "Loading GameObject Quest Items...");
1762 sObjectMgr->LoadGameObjectQuestItems();
1763
1764 LOG_INFO("server.loading", "Loading Creature Quest Items...");
1765 sObjectMgr->LoadCreatureQuestItems();
1766
1767 LOG_INFO("server.loading", "Loading Creature Linked Respawn...");
1768 sObjectMgr->LoadLinkedRespawn(); // must be after LoadCreatures(), LoadGameObjects()
1769
1770 LOG_INFO("server.loading", "Loading Weather Data...");
1772
1773 LOG_INFO("server.loading", "Loading Quests...");
1774 sObjectMgr->LoadQuests(); // must be loaded after DBCs, creature_template, item_template, gameobject tables
1775
1776 LOG_INFO("server.loading", "Checking Quest Disables");
1777 DisableMgr::CheckQuestDisables(); // must be after loading quests
1778
1779 LOG_INFO("server.loading", "Loading Quest POI");
1780 sObjectMgr->LoadQuestPOI();
1781
1782 LOG_INFO("server.loading", "Loading Quests Starters and Enders...");
1783 sObjectMgr->LoadQuestStartersAndEnders(); // must be after quest load
1784
1785 LOG_INFO("server.loading", "Loading Quest Greetings...");
1786 sObjectMgr->LoadQuestGreetings(); // must be loaded after creature_template, gameobject_template tables
1787 LOG_INFO("server.loading", "Loading Quest Greeting Locales...");
1788 sObjectMgr->LoadQuestGreetingsLocales(); // must be loaded after creature_template, gameobject_template tables
1789
1790 LOG_INFO("server.loading", "Loading Quest Money Rewards...");
1791 sObjectMgr->LoadQuestMoneyRewards();
1792
1793 LOG_INFO("server.loading", "Loading Objects Pooling Data...");
1794 sPoolMgr->LoadFromDB();
1795
1796 LOG_INFO("server.loading", "Loading Game Event Data..."); // must be after loading pools fully
1797 sGameEventMgr->LoadHolidayDates(); // Must be after loading DBC
1798 sGameEventMgr->LoadFromDB(); // Must be after loading holiday dates
1799
1800 LOG_INFO("server.loading", "Loading UNIT_NPC_FLAG_SPELLCLICK Data..."); // must be after LoadQuests
1801 sObjectMgr->LoadNPCSpellClickSpells();
1802
1803 LOG_INFO("server.loading", "Loading Vehicle Template Accessories...");
1804 sObjectMgr->LoadVehicleTemplateAccessories(); // must be after LoadCreatureTemplates() and LoadNPCSpellClickSpells()
1805
1806 LOG_INFO("server.loading", "Loading Vehicle Accessories...");
1807 sObjectMgr->LoadVehicleAccessories(); // must be after LoadCreatureTemplates() and LoadNPCSpellClickSpells()
1808
1809 LOG_INFO("server.loading", "Loading SpellArea Data..."); // must be after quest load
1810 sSpellMgr->LoadSpellAreas();
1811
1812 LOG_INFO("server.loading", "Loading Area Trigger Definitions");
1813 sObjectMgr->LoadAreaTriggers();
1814
1815 LOG_INFO("server.loading", "Loading Area Trigger Teleport Definitions...");
1816 sObjectMgr->LoadAreaTriggerTeleports();
1817
1818 LOG_INFO("server.loading", "Loading Access Requirements...");
1819 sObjectMgr->LoadAccessRequirements(); // must be after item template load
1820
1821 LOG_INFO("server.loading", "Loading Quest Area Triggers...");
1822 sObjectMgr->LoadQuestAreaTriggers(); // must be after LoadQuests
1823
1824 LOG_INFO("server.loading", "Loading Tavern Area Triggers...");
1825 sObjectMgr->LoadTavernAreaTriggers();
1826
1827 LOG_INFO("server.loading", "Loading AreaTrigger Script Names...");
1828 sObjectMgr->LoadAreaTriggerScripts();
1829
1830 LOG_INFO("server.loading", "Loading LFG Entrance Positions..."); // Must be after areatriggers
1831 sLFGMgr->LoadLFGDungeons();
1832
1833 LOG_INFO("server.loading", "Loading Dungeon Boss Data...");
1834 sObjectMgr->LoadInstanceEncounters();
1835
1836 LOG_INFO("server.loading", "Loading LFG Rewards...");
1837 sLFGMgr->LoadRewards();
1838
1839 LOG_INFO("server.loading", "Loading Graveyard-Zone Links...");
1840 sGraveyard->LoadGraveyardZones();
1841
1842 LOG_INFO("server.loading", "Loading Spell Pet Auras...");
1843 sSpellMgr->LoadSpellPetAuras();
1844
1845 LOG_INFO("server.loading", "Loading Spell Target Coordinates...");
1846 sSpellMgr->LoadSpellTargetPositions();
1847
1848 LOG_INFO("server.loading", "Loading Enchant Custom Attributes...");
1849 sSpellMgr->LoadEnchantCustomAttr();
1850
1851 LOG_INFO("server.loading", "Loading linked Spells...");
1852 sSpellMgr->LoadSpellLinked();
1853
1854 LOG_INFO("server.loading", "Loading Player Create Data...");
1855 sObjectMgr->LoadPlayerInfo();
1856
1857 LOG_INFO("server.loading", "Loading Exploration BaseXP Data...");
1858 sObjectMgr->LoadExplorationBaseXP();
1859
1860 LOG_INFO("server.loading", "Loading Pet Name Parts...");
1861 sObjectMgr->LoadPetNames();
1862
1864
1865 LOG_INFO("server.loading", "Loading The Max Pet Number...");
1866 sObjectMgr->LoadPetNumber();
1867
1868 LOG_INFO("server.loading", "Loading Pet Level Stats...");
1869 sObjectMgr->LoadPetLevelInfo();
1870
1871 LOG_INFO("server.loading", "Loading Player Level Dependent Mail Rewards...");
1872 sObjectMgr->LoadMailLevelRewards();
1873
1874 LOG_INFO("server.loading", "Load Mail Server Template...");
1875 sObjectMgr->LoadMailServerTemplates();
1876
1877 // Loot tables
1879
1880 LOG_INFO("server.loading", "Loading Skill Discovery Table...");
1882
1883 LOG_INFO("server.loading", "Loading Skill Extra Item Table...");
1885
1886 LOG_INFO("server.loading", "Loading Skill Perfection Data Table...");
1888
1889 LOG_INFO("server.loading", "Loading Skill Fishing Base Level Requirements...");
1890 sObjectMgr->LoadFishingBaseSkillLevel();
1891
1892 LOG_INFO("server.loading", "Loading Achievements...");
1893 sAchievementMgr->LoadAchievementReferenceList();
1894 LOG_INFO("server.loading", "Loading Achievement Criteria Lists...");
1895 sAchievementMgr->LoadAchievementCriteriaList();
1896 LOG_INFO("server.loading", "Loading Achievement Criteria Data...");
1897 sAchievementMgr->LoadAchievementCriteriaData();
1898 LOG_INFO("server.loading", "Loading Achievement Rewards...");
1899 sAchievementMgr->LoadRewards();
1900 LOG_INFO("server.loading", "Loading Achievement Reward Locales...");
1901 sAchievementMgr->LoadRewardLocales();
1902 LOG_INFO("server.loading", "Loading Completed Achievements...");
1903 sAchievementMgr->LoadCompletedAchievements();
1904
1906 LOG_INFO("server.loading", "Loading Item Auctions...");
1907 sAuctionMgr->LoadAuctionItems();
1908 LOG_INFO("server.loading", "Loading Auctions...");
1909 sAuctionMgr->LoadAuctions();
1910
1911 sGuildMgr->LoadGuilds();
1912
1913 LOG_INFO("server.loading", "Loading ArenaTeams...");
1914 sArenaTeamMgr->LoadArenaTeams();
1915
1916 LOG_INFO("server.loading", "Loading Groups...");
1917 sGroupMgr->LoadGroups();
1918
1919 LOG_INFO("server.loading", "Loading Reserved Names...");
1920 sObjectMgr->LoadReservedPlayersNames();
1921
1922 LOG_INFO("server.loading", "Loading Profanity Names...");
1923 sObjectMgr->LoadProfanityPlayersNames();
1924
1925 LOG_INFO("server.loading", "Loading GameObjects for Quests...");
1926 sObjectMgr->LoadGameObjectForQuests();
1927
1928 LOG_INFO("server.loading", "Loading BattleMasters...");
1929 sBattlegroundMgr->LoadBattleMastersEntry();
1930
1931 LOG_INFO("server.loading", "Loading GameTeleports...");
1932 sObjectMgr->LoadGameTele();
1933
1934 LOG_INFO("server.loading", "Loading Gossip Menu...");
1935 sObjectMgr->LoadGossipMenu();
1936
1937 LOG_INFO("server.loading", "Loading Gossip Menu Options...");
1938 sObjectMgr->LoadGossipMenuItems();
1939
1940 LOG_INFO("server.loading", "Loading Vendors...");
1941 sObjectMgr->LoadVendors(); // must be after load CreatureTemplate and ItemTemplate
1942
1943 LOG_INFO("server.loading", "Loading Trainers...");
1944 sObjectMgr->LoadTrainerSpell(); // must be after load CreatureTemplate
1945
1946 LOG_INFO("server.loading", "Loading Waypoints...");
1947 sWaypointMgr->Load();
1948
1949 LOG_INFO("server.loading", "Loading SmartAI Waypoints...");
1950 sSmartWaypointMgr->LoadFromDB();
1951
1952 LOG_INFO("server.loading", "Loading Creature Formations...");
1953 sFormationMgr->LoadCreatureFormations();
1954
1955 LOG_INFO("server.loading", "Loading World States..."); // must be loaded before battleground, outdoor PvP and conditions
1957
1958 LOG_INFO("server.loading", "Loading Conditions...");
1959 sConditionMgr->LoadConditions();
1960
1961 LOG_INFO("server.loading", "Loading Faction Change Achievement Pairs...");
1962 sObjectMgr->LoadFactionChangeAchievements();
1963
1964 LOG_INFO("server.loading", "Loading Faction Change Spell Pairs...");
1965 sObjectMgr->LoadFactionChangeSpells();
1966
1967 LOG_INFO("server.loading", "Loading Faction Change Item Pairs...");
1968 sObjectMgr->LoadFactionChangeItems();
1969
1970 LOG_INFO("server.loading", "Loading Faction Change Reputation Pairs...");
1971 sObjectMgr->LoadFactionChangeReputations();
1972
1973 LOG_INFO("server.loading", "Loading Faction Change Title Pairs...");
1974 sObjectMgr->LoadFactionChangeTitles();
1975
1976 LOG_INFO("server.loading", "Loading Faction Change Quest Pairs...");
1977 sObjectMgr->LoadFactionChangeQuests();
1978
1979 LOG_INFO("server.loading", "Loading GM Tickets...");
1980 sTicketMgr->LoadTickets();
1981
1982 LOG_INFO("server.loading", "Loading GM Surveys...");
1983 sTicketMgr->LoadSurveys();
1984
1985 LOG_INFO("server.loading", "Loading Client Addons...");
1987
1988 // pussywizard:
1989 LOG_INFO("server.loading", "Deleting Invalid Mail Items...");
1990 LOG_INFO("server.loading", " ");
1991 CharacterDatabase.Execute("DELETE mi FROM mail_items mi LEFT JOIN item_instance ii ON mi.item_guid = ii.guid WHERE ii.guid IS NULL");
1992 CharacterDatabase.Execute("DELETE mi FROM mail_items mi LEFT JOIN mail m ON mi.mail_id = m.id WHERE m.id IS NULL");
1993 CharacterDatabase.Execute("UPDATE mail m LEFT JOIN mail_items mi ON m.id = mi.mail_id SET m.has_items=0 WHERE m.has_items<>0 AND mi.mail_id IS NULL");
1994
1996 LOG_INFO("server.loading", "Returning Old Mails...");
1997 LOG_INFO("server.loading", " ");
1998 sObjectMgr->ReturnOrDeleteOldMails(false);
1999
2001 LOG_INFO("server.loading", "Loading Autobroadcasts...");
2002 sAutobroadcastMgr->LoadAutobroadcasts();
2003
2005 LOG_INFO("server.loading", "Loading Motd...");
2006 sMotdMgr->LoadMotd();
2007
2009 sObjectMgr->LoadSpellScripts(); // must be after load Creature/Gameobject(Template/Data)
2010 sObjectMgr->LoadEventScripts(); // must be after load Creature/Gameobject(Template/Data)
2011 sObjectMgr->LoadWaypointScripts();
2012
2013 LOG_INFO("server.loading", "Loading Spell Script Names...");
2014 sObjectMgr->LoadSpellScriptNames();
2015
2016 LOG_INFO("server.loading", "Loading Creature Texts...");
2017 sCreatureTextMgr->LoadCreatureTexts();
2018
2019 LOG_INFO("server.loading", "Loading Creature Text Locales...");
2020 sCreatureTextMgr->LoadCreatureTextLocales();
2021
2022 LOG_INFO("server.loading", "Loading Scripts...");
2023 sScriptMgr->LoadDatabase();
2024
2025 LOG_INFO("server.loading", "Validating Spell Scripts...");
2026 sObjectMgr->ValidateSpellScripts();
2027
2028 LOG_INFO("server.loading", "Loading SmartAI Scripts...");
2029 sSmartScriptMgr->LoadSmartAIFromDB();
2030
2031 LOG_INFO("server.loading", "Loading Calendar Data...");
2032 sCalendarMgr->LoadFromDB();
2033
2034 LOG_INFO("server.loading", "Initializing SpellInfo Precomputed Data..."); // must be called after loading items, professions, spells and pretty much anything
2035 LOG_INFO("server.loading", " ");
2036 sObjectMgr->InitializeSpellInfoPrecomputedData();
2037
2038 LOG_INFO("server.loading", "Initialize Commands...");
2040
2042 LOG_INFO("server.loading", "Initialize Game Time and Timers");
2043 LOG_INFO("server.loading", " ");
2044
2045 LoginDatabase.Execute("INSERT INTO uptime (realmid, starttime, uptime, revision) VALUES ({}, {}, 0, '{}')",
2046 realm.Id.Realm, uint32(GameTime::GetStartTime().count()), GitRevision::GetFullVersion()); // One-time query
2047
2052 //Update "uptime" table based on configuration entry in minutes.
2053
2055 //erase corpses every 20 minutes
2057 // clean logs table every 14 days by default
2059
2061
2062 // our speed up
2064
2065 _timers[WUPDATE_WHO_LIST].SetInterval(5 * IN_MILLISECONDS); // update who list cache every 5 seconds
2066
2068
2070 LOG_INFO("server.loading", "Starting Map System");
2071 LOG_INFO("server.loading", " ");
2072 sMapMgr->Initialize();
2073
2074 LOG_INFO("server.loading", "Starting Game Event system...");
2075 LOG_INFO("server.loading", " ");
2076 uint32 nextGameEvent = sGameEventMgr->StartSystem();
2077 _timers[WUPDATE_EVENTS].SetInterval(nextGameEvent); //depend on next event
2078
2079 // Delete all characters which have been deleted X days before
2081
2082 // Delete all custom channels which haven't been used for PreserveCustomChannelDuration days.
2084
2085 LOG_INFO("server.loading", "Initializing Opcodes...");
2087
2088 LOG_INFO("server.loading", "Starting Arena Season...");
2089 LOG_INFO("server.loading", " ");
2090 sGameEventMgr->StartArenaSeason();
2091
2092 sTicketMgr->Initialize();
2093
2095 LOG_INFO("server.loading", "Starting Battleground System");
2096 sBattlegroundMgr->LoadBattlegroundTemplates();
2097 sBattlegroundMgr->InitAutomaticArenaPointDistribution();
2098
2100 LOG_INFO("server.loading", "Starting Outdoor PvP System");
2101 sOutdoorPvPMgr->InitOutdoorPvP();
2102
2104 LOG_INFO("server.loading", "Starting Battlefield System");
2105 sBattlefieldMgr->InitBattlefield();
2106
2107 LOG_INFO("server.loading", "Loading Transports...");
2108 sTransportMgr->SpawnContinentTransports();
2109
2111 LOG_INFO("server.loading", "Loading Warden Checks..." );
2112 sWardenCheckMgr->LoadWardenChecks();
2113
2114 LOG_INFO("server.loading", "Loading Warden Action Overrides..." );
2115 sWardenCheckMgr->LoadWardenOverrides();
2116
2117 LOG_INFO("server.loading", "Deleting Expired Bans...");
2118 LoginDatabase.Execute("DELETE FROM ip_banned WHERE unbandate <= UNIX_TIMESTAMP() AND unbandate<>bandate"); // One-time query
2119
2120 LOG_INFO("server.loading", "Calculate Next Daily Quest Reset Time...");
2122
2123 LOG_INFO("server.loading", "Calculate Next Weekly Quest Reset Time..." );
2125
2126 LOG_INFO("server.loading", "Calculate Next Monthly Quest Reset Time...");
2128
2129 LOG_INFO("server.loading", "Calculate Random Battleground Reset Time..." );
2131
2132 LOG_INFO("server.loading", "Calculate Deletion Of Old Calendar Events Time...");
2134
2135 LOG_INFO("server.loading", "Calculate Guild Cap Reset Time...");
2136 LOG_INFO("server.loading", " ");
2138
2139 LOG_INFO("server.loading", "Load Petitions...");
2140 sPetitionMgr->LoadPetitions();
2141
2142 LOG_INFO("server.loading", "Load Petition Signs...");
2143 sPetitionMgr->LoadSignatures();
2144
2145 LOG_INFO("server.loading", "Load Stored Loot Items...");
2146 sLootItemStorage->LoadStorageFromDB();
2147
2148 LOG_INFO("server.loading", "Load Channel Rights...");
2150
2151 LOG_INFO("server.loading", "Load Channels...");
2153
2154 sScriptMgr->OnBeforeWorldInitialized();
2155
2157 {
2158 LOG_INFO("server.loading", "Loading All Grids For All Non-Instanced Maps...");
2159
2160 for (uint32 i = 0; i < sMapStore.GetNumRows(); ++i)
2161 {
2162 MapEntry const* mapEntry = sMapStore.LookupEntry(i);
2163
2164 if (mapEntry && !mapEntry->Instanceable())
2165 {
2166 Map* map = sMapMgr->CreateBaseMap(mapEntry->MapID);
2167
2168 if (map)
2169 {
2170 LOG_INFO("server.loading", ">> Loading All Grids For Map {}", map->GetId());
2171 map->LoadAllCells();
2172 }
2173 }
2174 }
2175 }
2176
2177 uint32 startupDuration = GetMSTimeDiffToNow(startupBegin);
2178
2179 LOG_INFO("server.loading", " ");
2180 LOG_INFO("server.loading", "WORLD: World Initialized In {} Minutes {} Seconds", (startupDuration / 60000), ((startupDuration % 60000) / 1000)); // outError for red color in console
2181 LOG_INFO("server.loading", " ");
2182
2183 METRIC_EVENT("events", "World initialized", "World Initialized In " + std::to_string(startupDuration / 60000) + " Minutes " + std::to_string((startupDuration % 60000) / 1000) + " Seconds");
2184
2185 if (sConfigMgr->isDryRun())
2186 {
2187 sMapMgr->UnloadAll();
2188 LOG_INFO("server.loading", "AzerothCore Dry Run Completed, Terminating.");
2189 exit(0);
2190 }
2191}
void dtCustomFree(void *ptr)
Definition: MMapMgr.h:35
void * dtCustomAlloc(size_t size, dtAllocHint)
Definition: MMapMgr.h:30
void LoadGameObjectModelList(std::string const &dataPath)
Definition: GameObjectModel.cpp:45
#define sIPLocation
Definition: IPLocation.h:49
#define METRIC_EVENT(category, title, description)
Definition: Metric.h:187
#define sAchievementMgr
Definition: AchievementMgr.h:423
#define sSmartWaypointMgr
Definition: SmartScriptMgr.h:2149
#define sSmartScriptMgr
Definition: SmartScriptMgr.h:2148
#define sAuctionMgr
Definition: AuctionHouseMgr.h:227
#define sAutobroadcastMgr
Definition: AutobroadcastMgr.h:52
#define sBattlefieldMgr
Definition: BattlefieldMgr.h:77
#define sArenaTeamMgr
Definition: ArenaTeamMgr.h:67
#define sBattlegroundMgr
Definition: BattlegroundMgr.h:188
#define sCharacterCache
Definition: CharacterCache.h:83
#define sConditionMgr
Definition: ConditionMgr.h:289
uint32 GetLiquidFlags(uint32 liquidType)
Definition: DBCStores.cpp:830
DBCStorage< MapEntry > sMapStore(MapEntryfmt)
void LoadDBCStores(const std::string &dataPath)
Definition: DBCStores.cpp:260
void LoadM2Cameras(std::string const &dataPath)
Definition: M2Stores.cpp:174
#define sLFGMgr
Definition: LFGMgr.h:641
#define sFormationMgr
Definition: CreatureGroups.h:126
void LoadRandomEnchantmentsTable()
Definition: ItemEnchantmentMgr.cpp:44
#define sObjectMgr
Definition: ObjectMgr.h:1640
#define sGroupMgr
Definition: GroupMgr.h:51
#define sInstanceSaveMgr
Definition: InstanceSaveMgr.h:202
#define sLootItemStorage
Definition: LootItemStorage.h:75
void LoadLootTables()
Definition: LootMgr.h:443
#define sTransportMgr
Definition: TransportMgr.h:163
#define sGraveyard
Definition: GameGraveyard.h:75
#define sMotdMgr
Definition: MotdMgr.h:44
#define sWaypointMgr
Definition: WaypointMgr.h:78
#define sOutdoorPvPMgr
Definition: OutdoorPvPMgr.h:103
#define sPetitionMgr
Definition: PetitionMgr.h:88
void LoadSkillDiscoveryTable()
Definition: SkillDiscovery.cpp:46
void LoadSkillPerfectItemTable()
Definition: SkillExtraItems.cpp:52
void LoadSkillExtraItemTable()
Definition: SkillExtraItems.cpp:138
#define sSpellMgr
Definition: SpellMgr.h:825
#define sCreatureTextMgr
Definition: CreatureTextMgr.h:119
#define sTicketMgr
Definition: TicketMgr.h:258
#define sWardenCheckMgr
Definition: WardenCheckMgr.h:89
OpcodeTable opcodeTable
Definition: Opcodes.cpp:51
void Initialize()
Correspondence between opcodes and their names.
Definition: Opcodes.cpp:123
void LoadWeatherData()
Definition: WeatherMgr.cpp:83
@ WUPDATE_PINGDB
Definition: World.h:70
@ WUPDATE_WHO_LIST
Definition: World.h:72
@ WUPDATE_WEATHERS
Definition: World.h:63
@ WUPDATE_AUCTIONS
Definition: World.h:62
AC_COMMON_API char const * GetFullVersion()
Definition: GitRevision.cpp:82
void LoadFromDB()
Definition: AddonMgr.cpp:38
void Initialize()
Definition: CreatureAIRegistry.cpp:34
AC_GAME_API void LoadCommandMap()
Definition: ChatCommand.cpp:533
void CheckQuestDisables()
Definition: DisableMgr.cpp:275
bool IsVMAPDisabledFor(uint32 entry, uint8 flags)
Definition: DisableMgr.cpp:406
void LoadDisables()
Definition: DisableMgr.cpp:50
Seconds GetStartTime()
Definition: GameTime.cpp:33
void CleanDatabase()
Definition: CharacterDatabaseCleaner.cpp:26
static MMapMgr * createOrGetMMapMgr()
Definition: MMapFactory.cpp:29
Definition: MMapMgr.h:75
void InitializeThreadUnsafe(const std::vector< uint32 > &mapIds)
Definition: MMapMgr.cpp:41
Definition: VMapMgr2.h:77
IsVMAPDisabledForFn IsVMAPDisabledForPtr
Definition: VMapMgr2.h:138
void InitializeThreadUnsafe(const std::vector< uint32 > &mapIds)
Definition: VMapMgr2.cpp:54
GetLiquidFlagsFn GetLiquidFlagsPtr
Definition: VMapMgr2.h:135
static void CleanOldChannelsInDB()
Definition: Channel.cpp:140
static void LoadChannelRights()
Definition: ChannelMgr.cpp:166
static void LoadChannels()
Definition: ChannelMgr.cpp:50
static void DeleteOldCharacters()
Definition: Player.cpp:4277
Definition: Map.h:313
uint32 GetId() const
Definition: Map.h:379
void LoadAllCells()
Definition: Map.cpp:497
static bool ExistMapAndVMap(uint32 mapid, float x, float y)
Definition: MapMgr.cpp:299
static void InitializeTables()
Definition: PlayerDump.cpp:253
bool IsFFAPvPRealm() const override
Definition: World.cpp:3264
void LoadConfigSettings(bool reload=false) override
Initialize config values.
Definition: World.cpp:415
void LoadWorldStates() override
Definition: World.cpp:3198
void InitCalendarOldEventsDeletionTime()
Definition: World.cpp:3031
void InitDailyQuestResetTime()
Definition: World.cpp:2998
void LoadDBAllowedSecurityLevel() override
Definition: World.cpp:3069
void DetectDBCLang()
Definition: World.cpp:2193
void InitGuildResetTime()
Definition: World.cpp:3042
void InitRandomBGResetTime()
Definition: World.cpp:3020
void InitWeeklyQuestResetTime()
Definition: World.cpp:2987
void InitMonthlyQuestResetTime()
Definition: World.cpp:3009
Definition: DBCStructure.h:1323
uint32 MapID
Definition: DBCStructure.h:1324
bool Instanceable() const
Definition: DBCStructure.h:1351

References _dataPath, _int_configs, _mail_expire_check_timer, _timers, CharacterDatabase, DisableMgr::CheckQuestDisables(), CharacterDatabaseCleaner::CleanDatabase(), Channel::CleanOldChannelsInDB(), CONFIG_AUTOBROADCAST_INTERVAL, CONFIG_DB_PING_INTERVAL, CONFIG_EXPANSION, CONFIG_GAME_TYPE, CONFIG_LOGDB_CLEARINTERVAL, CONFIG_PRELOAD_ALL_NON_INSTANCED_MAP_GRIDS, CONFIG_REALM_ZONE, CONFIG_UPTIME_UPDATE, MMAP::MMapFactory::createOrGetMMapMgr(), VMAP::VMapFactory::createOrGetVMapMgr(), Player::DeleteOldCharacters(), DetectDBCLang(), dtCustomAlloc(), dtCustomFree(), MapMgr::ExistMapAndVMap(), GetDefaultDbcLocale(), GitRevision::GetFullVersion(), GameTime::GetGameTime(), Map::GetId(), getIntConfig(), GetLiquidFlags(), VMAP::VMapMgr2::GetLiquidFlagsPtr, getMSTime(), GetMSTimeDiffToNow(), GameTime::GetStartTime(), Realm::Id, IN_MILLISECONDS, InitCalendarOldEventsDeletionTime(), InitDailyQuestResetTime(), InitGuildResetTime(), AIRegistry::Initialize(), OpcodeTable::Initialize(), PlayerDump::InitializeTables(), MMAP::MMapMgr::InitializeThreadUnsafe(), VMAP::VMapMgr2::InitializeThreadUnsafe(), InitMonthlyQuestResetTime(), InitRandomBGResetTime(), InitWeeklyQuestResetTime(), MapEntry::Instanceable(), IsFFAPvPRealm(), DisableMgr::IsVMAPDisabledFor(), VMAP::VMapMgr2::IsVMAPDisabledForPtr, Map::LoadAllCells(), ChannelMgr::LoadChannelRights(), ChannelMgr::LoadChannels(), Acore::ChatCommands::LoadCommandMap(), LoadConfigSettings(), LoadDBAllowedSecurityLevel(), LoadDBCStores(), DisableMgr::LoadDisables(), AddonMgr::LoadFromDB(), LoadGameObjectModelList(), LoadLootTables(), LoadM2Cameras(), LoadRandomEnchantmentsTable(), LoadSkillDiscoveryTable(), LoadSkillExtraItemTable(), LoadSkillPerfectItemTable(), WeatherMgr::LoadWeatherData(), LoadWorldStates(), LOG_INFO, LoginDatabase, MapEntry::MapID, METRIC_EVENT, MINUTE, opcodeTable, realm, RealmHandle::Realm, REALM_TYPE_PVP, sAchievementMgr, sArenaTeamMgr, sAuctionMgr, sAutobroadcastMgr, sBattlefieldMgr, sBattlegroundMgr, sCalendarMgr, sCharacterCache, sConditionMgr, sConfigMgr, sCreatureTextMgr, IntervalTimer::SetCurrent(), IntervalTimer::SetInterval(), sFormationMgr, sGameEventMgr, sGraveyard, sGroupMgr, sGuildMgr, sInstanceSaveMgr, sIPLocation, sLFGMgr, sLootItemStorage, sMapMgr, sMapStore, sMotdMgr, sObjectMgr, sOutdoorPvPMgr, sPetitionMgr, sPoolMgr, sScriptMgr, sSmartScriptMgr, sSmartWaypointMgr, sSpellMgr, sTicketMgr, sTransportMgr, sWardenCheckMgr, sWaypointMgr, sWorld, WUPDATE_5_SECS, WUPDATE_AUCTIONS, WUPDATE_AUTOBROADCAST, WUPDATE_CLEANDB, WUPDATE_CORPSES, WUPDATE_EVENTS, WUPDATE_PINGDB, WUPDATE_UPTIME, WUPDATE_WEATHERS, and WUPDATE_WHO_LIST.

◆ setIntConfig()

void World::setIntConfig ( WorldIntConfigs  index,
uint32  value 
)
inlineoverridevirtual

Set a server configuration element (see #WorldConfigs)

Implements IWorld.

298 {
299 if (index < INT_CONFIG_VALUE_COUNT)
300 _int_configs[index] = value;
301 }

References _int_configs, and INT_CONFIG_VALUE_COUNT.

◆ SetNewCharString()

void World::SetNewCharString ( std::string const &  str)
inlineoverridevirtual

Set the string for new characters (first login)

Implements IWorld.

217{ _newCharString = str; }

References _newCharString.

Referenced by LoadConfigSettings().

◆ SetPlayerAmountLimit()

void World::SetPlayerAmountLimit ( uint32  limit)
inlineoverridevirtual

Active session server limit.

Implements IWorld.

200{ _playerLimit = limit; }

References _playerLimit.

Referenced by LoadConfigSettings().

◆ SetPlayerSecurityLimit()

void World::SetPlayerSecurityLimit ( AccountTypes  sec)
overridevirtual

Implements IWorld.

3080{
3081 AccountTypes sec = _sec < SEC_CONSOLE ? _sec : SEC_PLAYER;
3082 bool update = sec > _allowedSecurityLevel;
3084 if (update)
3086}
void KickAllLess(AccountTypes sec) override
Kick (and save) all players with security level less sec
Definition: World.cpp:2713

References _allowedSecurityLevel, KickAllLess(), SEC_CONSOLE, and SEC_PLAYER.

Referenced by LoadDBAllowedSecurityLevel().

◆ setRate()

void World::setRate ( Rates  rate,
float  value 
)
inlineoverridevirtual

Set a server rate (see Rates)

Implements IWorld.

266{ _rate_values[rate] = value; }

References _rate_values.

◆ SetRealmName()

void World::SetRealmName ( std::string  name)
inlineoverridevirtual

Implements IWorld.

348{ _realmName = name; } // pussywizard

References _realmName.

◆ setWorldState()

void World::setWorldState ( uint32  index,
uint64  value 
)
overridevirtual

Implements IWorld.

3223{
3224 auto const& it = _worldstates.find(index);
3225 if (it != _worldstates.end())
3226 {
3228 stmt->SetData(0, uint32(timeValue));
3229 stmt->SetData(1, index);
3230 CharacterDatabase.Execute(stmt);
3231 }
3232 else
3233 {
3235 stmt->SetData(0, index);
3236 stmt->SetData(1, uint32(timeValue));
3237 CharacterDatabase.Execute(stmt);
3238 }
3239
3240 _worldstates[index] = timeValue;
3241}
@ CHAR_INS_WORLDSTATE
Definition: CharacterDatabase.h:305
@ CHAR_UPD_WORLDSTATE
Definition: CharacterDatabase.h:304

References _worldstates, CHAR_INS_WORLDSTATE, CHAR_UPD_WORLDSTATE, CharacterDatabase, and PreparedStatementBase::SetData().

◆ ShutdownCancel()

void World::ShutdownCancel ( )
overridevirtual

Cancel a planned server shutdown.

Implements IWorld.

2837{
2838 // nothing cancel or too later
2839 if (!_shutdownTimer || _stopEvent)
2840 return;
2841
2843
2844 _shutdownMask = 0;
2845 _shutdownTimer = 0;
2846 _exitCode = SHUTDOWN_EXIT_CODE; // to default value
2847 SendServerMessage(msgid);
2848
2849 LOG_DEBUG("server.worldserver", "Server {} cancelled.", (_shutdownMask & SHUTDOWN_MASK_RESTART ? "restart" : "shuttingdown"));
2850
2851 sScriptMgr->OnShutdownCancel();
2852}
ServerMessageType
Definition: IWorld.h:60
@ SERVER_MSG_SHUTDOWN_CANCELLED
Definition: IWorld.h:64
@ SERVER_MSG_RESTART_CANCELLED
Definition: IWorld.h:65
@ SHUTDOWN_EXIT_CODE
Definition: World.h:54
@ SHUTDOWN_MASK_RESTART
Definition: World.h:48
void SendServerMessage(ServerMessageType messageID, std::string stringParam="", Player *player=nullptr) override
Send a server message to the user(s)
Definition: World.cpp:2855

References _exitCode, _shutdownMask, _shutdownTimer, _stopEvent, LOG_DEBUG, SendServerMessage(), SERVER_MSG_RESTART_CANCELLED, SERVER_MSG_SHUTDOWN_CANCELLED, SHUTDOWN_EXIT_CODE, SHUTDOWN_MASK_RESTART, and sScriptMgr.

◆ ShutdownMsg()

void World::ShutdownMsg ( bool  show = false,
Player player = nullptr,
const std::string &  reason = std::string() 
)
overridevirtual

Display a shutdown message to the user(s)

  • Display a message every 12 hours, hours, 5 minutes, minute, 5 seconds and finally seconds

Implements IWorld.

2808{
2809 // not show messages for idle shutdown mode
2811 return;
2812
2814 if (show ||
2815 (_shutdownTimer < 5 * MINUTE && (_shutdownTimer % 15) == 0) || // < 5 min; every 15 sec
2816 (_shutdownTimer < 15 * MINUTE && (_shutdownTimer % MINUTE) == 0) || // < 15 min ; every 1 min
2817 (_shutdownTimer < 30 * MINUTE && (_shutdownTimer % (5 * MINUTE)) == 0) || // < 30 min ; every 5 min
2818 (_shutdownTimer < 12 * HOUR && (_shutdownTimer % HOUR) == 0) || // < 12 h ; every 1 h
2819 (_shutdownTimer > 12 * HOUR && (_shutdownTimer % (12 * HOUR)) == 0)) // > 12 h ; every 12 h
2820 {
2821 std::string str = secsToTimeString(_shutdownTimer).append(".");
2822
2823 if (!reason.empty())
2824 {
2825 str += " - " + reason;
2826 }
2827
2829
2830 SendServerMessage(msgid, str, player);
2831 LOG_DEBUG("server.worldserver", "Server is {} in {}", (_shutdownMask & SHUTDOWN_MASK_RESTART ? "restart" : "shuttingdown"), str);
2832 }
2833}
std::string secsToTimeString(uint64 timeInSecs, bool shortText)
Definition: Util.cpp:73
@ SERVER_MSG_SHUTDOWN_TIME
Definition: IWorld.h:61
@ SERVER_MSG_RESTART_TIME
Definition: IWorld.h:62

References _shutdownMask, _shutdownTimer, HOUR, LOG_DEBUG, MINUTE, secsToTimeString(), SendServerMessage(), SERVER_MSG_RESTART_TIME, SERVER_MSG_SHUTDOWN_TIME, SHUTDOWN_MASK_IDLE, and SHUTDOWN_MASK_RESTART.

Referenced by _UpdateGameTime(), and ShutdownServ().

◆ ShutdownServ()

void World::ShutdownServ ( uint32  time,
uint32  options,
uint8  exitcode,
const std::string &  reason = std::string() 
)
overridevirtual

Shutdown the server.

  • If the shutdown time is 0, set m_stopEvent (except if shutdown is 'idle' with remaining sessions)
  • Else set the shutdown timer and warn users

Implements IWorld.

2753{
2754 // ignore if server shutdown at next tick
2755 if (IsStopped())
2756 return;
2757
2758 _shutdownMask = options;
2759 _exitCode = exitcode;
2760
2761 auto const& playersOnline = GetActiveSessionCount();
2762
2763 if (time < 5 && playersOnline)
2764 {
2765 // Set time to 5s for save all players
2766 time = 5;
2767 }
2768
2770
2771 if (time >= 5)
2772 {
2773 playersSaveScheduler.Schedule(Seconds(time - 5), [this](TaskContext /*context*/)
2774 {
2775 if (!GetActiveSessionCount())
2776 {
2777 LOG_INFO("server", "> No players online. Skip save before shutdown");
2778 return;
2779 }
2780
2781 LOG_INFO("server", "> Save players before shutdown server");
2783 });
2784 }
2785
2786 LOG_WARN("server", "Time left until shutdown/restart: {}", time);
2787
2789 if (time == 0)
2790 {
2791 if (!(options & SHUTDOWN_MASK_IDLE) || GetActiveAndQueuedSessionCount() == 0)
2792 _stopEvent = true; // exist code already set
2793 else
2794 _shutdownTimer = 1; //So that the session count is re-evaluated at next world tick
2795 }
2797 else
2798 {
2799 _shutdownTimer = time;
2800 ShutdownMsg(true, nullptr, reason);
2801 }
2802
2803 sScriptMgr->OnShutdownInitiate(ShutdownExitCode(exitcode), ShutdownMask(options));
2804}
ShutdownExitCode
Definition: World.h:53
ShutdownMask
Definition: World.h:47
void SaveAllPlayers()
Definition: ObjectAccessor.cpp:265
TaskScheduler playersSaveScheduler
Definition: World.cpp:101
TaskScheduler & CancelAll()
Definition: TaskScheduler.cpp:45
TaskScheduler & Schedule(std::chrono::duration< _Rep, _Period > const &time, task_handler_t const &task)
Definition: TaskScheduler.h:232
Definition: TaskScheduler.h:418

References _exitCode, _shutdownMask, _shutdownTimer, _stopEvent, TaskScheduler::CancelAll(), GetActiveAndQueuedSessionCount(), GetActiveSessionCount(), IsStopped(), LOG_INFO, LOG_WARN, ObjectAccessor::SaveAllPlayers(), TaskScheduler::Schedule(), SHUTDOWN_MASK_IDLE, ShutdownMsg(), and sScriptMgr.

◆ StopNow()

◆ Update()

void World::Update ( uint32  diff)
overridevirtual

Update the World !

  • Update the game time and check for shutdown time
  • Update the different timers
  • Update Who List Cache

Handle daily quests reset time

Handle weekly quests reset time

Handle monthly quests reset time

Handle weather updates when the timer has passed

Clean logs table

  • Update objects when the timer has passed (maps, transport, creatures, ...)

Update uptime table

  • Erase corpses once every 20 minutes
  • Process Game events when necessary
  • Ping to keep MySQL connections alive

Implements IWorld.

2238{
2239 METRIC_TIMER("world_update_time_total");
2240
2243 Seconds currentGameTime = GameTime::GetGameTime();
2244
2246
2247 // Record update if recording set in log and diff is greater then minimum set in log
2249
2251
2253 for (int i = 0; i < WUPDATE_COUNT; ++i)
2254 {
2255 if (_timers[i].GetCurrent() >= 0)
2256 _timers[i].Update(diff);
2257 else
2258 _timers[i].SetCurrent(0);
2259 }
2260
2261 // pussywizard: our speed up and functionality
2262 if (_timers[WUPDATE_5_SECS].Passed())
2263 {
2265
2266 // moved here from HandleCharEnumOpcode
2268 CharacterDatabase.Execute(stmt);
2269 }
2270
2272 if (_timers[WUPDATE_WHO_LIST].Passed())
2273 {
2274 METRIC_TIMER("world_update_time", METRIC_TAG("type", "Update who list"));
2276 sWhoListCacheMgr->Update();
2277 }
2278
2279 {
2280 METRIC_TIMER("world_update_time", METRIC_TAG("type", "Check quest reset times"));
2281
2283 if (currentGameTime > _nextDailyQuestReset)
2284 {
2286 }
2287
2289 if (currentGameTime > _nextWeeklyQuestReset)
2290 {
2292 }
2293
2295 if (currentGameTime > _nextMonthlyQuestReset)
2296 {
2298 }
2299 }
2300
2301 if (currentGameTime > _nextRandomBGReset)
2302 {
2303 METRIC_TIMER("world_update_time", METRIC_TAG("type", "Reset random BG"));
2304 ResetRandomBG();
2305 }
2306
2307 if (currentGameTime > _nextCalendarOldEventsDeletionTime)
2308 {
2309 METRIC_TIMER("world_update_time", METRIC_TAG("type", "Delete old calendar events"));
2311 }
2312
2313 if (currentGameTime > _nextGuildReset)
2314 {
2315 METRIC_TIMER("world_update_time", METRIC_TAG("type", "Reset guild cap"));
2316 ResetGuildCap();
2317 }
2318
2319 // pussywizard: handle auctions when the timer has passed
2320 if (_timers[WUPDATE_AUCTIONS].Passed())
2321 {
2322 METRIC_TIMER("world_update_time", METRIC_TAG("type", "Update expired auctions"));
2323
2325
2326 // pussywizard: handle expired auctions, auctions expired when realm was offline are also handled here (not during loading when many required things aren't loaded yet)
2327 sAuctionMgr->Update();
2328 }
2329
2331
2332 if (currentGameTime > _mail_expire_check_timer)
2333 {
2334 sObjectMgr->ReturnOrDeleteOldMails(true);
2335 _mail_expire_check_timer = currentGameTime + 6h;
2336 }
2337
2338 METRIC_TIMER("world_update_time", METRIC_TAG("type", "Update sessions"));
2339 UpdateSessions(diff);
2340
2342 if (_timers[WUPDATE_WEATHERS].Passed())
2343 {
2346 }
2347
2349 if (sWorld->getIntConfig(CONFIG_LOGDB_CLEARTIME) > 0) // if not enabled, ignore the timer
2350 {
2351 if (_timers[WUPDATE_CLEANDB].Passed())
2352 {
2353 METRIC_TIMER("world_update_time", METRIC_TAG("type", "Clean logs table"));
2354
2356
2358 stmt->SetData(0, sWorld->getIntConfig(CONFIG_LOGDB_CLEARTIME));
2359 stmt->SetData(1, uint32(currentGameTime.count()));
2360 LoginDatabase.Execute(stmt);
2361 }
2362 }
2363
2364 {
2365 METRIC_TIMER("world_update_time", METRIC_TAG("type", "Update LFG 0"));
2366 sLFGMgr->Update(diff, 0); // pussywizard: remove obsolete stuff before finding compatibility during map update
2367 }
2368
2369 {
2371 METRIC_TIMER("world_update_time", METRIC_TAG("type", "Update maps"));
2372 sMapMgr->Update(diff);
2373 }
2374
2375 if (sWorld->getBoolConfig(CONFIG_AUTOBROADCAST))
2376 {
2377 if (_timers[WUPDATE_AUTOBROADCAST].Passed())
2378 {
2379 METRIC_TIMER("world_update_time", METRIC_TAG("type", "Send autobroadcast"));
2381 sAutobroadcastMgr->SendAutobroadcasts();
2382 }
2383 }
2384
2385 {
2386 METRIC_TIMER("world_update_time", METRIC_TAG("type", "Update battlegrounds"));
2387 sBattlegroundMgr->Update(diff);
2388 }
2389
2390 {
2391 METRIC_TIMER("world_update_time", METRIC_TAG("type", "Update outdoor pvp"));
2392 sOutdoorPvPMgr->Update(diff);
2393 }
2394
2395 {
2396 METRIC_TIMER("world_update_time", METRIC_TAG("type", "Update battlefields"));
2397 sBattlefieldMgr->Update(diff);
2398 }
2399
2400 {
2401 METRIC_TIMER("world_update_time", METRIC_TAG("type", "Update LFG 2"));
2402 sLFGMgr->Update(diff, 2); // pussywizard: handle created proposals
2403 }
2404
2405 {
2406 METRIC_TIMER("world_update_time", METRIC_TAG("type", "Process query callbacks"));
2407 // execute callbacks from sql queries that were queued recently
2409 }
2410
2412 if (_timers[WUPDATE_UPTIME].Passed())
2413 {
2414 METRIC_TIMER("world_update_time", METRIC_TAG("type", "Update uptime"));
2415
2417
2419 stmt->SetData(0, uint32(GameTime::GetUptime().count()));
2420 stmt->SetData(1, uint16(GetMaxPlayerCount()));
2421 stmt->SetData(2, realm.Id.Realm);
2422 stmt->SetData(3, uint32(GameTime::GetStartTime().count()));
2423 LoginDatabase.Execute(stmt);
2424 }
2425
2427 if (_timers[WUPDATE_CORPSES].Passed())
2428 {
2429 METRIC_TIMER("world_update_time", METRIC_TAG("type", "Remove old corpses"));
2431
2432 sMapMgr->DoForAllMaps([](Map* map)
2433 {
2434 map->RemoveOldCorpses();
2435 });
2436 }
2437
2439 if (_timers[WUPDATE_EVENTS].Passed())
2440 {
2441 METRIC_TIMER("world_update_time", METRIC_TAG("type", "Update game events"));
2442 _timers[WUPDATE_EVENTS].Reset(); // to give time for Update() to be processed
2443 uint32 nextGameEvent = sGameEventMgr->Update();
2444 _timers[WUPDATE_EVENTS].SetInterval(nextGameEvent);
2446 }
2447
2449 if (_timers[WUPDATE_PINGDB].Passed())
2450 {
2451 METRIC_TIMER("world_update_time", METRIC_TAG("type", "Ping MySQL"));
2453 LOG_DEBUG("sql.driver", "Ping MySQL to keep connection alive");
2454 CharacterDatabase.KeepAlive();
2455 LoginDatabase.KeepAlive();
2456 WorldDatabase.KeepAlive();
2457 }
2458
2459 {
2460 METRIC_TIMER("world_update_time", METRIC_TAG("type", "Update instance reset times"));
2461 // update the instance reset times
2462 sInstanceSaveMgr->Update();
2463 }
2464
2465 {
2466 METRIC_TIMER("world_update_time", METRIC_TAG("type", "Process cli commands"));
2467 // And last, but not least handle the issued cli commands
2469 }
2470
2471 {
2472 METRIC_TIMER("world_update_time", METRIC_TAG("type", "Update world scripts"));
2473 sScriptMgr->OnWorldUpdate(diff);
2474 }
2475
2476 {
2477 METRIC_TIMER("world_update_time", METRIC_TAG("type", "Update playersSaveScheduler"));
2479 }
2480
2481 {
2482 METRIC_TIMER("world_update_time", METRIC_TAG("type", "Update metrics"));
2483 // Stats logger update
2484 sMetric->Update();
2485 METRIC_VALUE("update_time_diff", diff);
2486 }
2487}
#define METRIC_VALUE(category, value,...)
Definition: Metric.h:195
#define METRIC_TAG(name, value)
Definition: Metric.h:161
#define METRIC_TIMER(category,...)
Definition: Metric.h:204
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
Definition: Duration.h:27
@ CHAR_DEL_EXPIRED_BANS
Definition: CharacterDatabase.h:34
@ LOGIN_UPD_UPTIME_PLAYERS
Definition: LoginDatabase.h:76
@ LOGIN_DEL_OLD_LOGS
Definition: LoginDatabase.h:77
#define sWhoListCacheMgr
Definition: WhoListCacheMgr.h:96
void Update(uint32 diff)
Definition: WeatherMgr.cpp:151
@ WUPDATE_COUNT
Definition: World.h:73
Milliseconds GetGameTimeMS()
Definition: GameTime.cpp:43
Seconds GetUptime()
Uptime.
Definition: GameTime.cpp:58
TaskScheduler & Update(success_t const &callback=EmptyCallback)
Definition: TaskScheduler.cpp:27
void Update(time_t diff)
Definition: Timer.h:152
void RemoveOldCorpses()
Definition: Map.cpp:3674
static void Update(Milliseconds diff)
Definition: AsyncAuctionListing.h:68
static void Update(uint32 sessionCount)
Definition: DynamicVisibility.cpp:22
void UpdateWithDiff(uint32 diff)
Definition: UpdateTime.cpp:74
void RecordUpdateTime(Milliseconds gameTimeMs, uint32 diff, uint32 sessionCount)
Definition: UpdateTime.cpp:114
void ProcessCliCommands() override
Definition: World.cpp:2942
void _UpdateGameTime()
Update the game time.
Definition: World.cpp:2722
uint32 GetMaxPlayerCount() const override
Definition: World.h:176
void ResetMonthlyQuests()
Definition: World.cpp:3104
void ResetGuildCap()
Definition: World.cpp:3154
void ResetWeeklyQuests()
Definition: World.cpp:3088
void ResetRandomBG()
Definition: World.cpp:3130
void UpdateSessions(uint32 diff) override
Definition: World.cpp:2868
void ResetDailyQuests()
Definition: World.cpp:3053
void CalendarDeleteOldEvents()
Definition: World.cpp:3145
void ProcessQueryCallbacks()
Definition: World.cpp:3249

References _mail_expire_check_timer, _nextCalendarOldEventsDeletionTime, _nextDailyQuestReset, _nextGuildReset, _nextMonthlyQuestReset, _nextRandomBGReset, _nextWeeklyQuestReset, _timers, _UpdateGameTime(), CalendarDeleteOldEvents(), CHAR_DEL_EXPIRED_BANS, CharacterDatabase, CONFIG_AUTOBROADCAST, CONFIG_LOGDB_CLEARTIME, GetActiveSessionCount(), GameTime::GetGameTime(), GameTime::GetGameTimeMS(), GetMaxPlayerCount(), GameTime::GetStartTime(), GameTime::GetUptime(), Realm::Id, LOG_DEBUG, LOGIN_DEL_OLD_LOGS, LOGIN_UPD_UPTIME_PLAYERS, LoginDatabase, METRIC_TAG, METRIC_TIMER, METRIC_VALUE, ProcessCliCommands(), ProcessQueryCallbacks(), realm, RealmHandle::Realm, WorldUpdateTime::RecordUpdateTime(), Map::RemoveOldCorpses(), IntervalTimer::Reset(), ResetDailyQuests(), ResetGuildCap(), ResetMonthlyQuests(), ResetRandomBG(), ResetWeeklyQuests(), sAuctionMgr, sAutobroadcastMgr, sBattlefieldMgr, sBattlegroundMgr, IntervalTimer::SetCurrent(), PreparedStatementBase::SetData(), IntervalTimer::SetInterval(), sGameEventMgr, sInstanceSaveMgr, sLFGMgr, sMapMgr, sMetric, sObjectMgr, sOutdoorPvPMgr, sScriptMgr, sWhoListCacheMgr, sWorld, sWorldUpdateTime, AsyncAuctionListingMgr::Update(), TaskScheduler::Update(), IntervalTimer::Update(), WeatherMgr::Update(), DynamicVisibilityMgr::Update(), UpdateSessions(), UpdateTime::UpdateWithDiff(), WorldDatabase, WUPDATE_5_SECS, WUPDATE_AUCTIONS, WUPDATE_AUTOBROADCAST, WUPDATE_CLEANDB, WUPDATE_CORPSES, WUPDATE_COUNT, WUPDATE_EVENTS, WUPDATE_PINGDB, WUPDATE_UPTIME, WUPDATE_WEATHERS, and WUPDATE_WHO_LIST.

◆ UpdateAreaDependentAuras()

void World::UpdateAreaDependentAuras ( )
overridevirtual

Implements IWorld.

3188{
3189 SessionMap::const_iterator itr;
3190 for (itr = _sessions.begin(); itr != _sessions.end(); ++itr)
3191 if (itr->second && itr->second->GetPlayer() && itr->second->GetPlayer()->IsInWorld())
3192 {
3193 itr->second->GetPlayer()->UpdateAreaDependentAuras(itr->second->GetPlayer()->GetAreaId());
3194 itr->second->GetPlayer()->UpdateZoneDependentAuras(itr->second->GetPlayer()->GetZoneId());
3195 }
3196}

References _sessions.

◆ UpdateMaxSessionCounters()

void World::UpdateMaxSessionCounters ( )
overridevirtual

Get the number of current active sessions.

Implements IWorld.

References _maxActiveSessionCount, _maxQueuedSessionCount, _queuedPlayer, and _sessions.

Referenced by AddSession_().

◆ UpdateRealmCharCount()

void World::UpdateRealmCharCount ( uint32  accid)
overridevirtual

Implements IWorld.

2961{
2963 stmt->SetData(0, accountId);
2964 _queryProcessor.AddCallback(CharacterDatabase.AsyncQuery(stmt).WithPreparedCallback(std::bind(&World::_UpdateRealmCharCount, this, std::placeholders::_1)));
2965}
@ CHAR_SEL_CHARACTER_COUNT
Definition: CharacterDatabase.h:136
T & AddCallback(T &&query)
Definition: AsyncCallbackProcessor.h:35
void _UpdateRealmCharCount(PreparedQueryResult resultCharCount)
Definition: World.cpp:2967

References _queryProcessor, _UpdateRealmCharCount(), AsyncCallbackProcessor< T >::AddCallback(), CHAR_SEL_CHARACTER_COUNT, CharacterDatabase, and PreparedStatementBase::SetData().

◆ UpdateSessions()

void World::UpdateSessions ( uint32  diff)
overridevirtual
  • Add new sessions
  • Then send an update signal to remaining ones
  • and remove not active sessions from the list

Implements IWorld.

2869{
2870 {
2871 METRIC_DETAILED_NO_THRESHOLD_TIMER("world_update_time",
2872 METRIC_TAG("type", "Add sessions"),
2873 METRIC_TAG("parent_type", "Update sessions"));
2874
2876 WorldSession* sess = nullptr;
2877 while (_addSessQueue.next(sess))
2878 {
2879 AddSession_(sess);
2880 }
2881 }
2882
2884 for (SessionMap::iterator itr = _sessions.begin(), next; itr != _sessions.end(); itr = next)
2885 {
2886 next = itr;
2887 ++next;
2888
2890 WorldSession* pSession = itr->second;
2891 WorldSessionFilter updater(pSession);
2892
2893 // pussywizard:
2894 if (pSession->HandleSocketClosed())
2895 {
2897 _disconnects[pSession->GetAccountId()] = GameTime::GetGameTime().count();
2898 _sessions.erase(itr);
2899 // there should be no offline session if current one is logged onto a character
2900 SessionMap::iterator iter;
2901 if ((iter = _offlineSessions.find(pSession->GetAccountId())) != _offlineSessions.end())
2902 {
2903 WorldSession* tmp = iter->second;
2904 _offlineSessions.erase(iter);
2905 delete tmp;
2906 }
2907 pSession->SetOfflineTime(GameTime::GetGameTime().count());
2908 _offlineSessions[pSession->GetAccountId()] = pSession;
2909 continue;
2910 }
2911
2912 [[maybe_unused]] uint32 currentSessionId = itr->first;
2913 METRIC_DETAILED_TIMER("world_update_sessions_time", METRIC_TAG("account_id", std::to_string(currentSessionId)));
2914
2915 if (!pSession->Update(diff, updater))
2916 {
2918 _disconnects[pSession->GetAccountId()] = GameTime::GetGameTime().count();
2919 _sessions.erase(itr);
2920 delete pSession;
2921 }
2922 }
2923
2924 // pussywizard:
2925 if (_offlineSessions.empty())
2926 return;
2927 uint32 currTime = GameTime::GetGameTime().count();
2928 for (SessionMap::iterator itr = _offlineSessions.begin(), next; itr != _offlineSessions.end(); itr = next)
2929 {
2930 next = itr;
2931 ++next;
2932 WorldSession* pSession = itr->second;
2933 if (!pSession->GetPlayer() || pSession->GetOfflineTime() + 60 < currTime || pSession->IsKicked())
2934 {
2935 _offlineSessions.erase(itr);
2936 delete pSession;
2937 }
2938 }
2939}
#define METRIC_DETAILED_TIMER(category,...)
Definition: Metric.h:221
#define METRIC_DETAILED_NO_THRESHOLD_TIMER(category,...)
Definition: Metric.h:222
Definition: WorldSession.h:257
bool Update(uint32 diff, PacketFilter &updater)
Update the WorldSession (triggered by World update)
Definition: WorldSession.cpp:287
uint32 GetOfflineTime() const
Definition: WorldSession.h:1069
bool IsKicked() const
Definition: WorldSession.h:1070
void AddSession_(WorldSession *s)
Definition: World.cpp:263

References _addSessQueue, _disconnects, _offlineSessions, _sessions, AddSession_(), CONFIG_INTERVAL_DISCONNECT_TOLERANCE, WorldSession::GetAccountId(), GameTime::GetGameTime(), getIntConfig(), WorldSession::GetOfflineTime(), WorldSession::GetPlayer(), WorldSession::HandleSocketClosed(), WorldSession::IsKicked(), METRIC_DETAILED_NO_THRESHOLD_TIMER, METRIC_DETAILED_TIMER, METRIC_TAG, LockedQueue< T, StorageType >::next(), RemoveQueuedPlayer(), WorldSession::SetOfflineTime(), and WorldSession::Update().

Referenced by Update().

Member Data Documentation

◆ _addSessQueue

LockedQueue<WorldSession*> World::_addSessQueue
private

Referenced by AddSession(), and UpdateSessions().

◆ _allowedSecurityLevel

AccountTypes World::_allowedSecurityLevel
private

◆ _allowMovement

bool World::_allowMovement
private

◆ _availableDbcLocaleMask

uint32 World::_availableDbcLocaleMask
private

◆ _bool_configs

bool World::_bool_configs[BOOL_CONFIG_VALUE_COUNT]
private

◆ _cleaningFlags

uint32 World::_cleaningFlags
private

◆ _cliCmdQueue

LockedQueue<CliCommandHolder*> World::_cliCmdQueue
private

◆ _dataPath

std::string World::_dataPath
private

◆ _dbVersion

std::string World::_dbVersion
private

Referenced by GetDBVersion(), and LoadDBVersion().

◆ _defaultDbcLocale

LocaleConstant World::_defaultDbcLocale
private

◆ _disconnects

DisconnectMap World::_disconnects
private

◆ _exitCode

uint8 World::_exitCode = SHUTDOWN_EXIT_CODE
staticprivate

◆ _float_configs

float World::_float_configs[FLOAT_CONFIG_VALUE_COUNT]
private

◆ _int_configs

◆ _isClosed

bool World::_isClosed
private

Referenced by IsClosed(), SetClosed(), and World().

◆ _mail_expire_check_timer

Seconds World::_mail_expire_check_timer
private

◆ _maxActiveSessionCount

uint32 World::_maxActiveSessionCount
private

◆ _maxPlayerCount

uint32 World::_maxPlayerCount
private

◆ _maxQueuedSessionCount

uint32 World::_maxQueuedSessionCount
private

◆ _maxVisibleDistanceInBGArenas

float World::_maxVisibleDistanceInBGArenas = DEFAULT_VISIBILITY_BGARENAS
staticprivate

◆ _maxVisibleDistanceInInstances

float World::_maxVisibleDistanceInInstances = DEFAULT_VISIBILITY_INSTANCE
staticprivate

◆ _maxVisibleDistanceOnContinents

float World::_maxVisibleDistanceOnContinents = DEFAULT_VISIBILITY_DISTANCE
staticprivate

◆ _newCharString

std::string World::_newCharString
private

◆ _nextCalendarOldEventsDeletionTime

Seconds World::_nextCalendarOldEventsDeletionTime
private

◆ _nextDailyQuestReset

Seconds World::_nextDailyQuestReset
private

◆ _nextGuildReset

Seconds World::_nextGuildReset
private

◆ _nextMonthlyQuestReset

Seconds World::_nextMonthlyQuestReset
private

◆ _nextRandomBGReset

Seconds World::_nextRandomBGReset
private

◆ _nextWeeklyQuestReset

Seconds World::_nextWeeklyQuestReset
private

◆ _offlineSessions

◆ _playerCount

uint32 World::_playerCount
private

◆ _playerLimit

uint32 World::_playerLimit
private

◆ _queryProcessor

QueryCallbackProcessor World::_queryProcessor
private

◆ _queuedPlayer

◆ _rate_values

float World::_rate_values[MAX_RATES]
private

◆ _realmName

std::string World::_realmName
private

Referenced by GetRealmName(), and SetRealmName().

◆ _sessions

◆ _shutdownMask

uint32 World::_shutdownMask
private

◆ _shutdownTimer

◆ _stopEvent

std::atomic_long World::_stopEvent = false
staticprivate

◆ _timers

◆ _worldstates

WorldStatesMap World::_worldstates
private

◆ m_worldLoopCounter

uint32 World::m_worldLoopCounter = 0
static