110#include <boost/algorithm/string.hpp>
217 SessionMap::const_iterator itr;
223 Player* player = itr->second->GetPlayer();
271 boost::split(
_motd, motd, boost::is_any_of(
"@"));
285 time_t today = (gameTime /
DAY) *
DAY;
335 SessionMap::const_iterator itr =
m_sessions.find(
id);
347 SessionMap::const_iterator itr =
m_sessions.find(
id);
351 if (itr->second->PlayerLoading())
354 itr->second->KickPlayer(
"World::RemoveSession");
380 s->
KickPlayer(
"World::AddSession_ Couldn't remove the other session while on loading screen");
386 bool decrease_session =
true;
397 decrease_session =
false;
413 if (decrease_session)
434 TC_LOG_INFO(
"misc",
"Server Population ({}).", popu);
440 if (std::shared_ptr<WorldSocket> sock = linkInfo.first.lock())
446 key.
Raw = linkInfo.second;
452 sock->DelayedCloseSocket();
456 sock->SetWorldSession(session);
531 if (!found && sessions)
549 (*iter)->SendAuthWaitQueue(position);
559 std::vector<std::string> configErrors;
562 for (std::string
const& configError : configErrors)
563 TC_LOG_ERROR(
"misc",
"World settings reload fail: {}.", configError);
567 sLog->LoadFromConfig();
583 SetMotd(
sConfigMgr->GetStringDefault(
"Motd",
"Welcome to a Trinity Core Server."));
607 auto setRegenRate = [
this](
Rates rate,
char const* configKey)
803 TC_LOG_ERROR(
"server.loading",
"BaseMapLoadAllGrids enabled, but GridUnload also enabled. GridUnload must be disabled to enable base map pre-loading. Base map pre-loading disabled");
809 TC_LOG_ERROR(
"server.loading",
"InstanceMapLoadAllGrids enabled, but GridUnload also enabled. GridUnload must be disabled to enable instance map pre-loading. Instance map pre-loading disabled");
850 val =
sConfigMgr->GetIntDefault(
"InstanceServerPort", 8086);
1018 TC_LOG_ERROR(
"server.loading",
"StartDeathKnightPlayerLevel ({}) must be in range 1..MaxPlayerLevel({}). Set to 1.",
1024 TC_LOG_ERROR(
"server.loading",
"StartDeathKnightPlayerLevel ({}) must be in range 1..MaxPlayerLevel({}). Set to {}.",
1032 TC_LOG_ERROR(
"server.loading",
"StartDemonHunterPlayerLevel ({}) must be in range 1..MaxPlayerLevel({}). Set to 1.",
1038 TC_LOG_ERROR(
"server.loading",
"StartDemonHunterPlayerLevel ({}) must be in range 1..MaxPlayerLevel({}). Set to {}.",
1046 TC_LOG_ERROR(
"server.loading",
"StartEvokerPlayerLevel ({}) must be in range 1..MaxPlayerLevel({}). Set to 1.",
1052 TC_LOG_ERROR(
"server.loading",
"StartEvokerPlayerLevel ({}) must be in range 1..MaxPlayerLevel({}). Set to {}.",
1060 TC_LOG_ERROR(
"server.loading",
"StartDemonHunterPlayerLevel ({}) must be in range 1..MaxPlayerLevel({}). Set to 1.",
1066 TC_LOG_ERROR(
"server.loading",
"StartDemonHunterPlayerLevel ({}) must be in range 1..MaxPlayerLevel({}). Set to {}.",
1079 TC_LOG_ERROR(
"server.loading",
"StartPlayerMoney ({}) must be in range 0..{}. Set to {}.",
1106 TC_LOG_ERROR(
"server.loading",
"RecruitAFriend.MaxLevel ({}) must be in the range 0..MaxLevel({}). Set to {}.",
1156 TC_LOG_ERROR(
"server.loading",
"GM.StartLevel ({}) must be in range StartPlayerLevel({})..{}. Set to {}.",
1204 TC_LOG_INFO(
"server.loading",
"Will clear `logs` table of entries older than {} seconds every {} minutes.",
1374 if (
int32 clientCacheId =
sConfigMgr->GetIntDefault(
"ClientCacheVersion", 0))
1377 if (clientCacheId > 0)
1380 TC_LOG_ERROR(
"server.loading",
"ClientCacheVersion can't be negative {}, ignored.", clientCacheId);
1518 _guidWarningMsg =
sConfigMgr->GetStringDefault(
"Respawn.WarningMessage",
"There will be an unscheduled server restart at 03:00. The server will be available again shortly after.");
1522 std::string dataPath =
sConfigMgr->GetStringDefault(
"DataDir",
"./");
1523 if (dataPath.empty() || (dataPath.at(dataPath.length()-1) !=
'/' && dataPath.at(dataPath.length()-1) !=
'\\'))
1524 dataPath.push_back(
'/');
1526#if TRINITY_PLATFORM == TRINITY_PLATFORM_UNIX || TRINITY_PLATFORM == TRINITY_PLATFORM_APPLE
1527 if (dataPath[0] ==
'~')
1529 char const* home = getenv(
"HOME");
1531 dataPath.replace(0, 1, home);
1538 TC_LOG_ERROR(
"server.loading",
"DataDir option can't be changed at worldserver.conf reload, using current value ({}).",
m_dataPath);
1550 bool enableIndoor =
sConfigMgr->GetBoolDefault(
"vmap.enableIndoorCheck",
true);
1551 bool enableLOS =
sConfigMgr->GetBoolDefault(
"vmap.enableLOS",
true);
1552 bool enableHeight =
sConfigMgr->GetBoolDefault(
"vmap.enableHeight",
true);
1555 TC_LOG_ERROR(
"server.loading",
"VMap height checking disabled! Creatures movements and other various things WILL be broken! Expect no support.");
1559 TC_LOG_INFO(
"server.loading",
"VMap support included. LineOfSight: {}, getHeight: {}, indoorCheck: {}", enableLOS, enableHeight, enableIndoor);
1565 TC_LOG_WARN(
"server.loading",
"PlayerStart.AllSpells enabled - may not function as intended!");
1771 TC_LOG_FATAL(
"server.loading",
"Unable to load map and vmap data for starting zones - server shutting down!");
1783 TC_LOG_INFO(
"server.loading",
"Loading Trinity strings...");
1794 LoginDatabase.PExecute(
"UPDATE realmlist SET icon = {}, timezone = {} WHERE id = '{}'", server_type, realm_zone,
realm.
Id.
Realm);
1796 TC_LOG_INFO(
"server.loading",
"Initialize data stores...");
1805 TC_LOG_INFO(
"server.loading",
"Loading GameObject models...");
1808 TC_LOG_FATAL(
"server.loading",
"Unable to load gameobject models (part of vmaps), objects using WMO models will crash the client - server shutting down!");
1816 TC_LOG_INFO(
"misc",
"Loading hotfix optional data...");
1828 std::unordered_map<uint32, std::vector<uint32>> mapData;
1831 mapData.emplace(std::piecewise_construct, std::forward_as_tuple(mapEntry->ID), std::forward_as_tuple());
1832 if (mapEntry->ParentMapID != -1)
1834 ASSERT(mapEntry->CosmeticParentMapID == -1 || mapEntry->ParentMapID == mapEntry->CosmeticParentMapID,
1835 "Inconsistent parent map data for map %u (ParentMapID = %hd, CosmeticParentMapID = %hd)",
1836 mapEntry->ID, mapEntry->ParentMapID, mapEntry->CosmeticParentMapID);
1838 mapData[mapEntry->ParentMapID].push_back(mapEntry->ID);
1840 else if (mapEntry->CosmeticParentMapID != -1)
1841 mapData[mapEntry->CosmeticParentMapID].push_back(mapEntry->ID);
1854 TC_LOG_INFO(
"server.loading",
"Initializing PlayerDump tables...");
1857 TC_LOG_INFO(
"server.loading",
"Loading SpellInfo store...");
1860 TC_LOG_INFO(
"server.loading",
"Loading serverside spells...");
1863 TC_LOG_INFO(
"server.loading",
"Loading SpellInfo corrections...");
1866 TC_LOG_INFO(
"server.loading",
"Loading SkillLineAbilityMultiMap Data...");
1869 TC_LOG_INFO(
"server.loading",
"Loading SpellInfo custom attributes...");
1870 sSpellMgr->LoadSpellInfoCustomAttributes();
1872 TC_LOG_INFO(
"server.loading",
"Loading SpellInfo diminishing infos...");
1875 TC_LOG_INFO(
"server.loading",
"Loading SpellInfo immunity infos...");
1878 TC_LOG_INFO(
"server.loading",
"Loading PetFamilySpellsStore Data...");
1881 TC_LOG_INFO(
"server.loading",
"Loading Spell Totem models...");
1884 TC_LOG_INFO(
"server.loading",
"Loading Traits...");
1887 TC_LOG_INFO(
"server.loading",
"Loading languages...");
1890 TC_LOG_INFO(
"server.loading",
"Loading languages words...");
1893 TC_LOG_INFO(
"server.loading",
"Loading Instance Template...");
1897 TC_LOG_INFO(
"server.loading",
"Loading instances...");
1901 TC_LOG_INFO(
"server.loading",
"Loading Localization strings...");
1916 TC_LOG_INFO(
"server.loading",
"Loading Account Roles and Permissions...");
1919 TC_LOG_INFO(
"server.loading",
"Loading Page Texts...");
1922 TC_LOG_INFO(
"server.loading",
"Loading Game Object Templates...");
1925 TC_LOG_INFO(
"server.loading",
"Loading Game Object template addons...");
1928 TC_LOG_INFO(
"server.loading",
"Loading Transport templates...");
1931 TC_LOG_INFO(
"server.loading",
"Loading Transport animations and rotations...");
1934 TC_LOG_INFO(
"server.loading",
"Loading Transport spawns...");
1937 TC_LOG_INFO(
"server.loading",
"Loading Spell Rank Data...");
1940 TC_LOG_INFO(
"server.loading",
"Loading Spell Required Data...");
1943 TC_LOG_INFO(
"server.loading",
"Loading Spell Group types...");
1946 TC_LOG_INFO(
"server.loading",
"Loading Spell Learn Skills...");
1949 TC_LOG_INFO(
"server.loading",
"Loading SpellInfo SpellSpecific and AuraState...");
1950 sSpellMgr->LoadSpellInfoSpellSpecificAndAuraState();
1952 TC_LOG_INFO(
"server.loading",
"Loading Spell Learn Spells...");
1955 TC_LOG_INFO(
"server.loading",
"Loading Spell Proc conditions and data...");
1958 TC_LOG_INFO(
"server.loading",
"Loading Aggro Spells Definitions...");
1961 TC_LOG_INFO(
"server.loading",
"Loading Spell Group Stack Rules...");
1964 TC_LOG_INFO(
"server.loading",
"Loading NPC Texts...");
1967 TC_LOG_INFO(
"server.loading",
"Loading Enchant Spells Proc datas...");
1970 TC_LOG_INFO(
"server.loading",
"Loading item bonus data...");
1973 TC_LOG_INFO(
"server.loading",
"Loading Random item bonus list definitions...");
1976 TC_LOG_INFO(
"server.loading",
"Loading Disables");
1979 TC_LOG_INFO(
"server.loading",
"Loading Items...");
1982 TC_LOG_INFO(
"server.loading",
"Loading Item set names...");
1988 TC_LOG_INFO(
"server.loading",
"Loading Creature Model Based Info Data...");
1991 TC_LOG_INFO(
"server.loading",
"Loading Creature templates...");
1994 TC_LOG_INFO(
"server.loading",
"Loading Equipment templates...");
1997 TC_LOG_INFO(
"server.loading",
"Loading Creature template addons...");
2000 TC_LOG_INFO(
"server.loading",
"Loading Creature template difficulty...");
2001 sObjectMgr->LoadCreatureTemplateDifficulty();
2003 TC_LOG_INFO(
"server.loading",
"Loading Creature template sparring...");
2006 TC_LOG_INFO(
"server.loading",
"Loading Reputation Reward Rates...");
2009 TC_LOG_INFO(
"server.loading",
"Loading Creature Reputation OnKill Data...");
2012 TC_LOG_INFO(
"server.loading",
"Loading Reputation Spillover Data...");
2013 sObjectMgr->LoadReputationSpilloverTemplate();
2015 TC_LOG_INFO(
"server.loading",
"Loading Points Of Interest Data...");
2018 TC_LOG_INFO(
"server.loading",
"Loading Creature Base Stats...");
2021 TC_LOG_INFO(
"server.loading",
"Loading Spawn Group Templates...");
2024 TC_LOG_INFO(
"server.loading",
"Loading Creature Data...");
2027 TC_LOG_INFO(
"server.loading",
"Loading Temporary Summon Data...");
2030 TC_LOG_INFO(
"server.loading",
"Loading pet levelup spells...");
2033 TC_LOG_INFO(
"server.loading",
"Loading pet default spells additional to levelup spells...");
2036 TC_LOG_INFO(
"server.loading",
"Loading Creature Addon Data...");
2039 TC_LOG_INFO(
"server.loading",
"Loading Creature Movement Overrides...");
2042 TC_LOG_INFO(
"server.loading",
"Loading Gameobject Data...");
2045 TC_LOG_INFO(
"server.loading",
"Loading Spawn Group Data...");
2048 TC_LOG_INFO(
"server.loading",
"Loading instance spawn groups...");
2051 TC_LOG_INFO(
"server.loading",
"Loading GameObject Addon Data...");
2054 TC_LOG_INFO(
"server.loading",
"Loading GameObject faction and flags overrides...");
2057 TC_LOG_INFO(
"server.loading",
"Loading GameObject Quest Items...");
2060 TC_LOG_INFO(
"server.loading",
"Loading Creature Quest Items...");
2063 TC_LOG_INFO(
"server.loading",
"Loading Creature Quest Currencies...");
2066 TC_LOG_INFO(
"server.loading",
"Loading Creature Linked Respawn...");
2069 TC_LOG_INFO(
"server.loading",
"Loading Weather Data...");
2072 TC_LOG_INFO(
"server.loading",
"Loading Quests...");
2075 TC_LOG_INFO(
"server.loading",
"Checking Quest Disables");
2078 TC_LOG_INFO(
"server.loading",
"Loading Quest POI");
2081 TC_LOG_INFO(
"server.loading",
"Loading Quests Starters and Enders...");
2084 TC_LOG_INFO(
"server.loading",
"Loading Quest Greetings...");
2088 TC_LOG_INFO(
"server.loading",
"Loading Objects Pooling Data...");
2090 TC_LOG_INFO(
"server.loading",
"Loading Quest Pooling Data...");
2093 TC_LOG_INFO(
"server.loading",
"Loading Game Event Data...");
2096 TC_LOG_INFO(
"server.loading",
"Loading creature summoned data...");
2099 TC_LOG_INFO(
"server.loading",
"Loading UNIT_NPC_FLAG_SPELLCLICK Data...");
2102 TC_LOG_INFO(
"server.loading",
"Loading Vehicle Templates...");
2105 TC_LOG_INFO(
"server.loading",
"Loading Vehicle Template Accessories...");
2106 sObjectMgr->LoadVehicleTemplateAccessories();
2108 TC_LOG_INFO(
"server.loading",
"Loading Vehicle Accessories...");
2111 TC_LOG_INFO(
"server.loading",
"Loading Vehicle Seat Addon Data...");
2114 TC_LOG_INFO(
"server.loading",
"Loading SpellArea Data...");
2117 TC_LOG_INFO(
"server.loading",
"Loading World locations...");
2120 TC_LOG_INFO(
"server.loading",
"Loading Area Trigger Teleports definitions...");
2123 TC_LOG_INFO(
"server.loading",
"Loading Access Requirements...");
2126 TC_LOG_INFO(
"server.loading",
"Loading Quest Area Triggers...");
2129 TC_LOG_INFO(
"server.loading",
"Loading Tavern Area Triggers...");
2132 TC_LOG_INFO(
"server.loading",
"Loading AreaTrigger script names...");
2135 TC_LOG_INFO(
"server.loading",
"Loading LFG entrance positions...");
2138 TC_LOG_INFO(
"server.loading",
"Loading LFG rewards...");
2141 TC_LOG_INFO(
"server.loading",
"Loading Graveyard-zone links...");
2144 TC_LOG_INFO(
"server.loading",
"Loading spell pet auras...");
2147 TC_LOG_INFO(
"server.loading",
"Loading Spell target coordinates...");
2150 TC_LOG_INFO(
"server.loading",
"Loading linked spells...");
2153 TC_LOG_INFO(
"server.loading",
"Loading Scenes Templates...");
2156 TC_LOG_INFO(
"server.loading",
"Loading Player Create Data...");
2159 TC_LOG_INFO(
"server.loading",
"Loading Exploration BaseXP Data...");
2162 TC_LOG_INFO(
"server.loading",
"Loading Pet Name Parts...");
2165 TC_LOG_INFO(
"server.loading",
"Loading AreaTrigger Templates...");
2168 TC_LOG_INFO(
"server.loading",
"Loading AreaTrigger Spawns...");
2171 TC_LOG_INFO(
"server.loading",
"Loading Conversation Templates...");
2174 TC_LOG_INFO(
"server.loading",
"Loading Player Choices...");
2177 TC_LOG_INFO(
"server.loading",
"Loading Player Choices Locales...");
2180 TC_LOG_INFO(
"server.loading",
"Loading Jump Charge Params...");
2185 TC_LOG_INFO(
"server.loading",
"Loading the max pet number...");
2188 TC_LOG_INFO(
"server.loading",
"Loading pet level stats...");
2191 TC_LOG_INFO(
"server.loading",
"Loading Player level dependent mail rewards...");
2197 TC_LOG_INFO(
"server.loading",
"Loading Skill Discovery Table...");
2200 TC_LOG_INFO(
"server.loading",
"Loading Skill Extra Item Table...");
2203 TC_LOG_INFO(
"server.loading",
"Loading Skill Perfection Data Table...");
2206 TC_LOG_INFO(
"server.loading",
"Loading Skill Fishing base level requirements...");
2209 TC_LOG_INFO(
"server.loading",
"Loading skill tier info...");
2212 TC_LOG_INFO(
"server.loading",
"Loading Criteria Modifier trees...");
2214 TC_LOG_INFO(
"server.loading",
"Loading Criteria Lists...");
2216 TC_LOG_INFO(
"server.loading",
"Loading Criteria Data...");
2218 TC_LOG_INFO(
"server.loading",
"Loading Achievements...");
2220 TC_LOG_INFO(
"server.loading",
"Loading Achievements Scripts...");
2222 TC_LOG_INFO(
"server.loading",
"Loading Achievement Rewards...");
2224 TC_LOG_INFO(
"server.loading",
"Loading Achievement Reward Locales...");
2226 TC_LOG_INFO(
"server.loading",
"Loading Completed Achievements...");
2230 TC_LOG_INFO(
"server.loading",
"Loading character cache store...");
2234 TC_LOG_INFO(
"server.loading",
"Loading Auctions...");
2239 TC_LOG_INFO(
"server.loading",
"Loading Black Market Templates...");
2242 TC_LOG_INFO(
"server.loading",
"Loading Black Market Auctions...");
2246 TC_LOG_INFO(
"server.loading",
"Loading Guild rewards...");
2249 TC_LOG_INFO(
"server.loading",
"Loading Guilds...");
2252 TC_LOG_INFO(
"server.loading",
"Loading ArenaTeams...");
2255 TC_LOG_INFO(
"server.loading",
"Loading Groups...");
2258 TC_LOG_INFO(
"server.loading",
"Loading ReservedNames...");
2261 TC_LOG_INFO(
"server.loading",
"Loading GameObjects for quests...");
2264 TC_LOG_INFO(
"server.loading",
"Loading BattleMasters...");
2267 TC_LOG_INFO(
"server.loading",
"Loading GameTeleports...");
2270 TC_LOG_INFO(
"server.loading",
"Loading Trainers...");
2273 TC_LOG_INFO(
"server.loading",
"Loading Gossip menu...");
2276 TC_LOG_INFO(
"server.loading",
"Loading Gossip menu options...");
2279 TC_LOG_INFO(
"server.loading",
"Loading Gossip menu addon...");
2282 TC_LOG_INFO(
"server.loading",
"Loading Creature Template Gossip...");
2285 TC_LOG_INFO(
"server.loading",
"Loading Creature trainers...");
2288 TC_LOG_INFO(
"server.loading",
"Loading Vendors...");
2291 TC_LOG_INFO(
"server.loading",
"Loading Waypoint paths...");
2294 TC_LOG_INFO(
"server.loading",
"Loading Creature Formations...");
2297 TC_LOG_INFO(
"server.loading",
"Loading World State templates...");
2300 TC_LOG_INFO(
"server.loading",
"Loading Persistend World Variables...");
2308 TC_LOG_INFO(
"server.loading",
"Loading Conditions...");
2311 TC_LOG_INFO(
"server.loading",
"Loading faction change achievement pairs...");
2314 TC_LOG_INFO(
"server.loading",
"Loading faction change spell pairs...");
2317 TC_LOG_INFO(
"server.loading",
"Loading faction change quest pairs...");
2320 TC_LOG_INFO(
"server.loading",
"Loading faction change item pairs...");
2323 TC_LOG_INFO(
"server.loading",
"Loading faction change reputation pairs...");
2326 TC_LOG_INFO(
"server.loading",
"Loading faction change title pairs...");
2329 TC_LOG_INFO(
"server.loading",
"Loading mount definitions...");
2332 TC_LOG_INFO(
"server.loading",
"Loading GM bugs...");
2335 TC_LOG_INFO(
"server.loading",
"Loading GM complaints...");
2338 TC_LOG_INFO(
"server.loading",
"Loading GM suggestions...");
2344 TC_LOG_INFO(
"server.loading",
"Loading garrison info...");
2348 TC_LOG_INFO(
"server.loading",
"Returning old mails...");
2351 TC_LOG_INFO(
"server.loading",
"Loading Autobroadcasts...");
2358 TC_LOG_INFO(
"server.loading",
"Loading spell script names...");
2361 TC_LOG_INFO(
"server.loading",
"Loading Creature Texts...");
2364 TC_LOG_INFO(
"server.loading",
"Loading Creature Text Locales...");
2367 TC_LOG_INFO(
"server.loading",
"Initializing Scripts...");
2371 TC_LOG_INFO(
"server.loading",
"Validating spell scripts...");
2374 TC_LOG_INFO(
"server.loading",
"Loading SmartAI scripts...");
2377 TC_LOG_INFO(
"server.loading",
"Loading Calendar data...");
2380 TC_LOG_INFO(
"server.loading",
"Loading Petitions...");
2383 TC_LOG_INFO(
"server.loading",
"Loading Signatures...");
2386 TC_LOG_INFO(
"server.loading",
"Loading Item loot...");
2389 TC_LOG_INFO(
"server.loading",
"Initialize query data...");
2392 TC_LOG_INFO(
"server.loading",
"Initialize commands...");
2396 TC_LOG_INFO(
"server.loading",
"Initialize game time and timers");
2399 LoginDatabase.PExecute(
"INSERT INTO uptime (realmid, starttime, uptime, revision) VALUES({}, {}, 0, '{}')",
2434 localtime_r(&gameTime, &localTm);
2442 TC_LOG_INFO(
"server.loading",
"Starting Map System");
2445 TC_LOG_INFO(
"server.loading",
"Starting Game Event system...");
2452 TC_LOG_INFO(
"server.loading",
"Initialize AuctionHouseBot...");
2455 TC_LOG_INFO(
"server.loading",
"Initializing chat channels...");
2458 TC_LOG_INFO(
"server.loading",
"Initializing Opcodes...");
2463 TC_LOG_INFO(
"server.loading",
"Starting Arena Season...");
2469 TC_LOG_INFO(
"server.loading",
"Starting Battleground System");
2473 TC_LOG_INFO(
"server.loading",
"Starting Outdoor PvP System");
2477 TC_LOG_INFO(
"server.loading",
"Starting Battlefield System");
2481 TC_LOG_INFO(
"server.loading",
"Loading Warden Checks...");
2484 TC_LOG_INFO(
"server.loading",
"Loading Warden Action Overrides...");
2487 TC_LOG_INFO(
"server.loading",
"Deleting expired bans...");
2488 LoginDatabase.Execute(
"DELETE FROM ip_banned WHERE unbandate <= UNIX_TIMESTAMP() AND unbandate<>bandate");
2490 TC_LOG_INFO(
"server.loading",
"Initializing quest reset times...");
2494 TC_LOG_INFO(
"server.loading",
"Calculate random battleground reset time...");
2497 TC_LOG_INFO(
"server.loading",
"Calculate deletion of old calendar events time...");
2500 TC_LOG_INFO(
"server.loading",
"Calculate guild limitation(s) reset time...");
2503 TC_LOG_INFO(
"server.loading",
"Calculate next currency reset time...");
2506 TC_LOG_INFO(
"server.loading",
"Loading race and class expansion requirements...");
2507 sObjectMgr->LoadRaceAndClassExpansionRequirements();
2509 TC_LOG_INFO(
"server.loading",
"Loading character templates...");
2512 TC_LOG_INFO(
"server.loading",
"Loading battle pets info...");
2515 TC_LOG_INFO(
"server.loading",
"Loading scenarios");
2519 TC_LOG_INFO(
"server.loading",
"Loading scenario poi data");
2522 TC_LOG_INFO(
"server.loading",
"Loading phase names...");
2527 TC_LOG_INFO(
"server.worldserver",
"World initialized in {} minutes {} seconds", (startupDuration / 60000), ((startupDuration % 60000) / 1000));
2529 TC_METRIC_EVENT(
"events",
"World initialized",
"World initialized in " + std::to_string(startupDuration / 60000) +
" minutes " + std::to_string((startupDuration % 60000) / 1000) +
" seconds");
2555 TC_LOG_INFO(
"server.loading",
">> Loaded 0 autobroadcasts definitions. DB table `autobroadcast` is empty for this realm!");
2561 Field* fields = result->Fetch();
2566 }
while (result->NextRow());
2837 TC_LOG_DEBUG(
"misc",
"Ping MySQL to keep connection alive");
2890 SessionMap::const_iterator itr;
2894 itr->second->GetPlayer() &&
2895 itr->second->GetPlayer()->IsInWorld() &&
2896 itr->second != self &&
2897 (!team || itr->second->GetPlayer()->GetTeam() == team))
2899 itr->second->SendPacket(packet);
2920 if (!team || player->
GetTeam() == team)
2934 for (std::unique_ptr<WorldPackets::Packet>
const& packet :
Packets)
2938 std::vector<std::unique_ptr<WorldPackets::Packet>>
Packets;
2971 void do_helper(std::vector<std::unique_ptr<WorldPackets::Packet>>& dataList,
char* text)
2978 dataList.emplace_back(packet);
2991 va_start(ap, string_id);
2997 if (!itr->second || !itr->second->GetPlayer() || !itr->second->GetPlayer()->IsInWorld())
3000 wt_do(itr->second->GetPlayer());
3010 va_start(ap, string_id);
3036 char* buf = strdup(text);
3052 bool foundPlayerToSend =
false;
3053 SessionMap::const_iterator itr;
3058 itr->second->GetPlayer() &&
3059 itr->second->GetPlayer()->IsInWorld() &&
3060 itr->second->GetPlayer()->GetZoneId() == zone &&
3061 itr->second != self &&
3062 (!team || itr->second->GetPlayer()->GetTeam() == team))
3064 itr->second->SendPacket(packet);
3065 foundPlayerToSend =
true;
3069 return foundPlayerToSend;
3087 itr->second->KickPlayer(
"World::KickAll");
3095 if (itr->second->GetSecurity() < sec)
3096 itr->second->KickPlayer(
"World::KickAllLess");
3103 return BanAccount(mode, nameOrIP, duration_secs, reason, author);
3152 if (!resultAccounts)
3164 Field* fieldsAccount = resultAccounts->Fetch();
3172 trans->Append(stmt);
3179 trans->Append(stmt);
3183 if (std::string(sess->GetPlayerName()) != author)
3184 sess->KickPlayer(
"World::BanAccount Banning account");
3185 }
while (resultAccounts->NextRow());
3244 trans->Append(stmt);
3251 trans->Append(stmt);
3351 if (!reason.empty())
3352 str +=
" - " + reason;
3402 std::pair<std::weak_ptr<WorldSocket>,
uint64> linkInfo;
3426 [[maybe_unused]]
uint32 currentSessionId = itr->first;
3429 if (!pSession->
Update(diff, updater))
3445 void* callbackArg =
nullptr;
3449 TC_LOG_INFO(
"misc",
"CLI command under processing...");
3467 return pair.second.Weight;
3474 else if (abcenter == 1)
3476 else if (abcenter == 2)
3482 TC_LOG_DEBUG(
"misc",
"AutoBroadcast: '{}'", itr->second.Message);
3491 _UpdateRealmCharCount(std::move(result));
3497 if (resultCharCount)
3499 Field* fields = resultCharCount->Fetch();
3501 uint8 charCount =
uint8(fields[1].GetUInt64());
3509 trans->Append(stmt);
3539 if (
Player* player = itr->second->GetPlayer())
3540 player->DailyReset();
3553 TC_LOG_INFO(
"misc",
"Daily quests for all characters have been reset.");
3560 int wday = time.tm_wday;
3564 t += (
DAY * (target - wday));
3575 if (
Player* player = itr->second->GetPlayer())
3576 player->ResetWeeklyQuestStatus();
3592 TC_LOG_INFO(
"misc",
"Weekly quests for all characters have been reset.");
3599 if (time.tm_mday == 1)
3604 return mktime(&time);
3614 if (
Player* player = itr->second->GetPlayer())
3615 player->ResetMonthlyQuestStatus();
3628 TC_LOG_INFO(
"misc",
"Monthly quests for all characters have been reset.");
3651 localtime_r(&curTime, &localTm);
3657 time_t nextDayResetTime = mktime(&localTm);
3660 if (curTime >= nextDayResetTime)
3661 nextDayResetTime +=
DAY;
3678 if (currentDeletionTime < now)
3683 if (!currentDeletionTime)
3696 localtime_r(&curTime, &localTm);
3702 time_t nextDayResetTime = mktime(&localTm);
3705 if (curTime >= nextDayResetTime)
3706 nextDayResetTime +=
DAY;
3724 localtime_r(&curTime, &localTm);
3732 time_t nextWeekResetTime = mktime(&localTm);
3735 if (curTime >= nextWeekResetTime)
3747 CharacterDatabase.Execute(
"UPDATE `character_currency` SET `WeeklyQuantity` = 0");
3750 if (itr->second->GetPlayer())
3751 itr->second->GetPlayer()->ResetCurrencyWeekCap();
3759 TC_LOG_INFO(
"misc",
"Seasonal quests reset for all characters.");
3767 if (itr->second->GetPlayer())
3768 itr->second->GetPlayer()->ResetSeasonalQuestStatus(event_id, eventStartTime);
3773 TC_LOG_INFO(
"misc",
"Random BG status reset for all characters.");
3779 if (itr->second->GetPlayer())
3780 itr->second->GetPlayer()->SetRandomWinner(
false);
3788 TC_LOG_INFO(
"misc",
"Calendar deletion of old events.");
3800 week = week < 7 ? week + 1 : 1;
3802 TC_LOG_INFO(
"misc",
"Guild Daily Cap reset. Week: {}", week == 1);
3817 Field* fields = result->Fetch();
3830 SessionMap::const_iterator itr;
3832 if (itr->second && itr->second->GetPlayer() && itr->second->GetPlayer()->IsInWorld())
3834 itr->second->GetPlayer()->UpdateAreaDependentAuras(itr->second->GetPlayer()->GetAreaId());
3835 itr->second->GetPlayer()->UpdateZoneDependentAuras(itr->second->GetPlayer()->GetZoneId());
3842 if (sessionForBnet.second->GetBattlePetMgr()->HasJournalLock())
3884 Field* fields = result->Fetch();
3886 }
while (result->NextRow());
3903 session->InvalidateRBACData();
3913 std::array<int64, 2> warModeEnabledFaction = { };
3923 Field* fields = result->Fetch();
3936 }
while (result->NextRow());
3940 int32 outnumberedFactionReward = 0;
3942 if (std::any_of(warModeEnabledFaction.begin(), warModeEnabledFaction.end(), [](
int64 val) { return val != 0; }))
3947 dominantFactionCount = warModeEnabledFaction[
TEAM_HORDE];
3952 double pct = dominantFactionCount / total;
3955 outnumberedFactionReward = 20;
3957 outnumberedFactionReward = 10;
3959 outnumberedFactionReward = 5;
3974 : m_callbackArg(callbackArg), m_command(strdup(command)), m_print(zprint), m_commandFinished(
commandFinished)
#define sAreaTriggerDataStore
@ CHAR_DEL_RESET_CHARACTER_QUESTSTATUS_MONTHLY
@ CHAR_SEL_ACCOUNT_BY_NAME
@ CHAR_SEL_CHARACTER_COUNT
@ CHAR_DEL_RESET_CHARACTER_QUESTSTATUS_SEASONAL_BY_EVENT
@ CHAR_DEL_RESET_CHARACTER_QUESTSTATUS_DAILY
@ CHAR_REP_WORLD_VARIABLE
@ CHAR_DEL_BATTLEGROUND_RANDOM_ALL
@ CHAR_UPD_CHARACTER_GARRISON_FOLLOWER_ACTIVATIONS
@ CHAR_DEL_RESET_CHARACTER_QUESTSTATUS_WEEKLY
@ CHAR_SEL_WAR_MODE_TUNING
#define sCharacterTemplateDataStore
char const * localeNames[TOTAL_LOCALES]
#define sConversationDataStore
DB2Storage< MapEntry > sMapStore("Map.db2", &MapLoadInfo::Instance)
DB2Storage< ServerMessagesEntry > sServerMessagesStore("ServerMessages.db2", &ServerMessagesLoadInfo::Instance)
DB2Storage< Cfg_CategoriesEntry > sCfgCategoriesStore("Cfg_Categories.db2", &CfgCategoriesLoadInfo::Instance)
DB2Storage< ChrRacesEntry > sChrRacesStore("ChrRaces.db2", &ChrRacesLoadInfo::Instance)
DB2Storage< FactionTemplateEntry > sFactionTemplateStore("FactionTemplate.db2", &FactionTemplateLoadInfo::Instance)
SQLTransaction< CharacterDatabaseConnection > CharacterDatabaseTransaction
SQLTransaction< LoginDatabaseConnection > LoginDatabaseTransaction
std::shared_ptr< ResultSet > QueryResult
std::shared_ptr< PreparedResultSet > PreparedQueryResult
DatabaseWorkerPool< LoginDatabaseConnection > LoginDatabase
Accessor to the realm/login database.
DatabaseWorkerPool< CharacterDatabaseConnection > CharacterDatabase
Accessor to the character database.
DatabaseWorkerPool< WorldDatabaseConnection > WorldDatabase
Accessor to the world database.
void dtCustomFree(void *ptr)
void * dtCustomAlloc(size_t size, dtAllocHint)
#define ASSERT_NOTNULL(pointer)
bool LoadGameObjectModelList(std::string const &dataPath)
#define MIN_MAP_UPDATE_DELAY
void LoadItemRandomBonusListTemplates()
#define TC_LOG_WARN(filterType__,...)
#define TC_LOG_DEBUG(filterType__,...)
#define TC_LOG_ERROR(filterType__,...)
#define TC_LOG_INFO(filterType__,...)
#define TC_LOG_FATAL(filterType__,...)
@ LOGIN_INS_ACCOUNT_BANNED
@ LOGIN_SEL_ACCOUNT_BY_IP
@ LOGIN_UPD_UPTIME_PLAYERS
@ LOGIN_DEL_IP_NOT_BANNED
@ LOGIN_REP_REALM_CHARACTERS
@ LOGIN_SEL_REALMLIST_SECURITY_LEVEL
@ LOGIN_UPD_ACCOUNT_NOT_BANNED
@ LOGIN_SEL_AUTOBROADCAST
@ LOGIN_SEL_ACCOUNT_ID_BY_NAME
TC_GAME_API void LoadM2Cameras(std::string const &dataPath)
#define TC_METRIC_DETAILED_TIMER(category,...)
#define TC_METRIC_VALUE(category, value,...)
#define TC_METRIC_EVENT(category, title, description)
#define TC_METRIC_TAG(name, value)
#define TC_METRIC_DETAILED_NO_THRESHOLD_TIMER(category,...)
#define TC_METRIC_TIMER(category,...)
#define DEFAULT_VISIBILITY_NOTIFY_PERIOD
#define MAX_VISIBILITY_DISTANCE
#define DEFAULT_VISIBILITY_DISTANCE
#define DEFAULT_VISIBILITY_BGARENAS
#define DEFAULT_VISIBILITY_INSTANCE
std::optional< T > Optional
Optional helper class to wrap optional values within.
uint64 const MAX_MONEY_AMOUNT
@ PLAYER_FLAGS_WAR_MODE_DESIRED
constexpr uint32 HARDCODED_DEVELOPMENT_REALM_CATEGORY_ID
#define CURRENT_EXPANSION
BanReturn
Ban function return codes.
#define MAX_CHARACTERS_PER_REALM
@ GUILD_BANKLOG_MAX_RECORDS
@ GUILD_EVENTLOG_MAX_RECORDS
@ GUILD_NEWSLOG_MAX_RECORDS
@ WS_WAR_MODE_HORDE_BUFF_VALUE
@ WS_WAR_MODE_ALLIANCE_BUFF_VALUE
@ WS_PREVIOUS_PVP_SEASON_ID
@ WS_CURRENT_PVP_SEASON_ID
BanMode
Ban function modes.
void LoadSkillDiscoveryTable()
uint32 GetMSTimeDiffToNow(uint32 oldMSTime)
float baseMoveSpeed[MAX_MOVE_TYPE]
float playerBaseMoveSpeed[MAX_MOVE_TYPE]
WorldUpdateTime sWorldUpdateTime
time_t GetLocalHourTimestamp(time_t time, uint8 hour, bool onlyAfterTime)
tm TimeBreakdown(time_t time)
std::string secsToTimeString(uint64 timeInSecs, TimeFormat timeFormat, bool hoursOnly)
uint32 TimeStringToSecs(std::string const ×tring)
#define sWhoListStorageMgr
static time_t GetNextDailyResetTime(time_t t)
static time_t GetNextWeeklyResetTime(time_t t)
static time_t GetNextMonthlyResetTime(time_t t)
static bool IsBannedAccount(std::string const &name)
static uint32 GetId(std::string_view username)
T & AddCallback(T &&query)
void ProcessReadyCallbacks()
static ChannelMgr * ForTeam(uint32 team)
bool HasSentErrorMessage() const
static char * LineFromMessage(char *&pos)
bool ParseCommands(std::string_view str) override
static void LoadMountDefinitions()
static uint32 GetLiquidFlags(uint32 liquidType)
Class used to access individual fields of database query result.
std::string GetString() const
void add(const T &item)
Adds an item to the queue.
bool next(T &result)
Gets the next result in the queue, if any.
static MMapManager * createOrGetMMapManager()
void InitializeThreadUnsafe(std::unordered_map< uint32, std::vector< uint32 > > const &mapData)
LowType GetCounter() const
static ObjectGuid GetGUID(Object const *o)
void Initialize()
Correspondence between opcodes and their names.
static void InitializeTables()
static void DeleteOldCharacters()
void SendDirectMessage(WorldPacket const *data) const
WorldSession * GetSession() const
void setInt32(const uint8 index, const int32 value)
void setStringView(const uint8 index, const std::string_view value)
void setUInt8(const uint8 index, const uint8 value)
void setInt64(const uint8 index, const int64 value)
void setUInt32(const uint8 index, const uint32 value)
void setUInt16(const uint8 index, const uint16 value)
void setString(const uint8 index, const std::string &value)
void setUInt64(const uint8 index, const uint64 value)
static bool ExistMapAndVMap(uint32 mapid, float x, float y)
void operator()(Player const *receiver) const
std::vector< std::unique_ptr< WorldPackets::Packet > > Packets
void do_helper(std::vector< std::unique_ptr< WorldPackets::Packet > > &dataList, char *text)
static size_t const BufferSize
WorldWorldTextBuilder(uint32 textId, va_list *args=nullptr)
MultiplePacketSender * operator()(LocaleConstant locale)
void UpdateWithDiff(uint32 diff)
void setEnableLineOfSightCalc(bool pVal)
void setEnableHeightCalc(bool pVal)
static VMapManager2 * createOrGetVMapManager()
IsVMAPDisabledForFn IsVMAPDisabledForPtr
void InitializeThreadUnsafe(std::unordered_map< uint32, std::vector< uint32 > > const &mapData)
GetLiquidFlagsFn GetLiquidFlagsPtr
static bool InitializeEncryption()
static bool InitializeEncryption()
std::string_view StringParam
WorldPacket const * Write() override
void Initialize(ChatMsg chatType, Language language, WorldObject const *sender, WorldObject const *receiver, std::string_view message, uint32 achievementId=0, std::string_view channelName="", LocaleConstant locale=DEFAULT_LOCALE, std::string_view addonPrefix="")
WorldPacket const * Write() override
WorldPacket const * Write() override
Player session in the World.
bool Update(uint32 diff, PacketFilter &updater)
Update the WorldSession (triggered by World update)
ObjectGuid GetBattlenetAccountGUID() const
void SendAuthResponse(uint32 code, bool queued, uint32 queuePos=0)
uint64 GetConnectToInstanceKey() const
void AddInstanceConnection(std::shared_ptr< WorldSocket > sock)
LocaleConstant GetSessionDbcLocale() const
void KickPlayer(std::string const &reason)
Kick a player out of the World.
Player * GetPlayer() const
void SetInQueue(bool state)
Session in auth.queue currently.
bool HasPermission(uint32 permissionId)
void SendPacket(WorldPacket const *packet, bool forced=false)
Send a packet to the client.
uint32 GetAccountId() const
void HandleContinuePlayerLogin()
void ResetTimeOutTime(bool onlyActive)
time_t m_NextWeeklyQuestReset
static PersistentWorldVariable const NextGuildDailyResetTimeVarId
uint32 ShutdownCancel()
Cancel a planned server shutdown.
bool SendZoneMessage(uint32 zone, WorldPacket const *packet, WorldSession *self=nullptr, Optional< Team > team={ })
Send a packet to all players (or players selected team) in the zone (except self if mentioned)
bool RemoveBanCharacter(std::string const &name)
Remove a ban from a character.
void UpdateSessions(uint32 diff)
void InitCurrencyResetTime()
uint32 getIntConfig(WorldIntConfigs index) const
Get a server configuration element (see #WorldConfigs)
LocaleConstant m_defaultDbcLocale
static int32 m_visibility_notify_periodInBG
uint32 m_int_configs[INT_CONFIG_VALUE_COUNT]
bool RemoveBanAccount(BanMode mode, std::string const &nameOrIP)
Remove a ban from an account or IP address.
static int32 m_visibility_notify_periodInInstances
static std::atomic< uint32 > m_worldLoopCounter
void AddSession_(WorldSession *s)
void SetForcedWarModeFactionBalanceState(TeamId team, int32 reward=0)
float m_float_configs[FLOAT_CONFIG_VALUE_COUNT]
static PersistentWorldVariable const NextOldCalendarEventDeletionTimeVarId
AccountTypes m_allowedSecurityLevel
void LoadConfigSettings(bool reload=false)
Initialize config values.
void _UpdateGameTime()
Update the game time.
static std::atomic< bool > m_stopEvent
float rate_values[MAX_RATES]
void KickAllLess(AccountTypes sec)
Kick (and save) all players with security level less sec
static PersistentWorldVariable const NextMonthlyQuestResetTimeVarId
void SetMotd(std::string motd)
Set a new Message of the Day.
bool IsPvPRealm() const
Are we on a "Player versus Player" server?
void SetNewCharString(std::string const &str)
Set the string for new characters (first login)
LockedQueue< WorldSession * > addSessQueue
static float m_MaxVisibleDistanceInArenas
void SendServerMessage(ServerMessageType messageID, std::string_view stringParam={}, Player const *player=nullptr)
Send a server message to the user(s)
void SetPersistentWorldVariable(PersistentWorldVariable const &var, int32 value)
static float m_MaxVisibleDistanceInBG
QueryCallbackProcessor _queryProcessor
bool m_bool_configs[BOOL_CONFIG_VALUE_COUNT]
void UpdateRealmCharCount(uint32 accountId)
void LoadDBAllowedSecurityLevel()
static PersistentWorldVariable const CharacterDatabaseCleaningFlagsVarId
std::mutex _guidAlertLock
bool HasRecentlyDisconnected(WorldSession *)
uint64 m_int64_configs[INT64_CONFIT_VALUE_COUNT]
void AddQueuedPlayer(WorldSession *)
void ResetCurrencyWeekCap()
uint32 GetQueuedSessionCount() const
static PersistentWorldVariable const NextCurrencyResetTimeVarId
void UpdateMaxSessionCounters()
Get the number of current active sessions.
static PersistentWorldVariable const NextDailyQuestResetTimeVarId
uint32 m_maxActiveSessionCount
void SetInitialWorldSettings()
Initialize the World.
void ResetMonthlyQuests()
time_t m_NextDailyQuestReset
void InitCalendarOldEventsDeletionTime()
void DoGuidAlertRestart()
bool IsFFAPvPRealm() const
time_t m_NextCurrencyReset
bool RemoveSession(uint32 id)
Remove a given session.
time_t m_NextRandomBGReset
Player * FindPlayerInZone(uint32 zone)
Find a player in a specified zone.
BanReturn BanCharacter(std::string const &name, std::string const &duration, std::string const &reason, std::string const &author)
Ban an account or ban an IP address, duration will be parsed using TimeStringToSecs if it is positive...
int32 GetPersistentWorldVariable(PersistentWorldVariable const &var) const
void TriggerGuidWarning()
float getRate(Rates rate) const
Get a server rate (see Rates)
void SendGMText(uint32 string_id,...)
Send a System Message to all GMs (except self if mentioned)
void ShutdownMsg(bool show=false, Player *player=nullptr, const std::string &reason=std::string())
Display a shutdown message to the user(s)
static PersistentWorldVariable const NextGuildWeeklyResetTimeVarId
void InitGuildResetTime()
BanReturn BanAccount(BanMode mode, std::string const &nameOrIP, std::string const &duration, std::string const &reason, std::string const &author)
Ban an account or ban an IP address, duration will be parsed using TimeStringToSecs if it is positive...
time_t mail_timer_expires
void InitRandomBGResetTime()
std::vector< std::string > const & GetMotd() const
Get the current Message of the Day.
~World()
World destructor.
std::unordered_multimap< ObjectGuid, WorldSession * > m_sessionsByBnetGuid
bool getBoolConfig(WorldBoolConfigs index) const
Get a server configuration element (see #WorldConfigs)
static PersistentWorldVariable const NextBGRandomDailyResetTimeVarId
void _UpdateRealmCharCount(PreparedQueryResult resultCharCount)
uint32 GetActiveSessionCount() const
DisconnectMap m_disconnects
time_t m_NextCalendarOldEventsDeletionTime
uint32 m_availableDbcLocaleMask
void UpdateWarModeRewardValues()
std::string _guidWarningMsg
void SendZoneText(uint32 zone, const char *text, WorldSession *self=nullptr, Optional< Team > team={ })
Send a System Message to all players in the zone (except self if mentioned)
void ResetEventSeasonalQuests(uint16 event_id, time_t eventStartTime)
void SetPlayerSecurityLimit(AccountTypes sec)
AutobroadcastContainer m_Autobroadcasts
bool IsClosed() const
Deny clients?
static int32 m_visibility_notify_periodInArenas
void KickAll()
Kick (and save) all players.
uint32 GetPlayerAmountLimit() const
void AddSession(WorldSession *s)
void CheckScheduledResetTimes()
std::string _alertRestartReason
void ForceGameEventUpdate()
static PersistentWorldVariable const NextWeeklyQuestResetTimeVarId
void CalendarDeleteOldEvents()
void ProcessQueryCallbacks()
static World * instance()
float getFloatConfig(WorldFloatConfigs index) const
Get a server configuration element (see #WorldConfigs)
void AddInstanceSocket(std::weak_ptr< WorldSocket > sock, uint64 connectToKey)
LocaleConstant GetDefaultDbcLocale() const
static float m_MaxVisibleDistanceOnContinents
void SendGlobalMessage(WorldPacket const *packet, WorldSession *self=nullptr, Optional< Team > team={ })
Send a packet to all players (except self if mentioned)
uint32 GetActiveAndQueuedSessionCount() const
static float m_MaxVisibleDistanceInInstances
WorldSession * FindSession(uint32 id) const
Find a session by its id.
int32 GetQueuePos(WorldSession *)
bool RemoveQueuedPlayer(WorldSession *session)
void UpdateAreaDependentAuras()
void InitQuestResetTimes()
void DisableForcedWarModeFactionBalanceState()
uint32 GetMaxPlayerCount() const
IntervalTimer m_timers[WUPDATE_COUNT]
std::unordered_map< std::string, int32 > m_worldVariables
void SendGlobalGMMessage(WorldPacket const *packet, WorldSession *self=nullptr, Optional< Team > team={ })
Send a packet to all GMs (except self if mentioned)
void SendGlobalText(char const *text, WorldSession *self)
DEPRECATED, only for debug purpose. Send a System Message to all players (except self if mentioned)
time_t m_NextMonthlyQuestReset
void ProcessLinkInstanceSocket(std::pair< std::weak_ptr< WorldSocket >, uint64 > linkInfo)
std::vector< std::string > _motd
uint32 m_maxQueuedSessionCount
static int32 m_visibility_notify_periodOnContinents
void Update(uint32 diff)
Update the World !
bool IsBattlePetJournalLockAcquired(ObjectGuid battlenetAccountGuid)
void LoadAutobroadcasts()
void LoadPersistentWorldVariables()
void SetPlayerAmountLimit(uint32 limit)
Active session server limit.
LockedQueue< std::pair< std::weak_ptr< WorldSocket >, uint64 > > _linkSocketQueue
void SendWorldText(uint32 string_id,...)
Send a System Message to all players (except self if mentioned)
void DoGuidWarningRestart()
void ProcessCliCommands()
void SetClosed(bool val)
Close world.
LockedQueue< CliCommandHolder * > cliCmdQueue
World()
World constructor.
void ShutdownServ(uint32 time, uint32 options, uint8 exitcode, const std::string &reason=std::string())
Shutdown the server.
void commandFinished(void *, bool)
uint32 GetVirtualRealmAddress()
@ SERVER_MSG_SHUTDOWN_TIME
@ SERVER_MSG_SHUTDOWN_CANCELLED
@ SERVER_MSG_RESTART_CANCELLED
@ SERVER_MSG_RESTART_TIME
@ CONFIG_AUTOBROADCAST_CENTER
@ CONFIG_ARENA_START_MATCHMAKER_RATING
@ CONFIG_RESPAWN_RESTARTQUIETTIME
@ CONFIG_CORPSE_DECAY_ELITE
@ CONFIG_MAX_INSTANCES_PER_HOUR
@ CONFIG_GUILD_EVENT_LOG_COUNT
@ CONFIG_ARENA_START_RATING
@ CONFIG_SOCKET_TIMEOUTTIME
@ CONFIG_MAX_OVERSPEED_PINGS
@ CONFIG_WARDEN_NUM_LUA_CHECKS
@ CONFIG_NO_GRAY_AGGRO_BELOW
@ CONFIG_CHARDELETE_METHOD
@ CONFIG_SESSION_ADD_DELAY
@ CONFIG_MIN_CREATURE_SCALED_XP_RATIO
@ CONFIG_CORPSE_DECAY_OBSOLETE
@ CONFIG_CHARACTER_CREATING_DISABLED_CLASSMASK
@ CONFIG_WARDEN_CLIENT_BAN_DURATION
@ CONFIG_CLIENTCACHE_VERSION
@ CONFIG_TOLBARAD_BATTLETIME
@ CONFIG_DAILY_QUEST_RESET_TIME_HOUR
@ CONFIG_CURRENCY_RESET_DAY
@ CONFIG_QUEST_LOW_LEVEL_HIDE_DIFF
@ CONFIG_CREATURE_PICKPOCKET_REFILL
@ CONFIG_BG_REWARD_WINNER_CONQUEST_FIRST
@ CONFIG_SKILL_CHANCE_ORANGE
@ CONFIG_RESPAWN_DYNAMICMODE
@ CONFIG_CHARACTER_CREATING_MIN_LEVEL_FOR_EVOKER
@ CONFIG_CHATFLOOD_MUTE_TIME
@ CONFIG_STRICT_PET_NAMES
@ CONFIG_CHARACTER_CREATING_DISABLED
@ CONFIG_TOLBARAD_PLR_MIN_LVL
@ CONFIG_QUEST_HIGH_LEVEL_HIDE_DIFF
@ CONFIG_INTERVAL_CHANGEWEATHER
@ CONFIG_PRESERVE_CUSTOM_CHANNEL_INTERVAL
@ CONFIG_PRESERVE_CUSTOM_CHANNEL_DURATION
@ CONFIG_GM_WHISPERING_TO
@ CONFIG_TOLBARAD_RESTART_AFTER_CRASH
@ CONFIG_SKILL_CHANCE_SKINNING_STEPS
@ CONFIG_SKILL_CHANCE_YELLOW
@ CONFIG_RESPAWN_GUIDWARNING_FREQUENCY
@ CONFIG_AUTOBROADCAST_INTERVAL
@ CONFIG_PVP_TOKEN_MAP_TYPE
@ CONFIG_ENABLE_SINFO_LOGIN
@ CONFIG_CHARTER_COST_GUILD
@ CONFIG_CHARDELETE_MIN_LEVEL
@ CONFIG_FORCE_SHUTDOWN_THRESHOLD
@ CONFIG_ARENA_MAX_RATING_DIFFERENCE
@ CONFIG_BG_REWARD_LOSER_HONOR_LAST
@ CONFIG_START_ALLIED_RACE_LEVEL
@ CONFIG_BLACKMARKET_UPDATE_PERIOD
@ CONFIG_TOLBARAD_BONUSTIME
@ CONFIG_AUCTION_TAINTED_SEARCH_DELAY
@ CONFIG_ARENA_RATED_UPDATE_TIMER
@ CONFIG_START_DEMON_HUNTER_PLAYER_LEVEL
@ CONFIG_MIN_PETITION_SIGNS
@ CONFIG_WARDEN_CLIENT_CHECK_HOLDOFF
@ CONFIG_RESPAWN_DYNAMICMINIMUM_CREATURE
@ CONFIG_MIN_LEVEL_STAT_SAVE
@ CONFIG_START_EVOKER_PLAYER_LEVEL
@ CONFIG_BATTLEGROUND_INVITATION_TYPE
@ CONFIG_START_DEATH_KNIGHT_PLAYER_LEVEL
@ CONFIG_MAX_PLAYER_LEVEL
@ CONFIG_MIN_CHARTER_NAME
@ CONFIG_CHAT_CHANNEL_LEVEL_REQ
@ CONFIG_CHARACTERS_PER_ACCOUNT
@ CONFIG_DEATH_SICKNESS_LEVEL
@ CONFIG_CHARTER_COST_ARENA_5v5
@ CONFIG_WINTERGRASP_PLR_MIN_LVL
@ CONFIG_GUILD_RESET_HOUR
@ CONFIG_CURRENCY_RESET_HOUR
@ CONFIG_MAIL_DELIVERY_DELAY
@ CONFIG_WINTERGRASP_BATTLETIME
@ CONFIG_CORPSE_DECAY_MINUSMOB
@ CONFIG_GM_FREEZE_DURATION
@ CONFIG_WINTERGRASP_NOBATTLETIME
@ CONFIG_PACKET_SPOOF_BANDURATION
@ CONFIG_WARDEN_NUM_CLIENT_MOD_CHECKS
@ CONFIG_SKILL_CHANCE_MINING_STEPS
@ CONFIG_START_PLAYER_MONEY
@ CONFIG_GUILD_BANK_EVENT_LOG_COUNT
@ CONFIG_AHBOT_UPDATE_INTERVAL
@ CONFIG_BATTLEGROUND_PREMADE_GROUP_WAIT_FOR_MATCH
@ CONFIG_CORPSE_DECAY_NORMAL
@ CONFIG_WINTERGRASP_RESTART_AFTER_CRASH
@ CONFIG_SOCKET_TIMEOUTTIME_ACTIVE
@ CONFIG_START_PLAYER_LEVEL
@ CONFIG_RESPAWN_GUIDALERTLEVEL
@ CONFIG_MAX_RECRUIT_A_FRIEND_BONUS_PLAYER_LEVEL
@ CONFIG_MAX_RECRUIT_A_FRIEND_BONUS_PLAYER_LEVEL_DIFFERENCE
@ CONFIG_CLEAN_OLD_MAIL_TIME
@ CONFIG_INTERVAL_GRIDCLEAN
@ CONFIG_BG_REWARD_WINNER_HONOR_FIRST
@ CONFIG_ARENA_START_PERSONAL_RATING
@ CONFIG_STRICT_CHARTER_NAMES
@ CONFIG_BG_REWARD_LOSER_HONOR_FIRST
@ CONFIG_RESET_SCHEDULE_WEEK_DAY
@ CONFIG_PACKET_SPOOF_POLICY
@ CONFIG_CHATFLOOD_ADDON_MESSAGE_COUNT
@ CONFIG_FEATURE_SYSTEM_CHARACTER_UNDELETE_COOLDOWN
@ CONFIG_CHAT_YELL_LEVEL_REQ
@ CONFIG_WARDEN_NUM_INJECT_CHECKS
@ CONFIG_BG_REWARD_WINNER_CONQUEST_LAST
@ CONFIG_GUILD_NEWS_LOG_COUNT
@ CONFIG_CORPSE_DECAY_TRIVIAL
@ CONFIG_AUCTION_LEVEL_REQ
@ CONFIG_TOLBARAD_PLR_MAX
@ CONFIG_CHAT_STRICT_LINK_CHECKING_KICK
@ CONFIG_GM_LEVEL_IN_GM_LIST
@ CONFIG_ARENA_RATING_DISCARD_TIMER
@ CONFIG_TOLBARAD_PLR_MIN
@ CONFIG_CHARACTER_CREATING_EVOKERS_PER_REALM
@ CONFIG_CALENDAR_DELETE_OLD_EVENTS_HOUR
@ CONFIG_GM_VISIBLE_STATE
@ CONFIG_NO_GRAY_AGGRO_ABOVE
@ CONFIG_AUCTION_REPLICATE_DELAY
@ CONFIG_GUILD_SAVE_INTERVAL
@ CONFIG_GROUP_VISIBILITY
@ CONFIG_CREATURE_FAMILY_FLEE_DELAY
@ CONFIG_PACKET_SPOOF_BANMODE
@ CONFIG_CHARDELETE_DEMON_HUNTER_MIN_LEVEL
@ CONFIG_XP_BOOST_DAYMASK
@ CONFIG_MIN_DISCOVERED_SCALED_XP_RATIO
@ CONFIG_CHARDELETE_KEEP_DAYS
@ CONFIG_TOLBARAD_NOBATTLETIME
@ CONFIG_MAX_RESULTS_LOOKUP_COMMANDS
@ CONFIG_CREATURE_STOP_FOR_PLAYER
@ CONFIG_INTERVAL_DISCONNECT_TOLERANCE
@ CONFIG_CHAT_WHISPER_LEVEL_REQ
@ CONFIG_SKILL_GAIN_GATHERING
@ CONFIG_CHARTER_COST_ARENA_2v2
@ CONFIG_CHATFLOOD_MESSAGE_DELAY
@ CONFIG_CHARDELETE_DEATH_KNIGHT_MIN_LEVEL
@ CONFIG_DISABLE_BREATHING
@ CONFIG_FACTION_BALANCE_LEVEL_CHECK_DIFF
@ CONFIG_ACC_PASSCHANGESEC
@ CONFIG_STRICT_PLAYER_NAMES
@ CONFIG_LOGDB_CLEARINTERVAL
@ CONFIG_BATTLEGROUND_REPORT_AFK
@ CONFIG_MIN_QUEST_SCALED_XP_RATIO
@ CONFIG_INSTANCE_UNLOAD_DELAY
@ CONFIG_GM_LEVEL_IN_WHO_LIST
@ CONFIG_CURRENCY_RESET_INTERVAL
@ CONFIG_BATTLEGROUND_PREMATURE_FINISH_TIMER
@ CONFIG_HONOR_AFTER_DUEL
@ CONFIG_WEEKLY_QUEST_RESET_TIME_WDAY
@ CONFIG_PERSISTENT_CHARACTER_CLEAN_FLAGS
@ CONFIG_CORPSE_DECAY_RARE
@ CONFIG_CHAT_STRICT_LINK_CHECKING_SEVERITY
@ CONFIG_RESPAWN_GUIDWARNLEVEL
@ CONFIG_WARDEN_CLIENT_RESPONSE_DELAY
@ CONFIG_TALENTS_INSPECTING
@ CONFIG_WINTERGRASP_PLR_MAX
@ CONFIG_CHAT_EMOTE_LEVEL_REQ
@ CONFIG_AUCTION_SEARCH_DELAY
@ CONFIG_CHARACTER_CREATING_MIN_LEVEL_FOR_DEMON_HUNTER
@ CONFIG_MIN_DUALSPEC_LEVEL
@ CONFIG_SKILL_GAIN_CRAFTING
@ CONFIG_RANDOM_BG_RESET_HOUR
@ CONFIG_DB_PING_INTERVAL
@ CONFIG_WORLD_BOSS_LEVEL_DIFF
@ CONFIG_CORPSE_DECAY_RAREELITE
@ CONFIG_CHATFLOOD_MESSAGE_COUNT
@ CONFIG_WARDEN_CLIENT_FAIL_ACTION
@ CONFIG_RESPAWN_DYNAMICMINIMUM_GAMEOBJECT
@ CONFIG_CHARTER_COST_ARENA_3v3
@ CONFIG_CHATFLOOD_ADDON_MESSAGE_DELAY
@ CONFIG_SKILL_CHANCE_GREY
@ CONFIG_INTERVAL_MAPUPDATE
@ CONFIG_CREATURE_FAMILY_ASSISTANCE_DELAY
@ CONFIG_MAX_PRIMARY_TRADE_SKILL
@ CONFIG_RESET_SCHEDULE_HOUR
@ CONFIG_SKILL_CHANCE_GREEN
@ CONFIG_CHAT_SAY_LEVEL_REQ
@ CONFIG_WINTERGRASP_PLR_MIN
@ CONFIG_BLACKMARKET_MAXAUCTIONS
@ CONFIG_BG_REWARD_WINNER_HONOR_LAST
@ CONFIG_CHARACTERS_PER_REALM
@ CONFIG_RESPAWN_MINCHECKINTERVALMS
@ CONFIG_ALLOW_TWO_SIDE_INTERACTION_CALENDAR
@ CONFIG_SHOW_KICK_IN_WORLD
@ CONFIG_QUEST_IGNORE_AUTO_COMPLETE
@ CONFIG_CREATURE_CHECK_INVALID_POSITION
@ CONFIG_SUPPORT_COMPLAINTS_ENABLED
@ CONFIG_CHECK_GOBJECT_LOS
@ CONFIG_INSTANCEMAP_LOAD_GRIDS
@ CONFIG_GM_LOWER_SECURITY
@ CONFIG_PDUMP_NO_OVERWRITE
@ CONFIG_DEATH_CORPSE_RECLAIM_DELAY_PVP
@ CONFIG_START_ALL_SPELLS
@ CONFIG_SUPPORT_BUGS_ENABLED
@ CONFIG_ALLOW_LOGGING_IP_ADDRESSES_IN_DATABASE
@ CONFIG_SHOW_MUTE_IN_WORLD
@ CONFIG_ALLOW_TWO_SIDE_INTERACTION_AUCTION
@ CONFIG_CHAT_PARTY_RAID_WARNINGS
@ CONFIG_DECLINED_NAMES_USED
@ CONFIG_ARENA_LOG_EXTENDED_INFO
@ CONFIG_CALCULATE_GAMEOBJECT_ZONE_AREA_DATA
@ CONFIG_STATS_LIMITS_ENABLE
@ CONFIG_HOTSWAP_INSTALL_ENABLED
@ CONFIG_QUEST_IGNORE_RAID
@ CONFIG_SHOW_BAN_IN_WORLD
@ CONFIG_HOTSWAP_EARLY_TERMINATION_ENABLED
@ CONFIG_CLEAN_CHARACTER_DB
@ CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_PLAYERONLY
@ CONFIG_CHAT_FAKE_MESSAGE_PREVENTING
@ CONFIG_ALLOW_TWO_SIDE_TRADE
@ CONFIG_DEATH_CORPSE_RECLAIM_DELAY_PVE
@ CONFIG_SKILL_PROSPECTING
@ CONFIG_IP_BASED_ACTION_LOGGING
@ CONFIG_PVP_TOKEN_ENABLE
@ CONFIG_FEATURE_SYSTEM_BPAY_STORE_ENABLED
@ CONFIG_CHARACTER_CREATING_DISABLE_ALLIED_RACE_ACHIEVEMENT_REQUIREMENT
@ CONFIG_ARENA_SEASON_IN_PROGRESS
@ CONFIG_DETECT_POS_COLLISION
@ CONFIG_DEATH_BONES_BG_OR_ARENA
@ CONFIG_BASEMAP_LOAD_GRIDS
@ CONFIG_HOTSWAP_PREFIX_CORRECTION_ENABLED
@ CONFIG_BATTLEGROUND_STORE_STATISTICS_ENABLE
@ CONFIG_INSTANCE_IGNORE_RAID
@ CONFIG_RESET_DUEL_HEALTH_MANA
@ CONFIG_BATTLEGROUND_CAST_DESERTER
@ CONFIG_HOTSWAP_BUILD_FILE_RECREATION_ENABLED
@ CONFIG_STATS_SAVE_ONLY_ON_LOGOUT
@ CONFIG_ARENA_QUEUE_ANNOUNCER_ENABLE
@ CONFIG_RESTRICTED_LFG_CHANNEL
@ CONFIG_NO_RESET_TALENT_COST
@ CONFIG_CALCULATE_CREATURE_ZONE_AREA_DATA
@ CONFIG_HOTSWAP_RECOMPILER_ENABLED
@ CONFIG_ALLOW_TWO_SIDE_INTERACTION_CHANNEL
@ CONFIG_PRESERVE_CUSTOM_CHANNELS
@ CONFIG_OFFHAND_CHECK_AT_SPELL_UNLEARN
@ CONFIG_RESET_DUEL_COOLDOWNS
@ CONFIG_DURABILITY_LOSS_IN_PVP
@ CONFIG_INSTANCES_RESET_ANNOUNCE
@ CONFIG_WINTERGRASP_ENABLE
@ CONFIG_QUEST_IGNORE_AUTO_ACCEPT
@ CONFIG_PREVENT_RENAME_CUSTOMIZATION
@ CONFIG_DIE_COMMAND_MODE
@ CONFIG_SUPPORT_SUGGESTIONS_ENABLED
@ CONFIG_VMAP_INDOOR_CHECK
@ CONFIG_CACHE_DATA_QUERIES
@ CONFIG_SUPPORT_TICKETS_ENABLED
@ CONFIG_GAME_OBJECT_CHECK_INVALID_POSITION
@ CONFIG_RESPAWN_DYNAMIC_ESCORTNPC
@ CONFIG_ALLOW_TWO_SIDE_INTERACTION_GROUP
@ CONFIG_DEATH_BONES_WORLD
@ CONFIG_QUEST_ENABLE_QUEST_TRACKER
@ CONFIG_REGEN_HP_CANNOT_REACH_TARGET_IN_RAID
@ CONFIG_BATTLEGROUNDMAP_LOAD_GRIDS
@ CONFIG_BLACKMARKET_ENABLED
@ CONFIG_DBC_ENFORCE_ITEM_ATTRIBUTES
@ CONFIG_START_ALL_EXPLORED
@ CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD
@ CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_ENABLE
@ CONFIG_INSTANCE_IGNORE_LEVEL
@ CONFIG_FEATURE_SYSTEM_CHARACTER_UNDELETE_ENABLED
@ WUPDATE_AUCTIONS_PENDING
@ WUPDATE_CHECK_FILECHANGES
@ RATE_CREATURE_DAMAGE_NORMAL
@ RATE_DROP_ITEM_REFERENCED_AMOUNT
@ RATE_POWER_RUNIC_POWER_LOSS
@ RATE_CREATURE_DAMAGE_RAREELITE
@ RATE_REPUTATION_LOWLEVEL_QUEST
@ RATE_DURABILITY_LOSS_BLOCK
@ RATE_REPUTATION_LOWLEVEL_KILL
@ RATE_INSTANCE_RESET_TIME
@ RATE_CREATURE_DAMAGE_ELITE
@ RATE_REST_OFFLINE_IN_WILDERNESS
@ RATE_CREATURE_SPELLDAMAGE_TRIVIAL
@ RATE_MONEY_MAX_LEVEL_QUEST
@ RATE_CREATURE_SPELLDAMAGE_NORMAL
@ RATE_DROP_ITEM_LEGENDARY
@ RATE_DURABILITY_LOSS_PARRY
@ RATE_REST_OFFLINE_IN_TAVERN_OR_CITY
@ RATE_DROP_ITEM_UNCOMMON
@ RATE_DROP_ITEM_REFERENCED
@ RATE_REPUTATION_RECRUIT_A_FRIEND_BONUS
@ RATE_CREATURE_SPELLDAMAGE_RAREELITE
@ RATE_DURABILITY_LOSS_DAMAGE
@ RATE_DURABILITY_LOSS_ON_DEATH
@ RATE_CREATURE_HP_OBSOLETE
@ RATE_DROP_ITEM_ARTIFACT
@ RATE_CREATURE_DAMAGE_OBSOLETE
@ RATE_CREATURE_DAMAGE_MINUSMOB
@ RATE_POWER_RUNIC_POWER_INCOME
@ RATE_CREATURE_HP_NORMAL
@ RATE_POWER_ARCANE_CHARGES
@ RATE_CREATURE_HP_MINUSMOB
@ RATE_CREATURE_HP_TRIVIAL
@ RATE_CORPSE_DECAY_LOOTED
@ RATE_DURABILITY_LOSS_ABSORB
@ RATE_CREATURE_DAMAGE_RARE
@ RATE_CREATURE_DAMAGE_TRIVIAL
@ RATE_CREATURE_SPELLDAMAGE_ELITE
@ RATE_CREATURE_SPELLDAMAGE_MINUSMOB
@ RATE_CREATURE_HP_RAREELITE
@ RATE_CREATURE_SPELLDAMAGE_OBSOLETE
@ RATE_CREATURE_SPELLDAMAGE_RARE
@ RATE_POWER_COMBO_POINTS_LOSS
@ CONFIG_CHARACTER_CREATING_DISABLED_RACEMASK
@ CONFIG_STATS_LIMITS_DODGE
@ CONFIG_RESPAWN_DYNAMICRATE_CREATURE
@ CONFIG_ARENA_WIN_RATING_MODIFIER_1
@ CONFIG_GROUP_XP_DISTANCE
@ CONFIG_CALL_TO_ARMS_20_PCT
@ CONFIG_LISTEN_RANGE_YELL
@ CONFIG_STATS_LIMITS_PARRY
@ CONFIG_CREATURE_FAMILY_FLEE_ASSISTANCE_RADIUS
@ CONFIG_ARENA_WIN_RATING_MODIFIER_2
@ CONFIG_ARENA_LOSE_RATING_MODIFIER
@ CONFIG_CREATURE_FAMILY_ASSISTANCE_RADIUS
@ CONFIG_LISTEN_RANGE_SAY
@ CONFIG_MAX_RECRUIT_A_FRIEND_DISTANCE
@ CONFIG_ARENA_MATCHMAKER_RATING_MODIFIER
@ CONFIG_CALL_TO_ARMS_5_PCT
@ CONFIG_RESPAWN_DYNAMICRATE_GAMEOBJECT
@ CONFIG_CALL_TO_ARMS_10_PCT
@ CONFIG_STATS_LIMITS_CRIT
@ CONFIG_LISTEN_RANGE_TEXTEMOTE
@ CONFIG_STATS_LIMITS_BLOCK
TC_GAME_API void CleanDatabase()
void CheckQuestDisables()
bool IsVMAPDisabledFor(uint32 entry, uint8 flags)
uint32 GetUptime()
Uptime (in secs)
TC_COMMON_API char const * GetFullVersion()
TC_GAME_API Player * FindConnectedPlayerByName(std::string_view name)
TC_GAME_API void LoadCommandMap()
auto SelectRandomWeightedContainerElement(C const &container, std::span< double > const &weights) -> decltype(std::begin(container))
auto MapEqualRange(M &map, typename M::key_type const &key)
auto MapGetValuePtr(M &map, typename M::key_type const &key)
void MultimapErasePair(M< K, V, Rest... > &multimap, K const &key, V const &value)
@ RBAC_PERM_RECEIVE_GLOBAL_GM_TEXTMESSAGE
uint32 GetAddress() const
Storage class for commands issued for delayed execution.
CommandFinished m_commandFinished
CliCommandHolder(void *callbackArg, char const *command, Print zprint, CommandFinished commandFinished)
void(*)(void *, std::string_view) Print
void(*)(void *, bool success) CommandFinished
void SetInterval(time_t interval)
time_t GetInterval() const
void SetCurrent(time_t current)
Battlenet::RealmHandle Id
struct WorldSession::ConnectToKey::@330 Fields