206 SessionMap::const_iterator itr;
212 Player* player = itr->second->GetPlayer();
237 if (std::shared_ptr<Realm const> currentRealm =
sRealmList->GetCurrentRealm())
259 _motd.reserve(tokens.size());
261 for (std::string_view
const& token : tokens)
262 _motd.emplace_back(token);
276 time_t today = (gameTime /
DAY) *
DAY;
326 SessionMap::const_iterator itr =
m_sessions.find(
id);
338 SessionMap::const_iterator itr =
m_sessions.find(
id);
342 if (itr->second->PlayerLoading())
345 itr->second->
KickPlayer(
"World::RemoveSession");
371 s->
KickPlayer(
"World::AddSession_ Couldn't remove the other session while on loading screen");
377 bool decrease_session =
true;
388 decrease_session =
false;
404 if (decrease_session)
430 TC_LOG_INFO(
"misc",
"Server Population ({}).", popu);
503 if (!found && sessions)
521 (*iter)->SendAuthWaitQueue(position);
526template <
typename T,
typename IndexType>
536template <
typename T, auto Max>
539template <
typename T,
typename IndexType>
542 if constexpr (!std::is_same_v<T, bool>)
544 if (definition.
Min && value < *definition.
Min)
546 TC_LOG_ERROR(
"server.loading",
"{} {} must be >= {}. Using {} instead.", definition.
Name, value, *definition.
Min, *definition.
Min);
547 value = *definition.
Min;
549 if (definition.
Max && value > *definition.
Max)
551 TC_LOG_ERROR(
"server.loading",
"{} {} must be <= {}. Using {} instead.", definition.
Name, value, *definition.
Max, *definition.
Max);
552 value = *definition.
Max;
557 if (value != oldValue)
558 TC_LOG_ERROR(
"server.loading",
"{} option can't be changed at worldserver.conf reload, using current value ({}).", definition.
Name, oldValue);
569 std::vector<std::string> configErrors;
572 for (std::string
const& configError : configErrors)
573 TC_LOG_ERROR(
"misc",
"World settings reload fail: {}.", configError);
577 sLog->LoadFromConfig();
593 SetMotd(
sConfigMgr->GetStringDefault(
"Motd"sv,
"Welcome to a Trinity Core Server."sv));
630 { .Name =
"ActivateWeather"sv, .DefaultValue =
true, .Index =
CONFIG_WEATHER },
655 { .Name =
"mmap.enablePathFinding"sv, .DefaultValue =
true, .Index =
CONFIG_ENABLE_MMAPS },
661 { .Name =
"PlayerStart.AllReputation"sv, .DefaultValue =
false, .Index =
CONFIG_START_ALL_REP },
701 { .Name =
"Compression"sv, .DefaultValue = 1, .Index =
CONFIG_COMPRESSION, .Min = Z_BEST_SPEED, .Max = Z_BEST_COMPRESSION },
723 { .Name =
"WorldServerPort"sv, .DefaultValue = 8085, .Index =
CONFIG_PORT_WORLD, .Min = 1, .Max = std::numeric_limits<uint16>::max(), .Reloadable =
false },
730 { .Name =
"GameType"sv, .DefaultValue = 0, .Index =
CONFIG_GAME_TYPE, .Reloadable =
false },
771 { .Name =
"GM.Chat"sv, .DefaultValue = 2, .Index =
CONFIG_GM_CHAT },
781 { .Name =
"UpdateUptimeInterval"sv, .DefaultValue = 10, .Index =
CONFIG_UPTIME_UPDATE, .Min = 1 },
855 { .Name =
"MaxWhoListReturns"sv, .DefaultValue = 49, .Index =
CONFIG_MAX_WHO },
860 { .Name =
"MapUpdate.Threads"sv, .DefaultValue = 1, .Index =
CONFIG_NUMTHREADS, .Min = 1 },
936 { .Name =
"Rate.Health"sv, .DefaultValue = 1.0f, .Index =
RATE_HEALTH, .Min = 0.01f },
937 { .Name =
"Rate.Mana"sv, .DefaultValue = 1.0f, .Index =
RATE_POWER_MANA, .Min = 0.01f },
939 { .Name =
"Rate.Rage.Loss"sv, .DefaultValue = 1.0f, .Index =
RATE_POWER_RAGE_LOSS, .Min = 0.01f },
940 { .Name =
"Rate.Focus"sv, .DefaultValue = 1.0f, .Index =
RATE_POWER_FOCUS, .Min = 0.01f },
941 { .Name =
"Rate.Energy"sv, .DefaultValue = 1.0f, .Index =
RATE_POWER_ENERGY, .Min = 0.01f },
945 { .Name =
"Rate.SoulShards.Loss"sv, .DefaultValue = 1.0f, .Index =
RATE_POWER_SOUL_SHARDS, .Min = 0.01f },
946 { .Name =
"Rate.LunarPower.Loss"sv, .DefaultValue = 1.0f, .Index =
RATE_POWER_LUNAR_POWER, .Min = 0.01f },
947 { .Name =
"Rate.HolyPower.Loss"sv, .DefaultValue = 1.0f, .Index =
RATE_POWER_HOLY_POWER, .Min = 0.01f },
948 { .Name =
"Rate.Maelstrom.Loss"sv, .DefaultValue = 1.0f, .Index =
RATE_POWER_MAELSTROM, .Min = 0.01f },
949 { .Name =
"Rate.Chi.Loss"sv, .DefaultValue = 1.0f, .Index =
RATE_POWER_CHI, .Min = 0.01f },
950 { .Name =
"Rate.Insanity.Loss"sv, .DefaultValue = 1.0f, .Index =
RATE_POWER_INSANITY, .Min = 0.01f },
952 { .Name =
"Rate.Fury.Loss"sv, .DefaultValue = 1.0f, .Index =
RATE_POWER_FURY, .Min = 0.01f },
953 { .Name =
"Rate.Pain.Loss"sv, .DefaultValue = 1.0f, .Index =
RATE_POWER_PAIN, .Min = 0.01f },
954 { .Name =
"Rate.Essence.Loss"sv, .DefaultValue = 1.0f, .Index =
RATE_POWER_ESSENCE, .Min = 0.01f },
965 { .Name =
"Rate.Drop.Money"sv, .DefaultValue = 1.0f, .Index =
RATE_DROP_MONEY },
966 { .Name =
"Rate.XP.Kill"sv, .DefaultValue = 1.0f, .Index =
RATE_XP_KILL },
967 { .Name =
"Rate.XP.BattlegroundKill"sv, .DefaultValue = 1.0f, .Index =
RATE_XP_BG_KILL },
968 { .Name =
"Rate.XP.Quest"sv, .DefaultValue = 1.0f, .Index =
RATE_XP_QUEST },
969 { .Name =
"Rate.XP.Explore"sv, .DefaultValue = 1.0f, .Index =
RATE_XP_EXPLORE },
970 { .Name =
"XP.Boost.Rate"sv, .DefaultValue = 2.0f, .Index =
RATE_XP_BOOST },
971 { .Name =
"Rate.RepairCost"sv, .DefaultValue = 1.0f, .Index =
RATE_REPAIRCOST, .Min = 0.0f },
998 { .Name =
"Rate.Rest.InGame"sv, .DefaultValue = 1.0f, .Index =
RATE_REST_INGAME },
1001 { .Name =
"Rate.Damage.Fall"sv, .DefaultValue = 1.0f, .Index =
RATE_DAMAGE_FALL },
1002 { .Name =
"Rate.Auction.Time"sv, .DefaultValue = 1.0f, .Index =
RATE_AUCTION_TIME },
1004 { .Name =
"Rate.Auction.Cut"sv, .DefaultValue = 1.0f, .Index =
RATE_AUCTION_CUT },
1005 { .Name =
"Rate.Honor"sv, .DefaultValue = 1.0f, .Index =
RATE_HONOR },
1007 { .Name =
"Rate.MoveSpeed"sv, .DefaultValue = 1.0f, .Index =
RATE_MOVESPEED, .Min = 0.01f },
1014 { .Name =
"Rate.Quest.Money.Reward"sv, .DefaultValue = 1.0f, .Index =
RATE_MONEY_QUEST, .Min = 0.0f },
1045 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");
1050 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");
1066 auto validateStartLevel = [&](
WorldIntConfigs config,
char const* name)
1071 TC_LOG_ERROR(
"server.loading",
"{} ({}) must be in range 1..MaxPlayerLevel({}). Set to {}.", name,
m_int_configs[config], maxLevel, maxLevel);
1085 TC_LOG_ERROR(
"server.loading",
"GM.StartLevel ({}) must be in range StartPlayerLevel({})..{}. Set to {}.",
1090 TC_LOG_INFO(
"server.loading",
"Will clear `logs` table of entries older than {} seconds every {} minutes.",
1109 auto validateVisibilityDistance = [&](
WorldFloatConfigs config,
char const* name)
1114 TC_LOG_ERROR(
"server.loading",
"{} can't be less max aggro radius {}", name, minVisibilityDistance);
1149 _guidWarningMsg =
sConfigMgr->GetStringDefault(
"Respawn.WarningMessage"sv,
"There will be an unscheduled server restart at 03:00. The server will be available again shortly after."sv);
1153 std::string dataPath =
sConfigMgr->GetStringDefault(
"DataDir"sv,
"./"sv);
1154 if (dataPath.empty() || (dataPath.back() !=
'/' && dataPath.back() !=
'\\'))
1155 dataPath.push_back(
'/');
1157 if (dataPath[0] ==
'~')
1159#if TRINITY_PLATFORM != TRINITY_PLATFORM_WINDOWS
1160#define USER_HOME_DIRECTORY_VARIABLE "HOME"
1162#define USER_HOME_DIRECTORY_VARIABLE "USERPROFILE"
1165 dataPath.replace(0, 1, home);
1166#undef USER_HOME_DIRECTORY_VARIABLE
1172 TC_LOG_ERROR(
"server.loading",
"DataDir option can't be changed at worldserver.conf reload, using current value ({}).",
m_dataPath);
1182 bool enableLOS =
sConfigMgr->GetBoolDefault(
"vmap.enableLOS"sv,
true);
1183 bool enableHeight =
sConfigMgr->GetBoolDefault(
"vmap.enableHeight"sv,
true);
1186 TC_LOG_ERROR(
"server.loading",
"VMap height checking disabled! Creatures movements and other various things WILL be broken! Expect no support.");
1194 TC_LOG_WARN(
"server.loading",
"PlayerStart.AllSpells enabled - may not function as intended!");
1268 TC_LOG_FATAL(
"server.loading",
"Unable to load map and vmap data for starting zones - server shutting down!");
1280 TC_LOG_INFO(
"server.loading",
"Loading Trinity strings...");
1291 LoginDatabase.PExecute(
"UPDATE realmlist SET icon = {}, timezone = {} WHERE id = '{}'", server_type, realm_zone,
sRealmList->GetCurrentRealmId().Realm);
1293 TC_LOG_INFO(
"server.loading",
"Loading GameObject models...");
1296 TC_LOG_FATAL(
"server.loading",
"Unable to load gameobject models (part of vmaps), objects using WMO models will crash the client - server shutting down!");
1300 TC_LOG_INFO(
"server.loading",
"Initialize data stores...");
1309 TC_LOG_INFO(
"server.loading",
"Loading hotfix blobs...");
1311 TC_LOG_INFO(
"server.loading",
"Loading hotfix info...");
1313 TC_LOG_INFO(
"server.loading",
"Loading hotfix optional data...");
1315 TC_LOG_INFO(
"server.loading",
"Indexing loaded data stores...");
1332 std::unordered_map<uint32, std::vector<uint32>> mapData;
1335 mapData.emplace(std::piecewise_construct, std::forward_as_tuple(mapEntry->ID), std::forward_as_tuple());
1336 if (mapEntry->ParentMapID != -1)
1338 ASSERT(mapEntry->CosmeticParentMapID == -1 || mapEntry->ParentMapID == mapEntry->CosmeticParentMapID,
1339 "Inconsistent parent map data for map %u (ParentMapID = %hd, CosmeticParentMapID = %hd)",
1340 mapEntry->ID, mapEntry->ParentMapID, mapEntry->CosmeticParentMapID);
1342 mapData[mapEntry->ParentMapID].push_back(mapEntry->ID);
1344 else if (mapEntry->CosmeticParentMapID != -1)
1345 mapData[mapEntry->CosmeticParentMapID].push_back(mapEntry->ID);
1358 TC_LOG_INFO(
"server.loading",
"Initializing PlayerDump tables...");
1361 TC_LOG_INFO(
"server.loading",
"Loading SpellInfo store...");
1364 TC_LOG_INFO(
"server.loading",
"Loading serverside spells...");
1367 TC_LOG_INFO(
"server.loading",
"Loading SpellInfo corrections...");
1370 TC_LOG_INFO(
"server.loading",
"Loading SkillLineAbilityMultiMap Data...");
1373 TC_LOG_INFO(
"server.loading",
"Loading SpellInfo custom attributes...");
1374 sSpellMgr->LoadSpellInfoCustomAttributes();
1376 TC_LOG_INFO(
"server.loading",
"Loading SpellInfo diminishing infos...");
1379 TC_LOG_INFO(
"server.loading",
"Loading SpellInfo immunity infos...");
1382 TC_LOG_INFO(
"server.loading",
"Loading SpellInfo target caps...");
1385 TC_LOG_INFO(
"server.loading",
"Loading PetFamilySpellsStore Data...");
1388 TC_LOG_INFO(
"server.loading",
"Loading Spell Totem models...");
1391 TC_LOG_INFO(
"server.loading",
"Loading Traits...");
1394 TC_LOG_INFO(
"server.loading",
"Loading languages...");
1397 TC_LOG_INFO(
"server.loading",
"Loading languages words...");
1400 TC_LOG_INFO(
"server.loading",
"Loading Instance Template...");
1404 TC_LOG_INFO(
"server.loading",
"Loading instances...");
1408 TC_LOG_INFO(
"server.loading",
"Loading Localization strings...");
1426 TC_LOG_INFO(
"server.loading",
"Loading Account Roles and Permissions...");
1429 TC_LOG_INFO(
"server.loading",
"Loading Page Texts...");
1432 TC_LOG_INFO(
"server.loading",
"Loading Game Object Templates...");
1436 TC_LOG_INFO(
"server.loading",
"Loading Game Object template addons...");
1439 TC_LOG_INFO(
"server.loading",
"Loading Transport templates...");
1442 TC_LOG_INFO(
"server.loading",
"Loading Transport animations and rotations...");
1445 TC_LOG_INFO(
"server.loading",
"Loading Transport spawns...");
1448 TC_LOG_INFO(
"server.loading",
"Loading Spell Rank Data...");
1451 TC_LOG_INFO(
"server.loading",
"Loading Spell Required Data...");
1454 TC_LOG_INFO(
"server.loading",
"Loading Spell Group types...");
1457 TC_LOG_INFO(
"server.loading",
"Loading Spell Learn Skills...");
1460 TC_LOG_INFO(
"server.loading",
"Loading SpellInfo SpellSpecific and AuraState...");
1461 sSpellMgr->LoadSpellInfoSpellSpecificAndAuraState();
1463 TC_LOG_INFO(
"server.loading",
"Loading Spell Learn Spells...");
1466 TC_LOG_INFO(
"server.loading",
"Loading Spell Proc conditions and data...");
1469 TC_LOG_INFO(
"server.loading",
"Loading Aggro Spells Definitions...");
1472 TC_LOG_INFO(
"server.loading",
"Loading Spell Group Stack Rules...");
1475 TC_LOG_INFO(
"server.loading",
"Loading NPC Texts...");
1478 TC_LOG_INFO(
"server.loading",
"Loading Enchant Spells Proc datas...");
1481 TC_LOG_INFO(
"server.loading",
"Loading item bonus data...");
1484 TC_LOG_INFO(
"server.loading",
"Loading Random item bonus list definitions...");
1487 TC_LOG_INFO(
"server.loading",
"Loading Disables");
1490 TC_LOG_INFO(
"server.loading",
"Loading Items...");
1493 TC_LOG_INFO(
"server.loading",
"Loading Item set names...");
1499 TC_LOG_INFO(
"server.loading",
"Loading Creature Model Based Info Data...");
1502 TC_LOG_INFO(
"server.loading",
"Loading Creature templates...");
1505 TC_LOG_INFO(
"server.loading",
"Loading Equipment templates...");
1508 TC_LOG_INFO(
"server.loading",
"Loading Creature template addons...");
1511 TC_LOG_INFO(
"server.loading",
"Loading Creature template difficulty...");
1512 sObjectMgr->LoadCreatureTemplateDifficulty();
1514 TC_LOG_INFO(
"server.loading",
"Loading Creature template sparring...");
1517 TC_LOG_INFO(
"server.loading",
"Loading Reputation Reward Rates...");
1520 TC_LOG_INFO(
"server.loading",
"Loading Creature Reputation OnKill Data...");
1523 TC_LOG_INFO(
"server.loading",
"Loading Reputation Spillover Data...");
1524 sObjectMgr->LoadReputationSpilloverTemplate();
1526 TC_LOG_INFO(
"server.loading",
"Loading Points Of Interest Data...");
1529 TC_LOG_INFO(
"server.loading",
"Loading Creature Base Stats...");
1532 TC_LOG_INFO(
"server.loading",
"Loading Spawn Group Templates...");
1535 TC_LOG_INFO(
"server.loading",
"Loading Creature Data...");
1538 TC_LOG_INFO(
"server.loading",
"Loading Temporary Summon Data...");
1541 TC_LOG_INFO(
"server.loading",
"Loading pet levelup spells...");
1544 TC_LOG_INFO(
"server.loading",
"Loading pet default spells additional to levelup spells...");
1547 TC_LOG_INFO(
"server.loading",
"Loading Creature Addon Data...");
1550 TC_LOG_INFO(
"server.loading",
"Loading Creature Movement Overrides...");
1553 TC_LOG_INFO(
"server.loading",
"Loading Gameobject Data...");
1556 TC_LOG_INFO(
"server.loading",
"Loading Spawn Group Data...");
1559 TC_LOG_INFO(
"server.loading",
"Loading instance spawn groups...");
1562 TC_LOG_INFO(
"server.loading",
"Loading GameObject Addon Data...");
1565 TC_LOG_INFO(
"server.loading",
"Loading GameObject faction and flags overrides...");
1568 TC_LOG_INFO(
"server.loading",
"Loading GameObject Quest Items...");
1571 TC_LOG_INFO(
"server.loading",
"Loading Creature Quest Items...");
1574 TC_LOG_INFO(
"server.loading",
"Loading Creature Quest Currencies...");
1577 TC_LOG_INFO(
"server.loading",
"Loading Creature Linked Respawn...");
1580 TC_LOG_INFO(
"server.loading",
"Loading Weather Data...");
1583 TC_LOG_INFO(
"server.loading",
"Loading Quests...");
1587 TC_LOG_INFO(
"server.loading",
"Checking Quest Disables");
1590 TC_LOG_INFO(
"server.loading",
"Loading Quest POI");
1593 TC_LOG_INFO(
"server.loading",
"Loading Quests Starters and Enders...");
1596 TC_LOG_INFO(
"server.loading",
"Loading Quest Greetings...");
1602 TC_LOG_INFO(
"server.loading",
"Loading Objects Pooling Data...");
1604 TC_LOG_INFO(
"server.loading",
"Loading Quest Pooling Data...");
1607 TC_LOG_INFO(
"server.loading",
"Loading World State templates...");
1610 TC_LOG_INFO(
"server.loading",
"Loading Game Event Data...");
1613 TC_LOG_INFO(
"server.loading",
"Loading creature summoned data...");
1616 TC_LOG_INFO(
"server.loading",
"Loading UNIT_NPC_FLAG_SPELLCLICK Data...");
1619 TC_LOG_INFO(
"server.loading",
"Loading Vehicle Templates...");
1622 TC_LOG_INFO(
"server.loading",
"Loading Vehicle Template Accessories...");
1623 sObjectMgr->LoadVehicleTemplateAccessories();
1625 TC_LOG_INFO(
"server.loading",
"Loading Vehicle Accessories...");
1628 TC_LOG_INFO(
"server.loading",
"Loading Vehicle Seat Addon Data...");
1631 TC_LOG_INFO(
"server.loading",
"Loading SpellArea Data...");
1634 TC_LOG_INFO(
"server.loading",
"Loading World locations...");
1637 TC_LOG_INFO(
"server.loading",
"Loading Area Trigger Teleports definitions...");
1640 TC_LOG_INFO(
"server.loading",
"Loading Area Trigger Polygon data...");
1643 TC_LOG_INFO(
"server.loading",
"Loading Access Requirements...");
1646 TC_LOG_INFO(
"server.loading",
"Loading Quest Area Triggers...");
1649 TC_LOG_INFO(
"server.loading",
"Loading Tavern Area Triggers...");
1652 TC_LOG_INFO(
"server.loading",
"Loading AreaTrigger script names...");
1655 TC_LOG_INFO(
"server.loading",
"Loading LFG entrance positions...");
1658 TC_LOG_INFO(
"server.loading",
"Loading LFG rewards...");
1661 TC_LOG_INFO(
"server.loading",
"Loading Graveyard-zone links...");
1664 TC_LOG_INFO(
"server.loading",
"Loading spell pet auras...");
1667 TC_LOG_INFO(
"server.loading",
"Loading Spell target coordinates...");
1670 TC_LOG_INFO(
"server.loading",
"Loading linked spells...");
1673 TC_LOG_INFO(
"server.loading",
"Loading Scenes Templates...");
1676 TC_LOG_INFO(
"server.loading",
"Loading Player Create Data...");
1679 TC_LOG_INFO(
"server.loading",
"Loading Exploration BaseXP Data...");
1682 TC_LOG_INFO(
"server.loading",
"Loading Pet Name Parts...");
1685 TC_LOG_INFO(
"server.loading",
"Loading AreaTrigger Templates...");
1688 TC_LOG_INFO(
"server.loading",
"Loading AreaTrigger Spawns...");
1691 TC_LOG_INFO(
"server.loading",
"Loading Conversation Templates...");
1694 TC_LOG_INFO(
"server.loading",
"Loading Player Choices...");
1697 TC_LOG_INFO(
"server.loading",
"Loading Spawn Tracking Templates...");
1700 TC_LOG_INFO(
"server.loading",
"Loading Spawn Tracking Quest Objectives...");
1701 sObjectMgr->LoadSpawnTrackingQuestObjectives();
1703 TC_LOG_INFO(
"server.loading",
"Loading Spawn Tracking Spawns...");
1706 TC_LOG_INFO(
"server.loading",
"Loading Spawn Tracking Spawn States...");
1711 TC_LOG_INFO(
"server.loading",
"Loading Player Choices Locales...");
1715 TC_LOG_INFO(
"server.loading",
"Loading UIMap questlines...");
1718 TC_LOG_INFO(
"server.loading",
"Loading UIMap quests...");
1721 TC_LOG_INFO(
"server.loading",
"Loading Jump Charge Params...");
1726 TC_LOG_INFO(
"server.loading",
"Loading the max pet number...");
1729 TC_LOG_INFO(
"server.loading",
"Loading pet level stats...");
1732 TC_LOG_INFO(
"server.loading",
"Loading Player level dependent mail rewards...");
1738 TC_LOG_INFO(
"server.loading",
"Loading Skill Discovery Table...");
1741 TC_LOG_INFO(
"server.loading",
"Loading Skill Extra Item Table...");
1744 TC_LOG_INFO(
"server.loading",
"Loading Skill Perfection Data Table...");
1747 TC_LOG_INFO(
"server.loading",
"Loading Skill Fishing base level requirements...");
1750 TC_LOG_INFO(
"server.loading",
"Loading skill tier info...");
1753 TC_LOG_INFO(
"server.loading",
"Loading Criteria Modifier trees...");
1755 TC_LOG_INFO(
"server.loading",
"Loading Criteria Lists...");
1757 TC_LOG_INFO(
"server.loading",
"Loading Criteria Data...");
1759 TC_LOG_INFO(
"server.loading",
"Loading Achievements...");
1761 TC_LOG_INFO(
"server.loading",
"Loading Achievements Scripts...");
1763 TC_LOG_INFO(
"server.loading",
"Loading Achievement Rewards...");
1768 TC_LOG_INFO(
"server.loading",
"Loading Achievement Reward Locales...");
1771 TC_LOG_INFO(
"server.loading",
"Loading Completed Achievements...");
1775 TC_LOG_INFO(
"server.loading",
"Loading character cache store...");
1779 TC_LOG_INFO(
"server.loading",
"Loading Auctions...");
1784 TC_LOG_INFO(
"server.loading",
"Loading Black Market Templates...");
1787 TC_LOG_INFO(
"server.loading",
"Loading Black Market Auctions...");
1791 TC_LOG_INFO(
"server.loading",
"Loading Guild rewards...");
1794 TC_LOG_INFO(
"server.loading",
"Loading Guilds...");
1797 TC_LOG_INFO(
"server.loading",
"Loading ArenaTeams...");
1800 TC_LOG_INFO(
"server.loading",
"Loading Groups...");
1803 TC_LOG_INFO(
"server.loading",
"Loading ReservedNames...");
1806 TC_LOG_INFO(
"server.loading",
"Loading GameObjects for quests...");
1809 TC_LOG_INFO(
"server.loading",
"Loading BattleMasters...");
1812 TC_LOG_INFO(
"server.loading",
"Loading GameTeleports...");
1815 TC_LOG_INFO(
"server.loading",
"Loading Trainers...");
1818 TC_LOG_INFO(
"server.loading",
"Loading Gossip menu...");
1821 TC_LOG_INFO(
"server.loading",
"Loading Gossip menu options...");
1824 TC_LOG_INFO(
"server.loading",
"Loading Gossip menu addon...");
1827 TC_LOG_INFO(
"server.loading",
"Loading Creature Template Gossip...");
1830 TC_LOG_INFO(
"server.loading",
"Loading Creature trainers...");
1833 TC_LOG_INFO(
"server.loading",
"Loading Vendors...");
1836 TC_LOG_INFO(
"server.loading",
"Loading Waypoint paths...");
1839 TC_LOG_INFO(
"server.loading",
"Loading Creature Formations...");
1842 TC_LOG_INFO(
"server.loading",
"Loading Persistend World Variables...");
1850 TC_LOG_INFO(
"server.loading",
"Loading Conditions...");
1853 TC_LOG_INFO(
"server.loading",
"Loading faction change achievement pairs...");
1856 TC_LOG_INFO(
"server.loading",
"Loading faction change spell pairs...");
1859 TC_LOG_INFO(
"server.loading",
"Loading faction change quest pairs...");
1862 TC_LOG_INFO(
"server.loading",
"Loading faction change item pairs...");
1865 TC_LOG_INFO(
"server.loading",
"Loading faction change reputation pairs...");
1868 TC_LOG_INFO(
"server.loading",
"Loading faction change title pairs...");
1871 TC_LOG_INFO(
"server.loading",
"Loading mount definitions...");
1874 TC_LOG_INFO(
"server.loading",
"Loading warband scene definitions...");
1877 TC_LOG_INFO(
"server.loading",
"Loading GM bugs...");
1880 TC_LOG_INFO(
"server.loading",
"Loading GM complaints...");
1883 TC_LOG_INFO(
"server.loading",
"Loading GM suggestions...");
1889 TC_LOG_INFO(
"server.loading",
"Loading garrison info...");
1893 TC_LOG_INFO(
"server.loading",
"Returning old mails...");
1896 TC_LOG_INFO(
"server.loading",
"Loading Autobroadcasts...");
1903 TC_LOG_INFO(
"server.loading",
"Loading spell script names...");
1906 TC_LOG_INFO(
"server.loading",
"Loading Creature Texts...");
1911 TC_LOG_INFO(
"server.loading",
"Loading Creature Text Locales...");
1915 TC_LOG_INFO(
"server.loading",
"Loading creature StaticFlags overrides...");
1916 sObjectMgr->LoadCreatureStaticFlagsOverride();
1918 TC_LOG_INFO(
"server.loading",
"Initializing Scripts...");
1922 TC_LOG_INFO(
"server.loading",
"Validating spell scripts...");
1925 TC_LOG_INFO(
"server.loading",
"Loading SmartAI scripts...");
1928 TC_LOG_INFO(
"server.loading",
"Loading Calendar data...");
1931 TC_LOG_INFO(
"server.loading",
"Loading Petitions...");
1934 TC_LOG_INFO(
"server.loading",
"Loading Signatures...");
1937 TC_LOG_INFO(
"server.loading",
"Loading Item loot...");
1940 TC_LOG_INFO(
"server.loading",
"Initialize query data...");
1943 TC_LOG_INFO(
"server.loading",
"Initialize commands...");
1947 TC_LOG_INFO(
"server.loading",
"Initialize game time and timers");
1950 LoginDatabase.PExecute(
"INSERT INTO uptime (realmid, starttime, uptime, revision) VALUES({}, {}, 0, '{}')",
1985 localtime_r(&gameTime, &localTm);
1993 TC_LOG_INFO(
"server.loading",
"Starting Map System");
1996 TC_LOG_INFO(
"server.loading",
"Starting Game Event system...");
2003 TC_LOG_INFO(
"server.loading",
"Initialize AuctionHouseBot...");
2006 TC_LOG_INFO(
"server.loading",
"Initializing chat channels...");
2009 TC_LOG_INFO(
"server.loading",
"Initializing Opcodes...");
2014 TC_LOG_INFO(
"server.loading",
"Starting Arena Season...");
2020 TC_LOG_INFO(
"server.loading",
"Starting Battleground System");
2025 TC_LOG_INFO(
"server.loading",
"Starting Outdoor PvP System");
2029 TC_LOG_INFO(
"server.loading",
"Starting Battlefield System");
2032 TC_LOG_INFO(
"server.loading",
"Deleting expired bans...");
2033 LoginDatabase.Execute(
"DELETE FROM ip_banned WHERE unbandate <= UNIX_TIMESTAMP() AND unbandate<>bandate");
2035 TC_LOG_INFO(
"server.loading",
"Initializing quest reset times...");
2039 TC_LOG_INFO(
"server.loading",
"Calculate random battleground reset time...");
2042 TC_LOG_INFO(
"server.loading",
"Calculate deletion of old calendar events time...");
2045 TC_LOG_INFO(
"server.loading",
"Calculate guild limitation(s) reset time...");
2048 TC_LOG_INFO(
"server.loading",
"Calculate next currency reset time...");
2051 TC_LOG_INFO(
"server.loading",
"Loading race and class expansion requirements...");
2052 sObjectMgr->LoadRaceAndClassExpansionRequirements();
2054 TC_LOG_INFO(
"server.loading",
"Loading character templates...");
2057 TC_LOG_INFO(
"server.loading",
"Loading battle pets info...");
2060 TC_LOG_INFO(
"server.loading",
"Loading scenarios");
2064 TC_LOG_INFO(
"server.loading",
"Loading scenario poi data");
2067 TC_LOG_INFO(
"server.loading",
"Loading phase names...");
2070 TC_LOG_INFO(
"server.loading",
"Loading transmog data...");
2075 TC_LOG_INFO(
"server.worldserver",
"World initialized in {} minutes {} seconds", startupDuration / 60000, startupDuration % 60000 / 1000);
2104 TC_LOG_INFO(
"server.loading",
">> Loaded 0 autobroadcasts definitions. DB table `autobroadcast` is empty for this realm!");
2110 Field* fields = result->Fetch();
2115 }
while (result->NextRow());
2389 TC_LOG_DEBUG(
"misc",
"Ping MySQL to keep connection alive");
2445 SessionMap::const_iterator itr;
2449 itr->second->GetPlayer() &&
2450 itr->second->GetPlayer()->IsInWorld() &&
2451 itr->second != self &&
2452 (!team || itr->second->GetPlayer()->GetTeam() == team))
2454 itr->second->SendPacket(packet);
2475 if (!team || player->
GetTeam() == team)
2489 for (std::unique_ptr<WorldPackets::Packet>
const& packet :
Packets)
2493 std::vector<std::unique_ptr<WorldPackets::Packet>>
Packets;
2526 void do_helper(std::vector<std::unique_ptr<WorldPackets::Packet>>& dataList,
char* text)
2533 dataList.emplace_back(packet);
2546 va_start(ap, string_id);
2552 if (!itr->second || !itr->second->GetPlayer() || !itr->second->GetPlayer()->IsInWorld())
2555 wt_do(itr->second->GetPlayer());
2565 va_start(ap, string_id);
2591 char* buf = strdup(text);
2607 bool foundPlayerToSend =
false;
2608 SessionMap::const_iterator itr;
2613 itr->second->GetPlayer() &&
2614 itr->second->GetPlayer()->IsInWorld() &&
2615 itr->second->GetPlayer()->GetZoneId() == zone &&
2616 itr->second != self &&
2617 (!team || itr->second->GetPlayer()->GetTeam() == team))
2619 itr->second->SendPacket(packet);
2620 foundPlayerToSend =
true;
2624 return foundPlayerToSend;
2642 itr->second->KickPlayer(
"World::KickAll");
2650 if (itr->second->GetSecurity() < sec)
2651 itr->second->KickPlayer(
"World::KickAllLess");
2658 return BanAccount(mode, nameOrIP, duration_secs, reason, author);
2707 if (!resultAccounts)
2719 Field* fieldsAccount = resultAccounts->Fetch();
2727 trans->Append(stmt);
2734 trans->Append(stmt);
2738 if (std::string(sess->GetPlayerName()) != author)
2739 sess->KickPlayer(
"World::BanAccount Banning account");
2740 }
while (resultAccounts->NextRow());
2799 trans->Append(stmt);
2806 trans->Append(stmt);
2906 if (!reason.empty())
2907 str +=
" - " + reason;
2968 std::pair<std::weak_ptr<WorldSocket>,
uint64> linkInfo;
2986 [[maybe_unused]]
uint32 currentSessionId = itr->first;
2989 if (!pSession->
Update(diff, updater))
3005 void* callbackArg =
nullptr;
3009 TC_LOG_INFO(
"misc",
"CLI command under processing...");
3027 return pair.second.Weight;
3034 else if (abcenter == 1)
3036 else if (abcenter == 2)
3042 TC_LOG_DEBUG(
"misc",
"AutoBroadcast: '{}'", itr->second.Message);
3051 _UpdateRealmCharCount(std::move(result));
3057 if (resultCharCount)
3059 Field* fields = resultCharCount->Fetch();
3061 uint8 charCount =
uint8(fields[1].GetUInt64());
3069 trans->Append(stmt);
3099 if (
Player* player = itr->second->GetPlayer())
3100 player->DailyReset();
3113 TC_LOG_INFO(
"misc",
"Daily quests for all characters have been reset.");
3120 int wday = time.tm_wday;
3124 t += (
DAY * (target - wday));
3135 if (
Player* player = itr->second->GetPlayer())
3136 player->ResetWeeklyQuestStatus();
3152 TC_LOG_INFO(
"misc",
"Weekly quests for all characters have been reset.");
3159 if (time.tm_mday == 1)
3164 return mktime(&time);
3174 if (
Player* player = itr->second->GetPlayer())
3175 player->ResetMonthlyQuestStatus();
3188 TC_LOG_INFO(
"misc",
"Monthly quests for all characters have been reset.");
3211 localtime_r(&curTime, &localTm);
3217 time_t nextDayResetTime = mktime(&localTm);
3220 if (curTime >= nextDayResetTime)
3221 nextDayResetTime +=
DAY;
3238 if (currentDeletionTime < now)
3243 if (!currentDeletionTime)
3256 localtime_r(&curTime, &localTm);
3262 time_t nextDayResetTime = mktime(&localTm);
3265 if (curTime >= nextDayResetTime)
3266 nextDayResetTime +=
DAY;
3284 localtime_r(&curTime, &localTm);
3292 time_t nextWeekResetTime = mktime(&localTm);
3295 if (curTime >= nextWeekResetTime)
3307 CharacterDatabase.Execute(
"UPDATE `character_currency` SET `WeeklyQuantity` = 0");
3310 if (itr->second->GetPlayer())
3311 itr->second->GetPlayer()->ResetCurrencyWeekCap();
3319 TC_LOG_INFO(
"misc",
"Seasonal quests reset for all characters.");
3327 if (itr->second->GetPlayer())
3328 itr->second->GetPlayer()->ResetSeasonalQuestStatus(event_id, eventStartTime);
3333 TC_LOG_INFO(
"misc",
"Random BG status reset for all characters.");
3339 if (itr->second->GetPlayer())
3340 itr->second->GetPlayer()->SetRandomWinner(
false);
3348 TC_LOG_INFO(
"misc",
"Calendar deletion of old events.");
3360 week = week < 7 ? week + 1 : 1;
3362 TC_LOG_INFO(
"misc",
"Guild Daily Cap reset. Week: {}", week == 1);
3377 Field* fields = result->Fetch();
3390 SessionMap::const_iterator itr;
3392 if (itr->second && itr->second->GetPlayer() && itr->second->GetPlayer()->IsInWorld())
3394 itr->second->GetPlayer()->UpdateAreaDependentAuras(itr->second->GetPlayer()->GetAreaId());
3395 itr->second->GetPlayer()->UpdateZoneDependentAuras(itr->second->GetPlayer()->GetZoneId());
3402 if (sessionForBnet.second->GetBattlePetMgr()->HasJournalLock())
3444 Field* fields = result->Fetch();
3446 }
while (result->NextRow());
3463 session->InvalidateRBACData();
3473 std::array<int64, 2> warModeEnabledFaction = { };
3483 Field* fields = result->Fetch();
3496 }
while (result->NextRow());
3500 int32 outnumberedFactionReward = 0;
3502 if (std::any_of(warModeEnabledFaction.begin(), warModeEnabledFaction.end(), [](
int64 val) { return val != 0; }))
3507 dominantFactionCount = warModeEnabledFaction[
TEAM_HORDE];
3512 double pct = dominantFactionCount / total;
3515 outnumberedFactionReward = 20;
3517 outnumberedFactionReward = 10;
3519 outnumberedFactionReward = 5;
3528 return sRealmList->GetCurrentRealmId().GetAddress();
3532 : 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< HotfixDatabaseConnection > HotfixDatabase
Accessor to the hotfix 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_DEBUG(filterType__, message__,...)
#define TC_LOG_ERROR(filterType__, message__,...)
#define TC_LOG_FATAL(filterType__, message__,...)
#define TC_LOG_INFO(filterType__, message__,...)
#define TC_LOG_WARN(filterType__, message__,...)
@ LOGIN_INS_ACCOUNT_BANNED
@ LOGIN_UPD_REALM_POPULATION
@ LOGIN_SEL_ACCOUNT_BY_IP
@ LOGIN_UPD_UPTIME_PLAYERS
@ LOGIN_DEL_IP_NOT_BANNED
@ LOGIN_REP_REALM_CHARACTERS
@ 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.
@ PLAYER_FLAGS_WAR_MODE_DESIRED
constexpr uint64 MAX_MONEY_AMOUNT
constexpr uint32 HARDCODED_DEVELOPMENT_REALM_CATEGORY_ID
#define CURRENT_EXPANSION
constexpr uint32 GetMaxLevelForExpansion(uint32 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 void StoreConfigValue(T &oldValue, std::type_identity_t< T > value, ConfigOptionLoadDefinition< T, IndexType > const &definition, bool reload)
#define USER_HOME_DIRECTORY_VARIABLE
std::array< ConfigOptionLoadDefinition< T, decltype(Max)>, Max > ConfigOptionLoadDefinitionArray
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()
ObjectGuid const & GetGUID() const
static ChannelMgr * ForTeam(Team team)
bool HasSentErrorMessage() const
static char * LineFromMessage(char *&pos)
bool ParseCommands(std::string_view str) override
static void LoadWarbandSceneDefinitions()
static void LoadMountDefinitions()
static uint32 GetLiquidFlags(uint32 liquidType)
Class used to access individual fields of database query result.
uint32 GetUInt32() const noexcept
uint8 GetUInt8() const noexcept
int32 GetInt32() const noexcept
std::string GetString() const noexcept
int64 GetInt64() const noexcept
void add(T const &item)
Adds an item to the queue.
bool next(T &result)
Gets the next result in the queue, if any.
static MMapManager * instance()
void InitializeThreadUnsafe(std::unordered_map< uint32, std::vector< uint32 > > const &mapData)
LowType GetCounter() const
void Initialize()
Correspondence between opcodes and their names.
static void InitializeTables()
static void DeleteOldCharacters()
void SendDirectMessage(WorldPacket const *data) const
WorldSession * GetSession() const
void setUInt16(uint8 index, uint16 value)
void setString(uint8 index, std::string &&value)
void setUInt32(uint8 index, uint32 value)
void setInt64(uint8 index, int64 value)
void setFloat(uint8 index, float value)
void setUInt64(uint8 index, uint64 value)
void setInt32(uint8 index, int32 value)
void setUInt8(uint8 index, uint8 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)
static VMapManager * createOrGetVMapManager()
void setEnableLineOfSightCalc(bool enableLineOfSightCalc)
void setEnableHeightCalc(bool enableHeightCalc)
GetLiquidFlagsFn GetLiquidFlagsPtr
void InitializeThreadUnsafe(std::unordered_map< uint32, std::vector< uint32 > > const &mapData)
IsVMAPDisabledForFn IsVMAPDisabledForPtr
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)
LocaleConstant GetSessionDbcLocale() const
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 ResetTimeOutTime(bool onlyActive)
void KickPlayer(std::string_view reason)
Kick a player out of the World.
static void AddInstanceConnection(WorldSession *session, std::weak_ptr< WorldSocket > sockRef, ConnectToKey key)
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
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 std::atomic< uint32 > m_worldLoopCounter
uint64 m_int64_configs[INT64_CONFIG_VALUE_COUNT]
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
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)
QueryCallbackProcessor _queryProcessor
bool m_bool_configs[BOOL_CONFIG_VALUE_COUNT]
bool SetInitialWorldSettings()
Initialize the World.
void UpdateRealmCharCount(uint32 accountId)
void LoadDBAllowedSecurityLevel()
static PersistentWorldVariable const CharacterDatabaseCleaningFlagsVarId
std::mutex _guidAlertLock
bool HasRecentlyDisconnected(WorldSession *)
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 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()
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
std::vector< GameRule > _gameRules
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?
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
void SendGlobalMessage(WorldPacket const *packet, WorldSession *self=nullptr, Optional< Team > team={ })
Send a packet to all players (except self if mentioned)
uint32 GetActiveAndQueuedSessionCount() const
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
std::vector< std::string > _motd
uint32 m_maxQueuedSessionCount
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_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_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_VISIBILITY_NOTIFY_PERIOD_CONTINENT
@ 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_VISIBILITY_NOTIFY_PERIOD_BATTLEGROUND
@ 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_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_SKILL_CHANCE_MINING_STEPS
@ 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_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_VISIBILITY_NOTIFY_PERIOD_ARENA
@ 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_TALENTS_INSPECTING
@ CONFIG_WINTERGRASP_PLR_MAX
@ CONFIG_CHAT_EMOTE_LEVEL_REQ
@ CONFIG_AUCTION_SEARCH_DELAY
@ CONFIG_VISIBILITY_NOTIFY_PERIOD_INSTANCE
@ 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_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
@ 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_STATS_LIMITS_DODGE
@ CONFIG_RESPAWN_DYNAMICRATE_CREATURE
@ CONFIG_ARENA_WIN_RATING_MODIFIER_1
@ CONFIG_GROUP_XP_DISTANCE
@ CONFIG_CALL_TO_ARMS_20_PCT
@ CONFIG_MAX_VISIBILITY_DISTANCE_ARENA
@ 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_VISIBILITY_DISTANCE_INSTANCE
@ CONFIG_MAX_VISIBILITY_DISTANCE_BATTLEGROUND
@ CONFIG_MAX_VISIBILITY_DISTANCE_CONTINENT
@ 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
@ 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_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
@ CONFIG_CHARACTER_CREATING_DISABLED_RACEMASK
@ CONFIG_START_PLAYER_MONEY
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::ranges::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 &multimap, typename M::key_type const &key, typename M::mapped_type const &value)
TC_COMMON_API std::vector< std::string_view > Tokenize(std::string_view str, char sep, bool keepEmpty)
std::string StringFormat(FormatString< Args... > fmt, Args &&... args) noexcept
Default TC string format function.
TC_GAME_API void SetValue(int32 worldStateId, int32 value, bool hidden, Map *map)
TC_GAME_API void SetValueAndSaveInDb(int32 worldStateId, int32 value, bool hidden, Map *map)
@ RBAC_PERM_RECEIVE_GLOBAL_GM_TEXTMESSAGE
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)
struct WorldSession::ConnectToKey::@318 Fields