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 TrinityCore Server."sv));
631 { .Name =
"ActivateWeather"sv, .DefaultValue =
true, .Index =
CONFIG_WEATHER },
656 { .Name =
"mmap.enablePathFinding"sv, .DefaultValue =
true, .Index =
CONFIG_ENABLE_MMAPS },
662 { .Name =
"PlayerStart.AllReputation"sv, .DefaultValue =
false, .Index =
CONFIG_START_ALL_REP },
702 { .Name =
"Compression"sv, .DefaultValue = 1, .Index =
CONFIG_COMPRESSION, .Min = Z_BEST_SPEED, .Max = Z_BEST_COMPRESSION },
724 { .Name =
"WorldServerPort"sv, .DefaultValue = 8085, .Index =
CONFIG_PORT_WORLD, .Min = 1, .Max = std::numeric_limits<uint16>::max(), .Reloadable =
false },
731 { .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 },
861 { .Name =
"MapUpdate.Threads"sv, .DefaultValue = 1, .Index =
CONFIG_NUMTHREADS, .Min = 1 },
941 { .Name =
"Rate.Health"sv, .DefaultValue = 1.0f, .Index =
RATE_HEALTH, .Min = 0.01f },
942 { .Name =
"Rate.Mana"sv, .DefaultValue = 1.0f, .Index =
RATE_POWER_MANA, .Min = 0.01f },
944 { .Name =
"Rate.Rage.Loss"sv, .DefaultValue = 1.0f, .Index =
RATE_POWER_RAGE_LOSS, .Min = 0.01f },
945 { .Name =
"Rate.Focus"sv, .DefaultValue = 1.0f, .Index =
RATE_POWER_FOCUS, .Min = 0.01f },
946 { .Name =
"Rate.Energy"sv, .DefaultValue = 1.0f, .Index =
RATE_POWER_ENERGY, .Min = 0.01f },
950 { .Name =
"Rate.SoulShards.Loss"sv, .DefaultValue = 1.0f, .Index =
RATE_POWER_SOUL_SHARDS, .Min = 0.01f },
951 { .Name =
"Rate.LunarPower.Loss"sv, .DefaultValue = 1.0f, .Index =
RATE_POWER_LUNAR_POWER, .Min = 0.01f },
952 { .Name =
"Rate.HolyPower.Loss"sv, .DefaultValue = 1.0f, .Index =
RATE_POWER_HOLY_POWER, .Min = 0.01f },
953 { .Name =
"Rate.Maelstrom.Loss"sv, .DefaultValue = 1.0f, .Index =
RATE_POWER_MAELSTROM, .Min = 0.01f },
954 { .Name =
"Rate.Chi.Loss"sv, .DefaultValue = 1.0f, .Index =
RATE_POWER_CHI, .Min = 0.01f },
955 { .Name =
"Rate.Insanity.Loss"sv, .DefaultValue = 1.0f, .Index =
RATE_POWER_INSANITY, .Min = 0.01f },
957 { .Name =
"Rate.Fury.Loss"sv, .DefaultValue = 1.0f, .Index =
RATE_POWER_FURY, .Min = 0.01f },
958 { .Name =
"Rate.Pain.Loss"sv, .DefaultValue = 1.0f, .Index =
RATE_POWER_PAIN, .Min = 0.01f },
959 { .Name =
"Rate.Essence.Loss"sv, .DefaultValue = 1.0f, .Index =
RATE_POWER_ESSENCE, .Min = 0.01f },
970 { .Name =
"Rate.Drop.Money"sv, .DefaultValue = 1.0f, .Index =
RATE_DROP_MONEY },
971 { .Name =
"Rate.XP.Kill"sv, .DefaultValue = 1.0f, .Index =
RATE_XP_KILL },
972 { .Name =
"Rate.XP.BattlegroundKill"sv, .DefaultValue = 1.0f, .Index =
RATE_XP_BG_KILL },
973 { .Name =
"Rate.XP.Quest"sv, .DefaultValue = 1.0f, .Index =
RATE_XP_QUEST },
974 { .Name =
"Rate.XP.Explore"sv, .DefaultValue = 1.0f, .Index =
RATE_XP_EXPLORE },
975 { .Name =
"XP.Boost.Rate"sv, .DefaultValue = 2.0f, .Index =
RATE_XP_BOOST },
976 { .Name =
"Rate.RepairCost"sv, .DefaultValue = 1.0f, .Index =
RATE_REPAIRCOST, .Min = 0.0f },
1003 { .Name =
"Rate.Rest.InGame"sv, .DefaultValue = 1.0f, .Index =
RATE_REST_INGAME },
1006 { .Name =
"Rate.Damage.Fall"sv, .DefaultValue = 1.0f, .Index =
RATE_DAMAGE_FALL },
1007 { .Name =
"Rate.Auction.Time"sv, .DefaultValue = 1.0f, .Index =
RATE_AUCTION_TIME },
1009 { .Name =
"Rate.Auction.Cut"sv, .DefaultValue = 1.0f, .Index =
RATE_AUCTION_CUT },
1010 { .Name =
"Rate.Honor"sv, .DefaultValue = 1.0f, .Index =
RATE_HONOR },
1012 { .Name =
"Rate.MoveSpeed"sv, .DefaultValue = 1.0f, .Index =
RATE_MOVESPEED, .Min = 0.01f },
1019 { .Name =
"Rate.Quest.Money.Reward"sv, .DefaultValue = 1.0f, .Index =
RATE_MONEY_QUEST, .Min = 0.0f },
1050 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");
1055 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");
1071 auto validateStartLevel = [&](
WorldIntConfigs config,
char const* name)
1076 TC_LOG_ERROR(
"server.loading",
"{} ({}) must be in range 1..MaxPlayerLevel({}). Set to {}.", name,
m_int_configs[config], maxLevel, maxLevel);
1089 TC_LOG_ERROR(
"server.loading",
"GM.StartLevel ({}) must be in range StartPlayerLevel({})..{}. Set to {}.",
1094 TC_LOG_INFO(
"server.loading",
"Will clear `logs` table of entries older than {} seconds every {} minutes.",
1113 auto validateVisibilityDistance = [&](
WorldFloatConfigs config,
char const* name)
1118 TC_LOG_ERROR(
"server.loading",
"{} can't be less max aggro radius {}", name, minVisibilityDistance);
1153 _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);
1157 std::string dataPath =
sConfigMgr->GetStringDefault(
"DataDir"sv,
"./"sv);
1158 if (dataPath.empty() || (dataPath.back() !=
'/' && dataPath.back() !=
'\\'))
1159 dataPath.push_back(
'/');
1161 if (dataPath[0] ==
'~')
1163#if TRINITY_PLATFORM != TRINITY_PLATFORM_WINDOWS
1164#define USER_HOME_DIRECTORY_VARIABLE "HOME"
1166#define USER_HOME_DIRECTORY_VARIABLE "USERPROFILE"
1169 dataPath.replace(0, 1, home);
1170#undef USER_HOME_DIRECTORY_VARIABLE
1176 TC_LOG_ERROR(
"server.loading",
"DataDir option can't be changed at worldserver.conf reload, using current value ({}).",
m_dataPath);
1186 bool enableLOS =
sConfigMgr->GetBoolDefault(
"vmap.enableLOS"sv,
true);
1187 bool enableHeight =
sConfigMgr->GetBoolDefault(
"vmap.enableHeight"sv,
true);
1190 TC_LOG_ERROR(
"server.loading",
"VMap height checking disabled! Creatures movements and other various things WILL be broken! Expect no support.");
1198 TC_LOG_WARN(
"server.loading",
"PlayerStart.AllSpells enabled - may not function as intended!");
1274 TC_LOG_FATAL(
"server.loading",
"Unable to load map and vmap data for starting zones - server shutting down!");
1286 TC_LOG_INFO(
"server.loading",
"Loading Trinity strings...");
1297 LoginDatabase.PExecute(
"UPDATE realmlist SET icon = {}, timezone = {} WHERE id = '{}'", server_type, realm_zone,
sRealmList->GetCurrentRealmId().Realm);
1299 TC_LOG_INFO(
"server.loading",
"Loading GameObject models...");
1302 TC_LOG_FATAL(
"server.loading",
"Unable to load gameobject models (part of vmaps), objects using WMO models will crash the client - server shutting down!");
1306 TC_LOG_INFO(
"server.loading",
"Initialize data stores...");
1315 TC_LOG_INFO(
"server.loading",
"Loading hotfix blobs...");
1317 TC_LOG_INFO(
"server.loading",
"Loading hotfix info...");
1319 TC_LOG_INFO(
"server.loading",
"Loading hotfix optional data...");
1321 TC_LOG_INFO(
"server.loading",
"Indexing loaded data stores...");
1338 std::unordered_map<uint32, std::vector<uint32>> mapData;
1341 mapData.emplace(std::piecewise_construct, std::forward_as_tuple(mapEntry->ID), std::forward_as_tuple());
1342 if (mapEntry->ParentMapID != -1)
1344 ASSERT(mapEntry->CosmeticParentMapID == -1 || mapEntry->ParentMapID == mapEntry->CosmeticParentMapID,
1345 "Inconsistent parent map data for map %u (ParentMapID = %hd, CosmeticParentMapID = %hd)",
1346 mapEntry->ID, mapEntry->ParentMapID, mapEntry->CosmeticParentMapID);
1348 mapData[mapEntry->ParentMapID].push_back(mapEntry->ID);
1350 else if (mapEntry->CosmeticParentMapID != -1)
1351 mapData[mapEntry->CosmeticParentMapID].push_back(mapEntry->ID);
1364 TC_LOG_INFO(
"server.loading",
"Initializing PlayerDump tables...");
1367 TC_LOG_INFO(
"server.loading",
"Loading SpellInfo store...");
1370 TC_LOG_INFO(
"server.loading",
"Loading serverside spells...");
1373 TC_LOG_INFO(
"server.loading",
"Loading SpellInfo corrections...");
1376 TC_LOG_INFO(
"server.loading",
"Loading SkillLineAbilityMultiMap Data...");
1379 TC_LOG_INFO(
"server.loading",
"Loading SpellInfo custom attributes...");
1380 sSpellMgr->LoadSpellInfoCustomAttributes();
1382 TC_LOG_INFO(
"server.loading",
"Loading SpellInfo diminishing infos...");
1385 TC_LOG_INFO(
"server.loading",
"Loading SpellInfo immunity infos...");
1388 TC_LOG_INFO(
"server.loading",
"Loading SpellInfo target caps...");
1391 TC_LOG_INFO(
"server.loading",
"Loading PetFamilySpellsStore Data...");
1394 TC_LOG_INFO(
"server.loading",
"Loading Spell Totem models...");
1397 TC_LOG_INFO(
"server.loading",
"Loading Traits...");
1400 TC_LOG_INFO(
"server.loading",
"Loading languages...");
1403 TC_LOG_INFO(
"server.loading",
"Loading languages words...");
1406 TC_LOG_INFO(
"server.loading",
"Loading Instance Template...");
1410 TC_LOG_INFO(
"server.loading",
"Loading instances...");
1414 TC_LOG_INFO(
"server.loading",
"Loading Localization strings...");
1432 TC_LOG_INFO(
"server.loading",
"Loading Account Roles and Permissions...");
1435 TC_LOG_INFO(
"server.loading",
"Loading Page Texts...");
1438 TC_LOG_INFO(
"server.loading",
"Loading Game Object Templates...");
1442 TC_LOG_INFO(
"server.loading",
"Loading Game Object template addons...");
1445 TC_LOG_INFO(
"server.loading",
"Loading Transport templates...");
1448 TC_LOG_INFO(
"server.loading",
"Loading Transport animations and rotations...");
1451 TC_LOG_INFO(
"server.loading",
"Loading Transport spawns...");
1454 TC_LOG_INFO(
"server.loading",
"Loading Spell Rank Data...");
1457 TC_LOG_INFO(
"server.loading",
"Loading Spell Required Data...");
1460 TC_LOG_INFO(
"server.loading",
"Loading Spell Group types...");
1463 TC_LOG_INFO(
"server.loading",
"Loading Spell Learn Skills...");
1466 TC_LOG_INFO(
"server.loading",
"Loading SpellInfo SpellSpecific and AuraState...");
1467 sSpellMgr->LoadSpellInfoSpellSpecificAndAuraState();
1469 TC_LOG_INFO(
"server.loading",
"Loading Spell Learn Spells...");
1472 TC_LOG_INFO(
"server.loading",
"Loading Spell Proc conditions and data...");
1475 TC_LOG_INFO(
"server.loading",
"Loading Aggro Spells Definitions...");
1478 TC_LOG_INFO(
"server.loading",
"Loading Spell Group Stack Rules...");
1481 TC_LOG_INFO(
"server.loading",
"Loading NPC Texts...");
1484 TC_LOG_INFO(
"server.loading",
"Loading Enchant Spells Proc datas...");
1487 TC_LOG_INFO(
"server.loading",
"Loading item bonus data...");
1490 TC_LOG_INFO(
"server.loading",
"Loading Random item bonus list definitions...");
1493 TC_LOG_INFO(
"server.loading",
"Loading Disables");
1496 TC_LOG_INFO(
"server.loading",
"Loading Items...");
1499 TC_LOG_INFO(
"server.loading",
"Loading Item set names...");
1505 TC_LOG_INFO(
"server.loading",
"Loading Creature Model Based Info Data...");
1508 TC_LOG_INFO(
"server.loading",
"Loading Creature templates...");
1511 TC_LOG_INFO(
"server.loading",
"Loading Equipment templates...");
1514 TC_LOG_INFO(
"server.loading",
"Loading Creature template addons...");
1517 TC_LOG_INFO(
"server.loading",
"Loading Creature template difficulty...");
1518 sObjectMgr->LoadCreatureTemplateDifficulty();
1520 TC_LOG_INFO(
"server.loading",
"Loading Creature template sparring...");
1523 TC_LOG_INFO(
"server.loading",
"Loading Reputation Reward Rates...");
1526 TC_LOG_INFO(
"server.loading",
"Loading Creature Reputation OnKill Data...");
1529 TC_LOG_INFO(
"server.loading",
"Loading Reputation Spillover Data...");
1530 sObjectMgr->LoadReputationSpilloverTemplate();
1532 TC_LOG_INFO(
"server.loading",
"Loading Points Of Interest Data...");
1535 TC_LOG_INFO(
"server.loading",
"Loading Creature Base Stats...");
1538 TC_LOG_INFO(
"server.loading",
"Loading Spawn Group Templates...");
1541 TC_LOG_INFO(
"server.loading",
"Loading Creature Data...");
1544 TC_LOG_INFO(
"server.loading",
"Loading Temporary Summon Data...");
1547 TC_LOG_INFO(
"server.loading",
"Loading pet levelup spells...");
1550 TC_LOG_INFO(
"server.loading",
"Loading pet default spells additional to levelup spells...");
1553 TC_LOG_INFO(
"server.loading",
"Loading Creature Addon Data...");
1556 TC_LOG_INFO(
"server.loading",
"Loading Creature Movement Overrides...");
1559 TC_LOG_INFO(
"server.loading",
"Loading Gameobject Data...");
1562 TC_LOG_INFO(
"server.loading",
"Loading Spawn Group Data...");
1565 TC_LOG_INFO(
"server.loading",
"Loading instance spawn groups...");
1568 TC_LOG_INFO(
"server.loading",
"Loading GameObject Addon Data...");
1571 TC_LOG_INFO(
"server.loading",
"Loading GameObject faction and flags overrides...");
1574 TC_LOG_INFO(
"server.loading",
"Loading GameObject Quest Items...");
1577 TC_LOG_INFO(
"server.loading",
"Loading Creature Quest Items...");
1580 TC_LOG_INFO(
"server.loading",
"Loading Creature Quest Currencies...");
1583 TC_LOG_INFO(
"server.loading",
"Loading Creature Linked Respawn...");
1586 TC_LOG_INFO(
"server.loading",
"Loading Weather Data...");
1589 TC_LOG_INFO(
"server.loading",
"Loading Quests...");
1593 TC_LOG_INFO(
"server.loading",
"Checking Quest Disables");
1596 TC_LOG_INFO(
"server.loading",
"Loading Quest POI");
1599 TC_LOG_INFO(
"server.loading",
"Loading Quests Starters and Enders...");
1602 TC_LOG_INFO(
"server.loading",
"Loading Quest Greetings...");
1608 TC_LOG_INFO(
"server.loading",
"Loading Objects Pooling Data...");
1610 TC_LOG_INFO(
"server.loading",
"Loading Quest Pooling Data...");
1613 TC_LOG_INFO(
"server.loading",
"Loading World State templates...");
1616 TC_LOG_INFO(
"server.loading",
"Loading Game Event Data...");
1619 TC_LOG_INFO(
"server.loading",
"Loading creature summoned data...");
1622 TC_LOG_INFO(
"server.loading",
"Loading UNIT_NPC_FLAG_SPELLCLICK Data...");
1625 TC_LOG_INFO(
"server.loading",
"Loading Vehicle Templates...");
1628 TC_LOG_INFO(
"server.loading",
"Loading Vehicle Template Accessories...");
1629 sObjectMgr->LoadVehicleTemplateAccessories();
1631 TC_LOG_INFO(
"server.loading",
"Loading Vehicle Accessories...");
1634 TC_LOG_INFO(
"server.loading",
"Loading Vehicle Seat Addon Data...");
1637 TC_LOG_INFO(
"server.loading",
"Loading SpellArea Data...");
1640 TC_LOG_INFO(
"server.loading",
"Loading World locations...");
1643 TC_LOG_INFO(
"server.loading",
"Loading Area Trigger Teleports definitions...");
1646 TC_LOG_INFO(
"server.loading",
"Loading Area Trigger Polygon data...");
1649 TC_LOG_INFO(
"server.loading",
"Loading Access Requirements...");
1652 TC_LOG_INFO(
"server.loading",
"Loading Quest Area Triggers...");
1655 TC_LOG_INFO(
"server.loading",
"Loading Tavern Area Triggers...");
1658 TC_LOG_INFO(
"server.loading",
"Loading AreaTrigger script names...");
1661 TC_LOG_INFO(
"server.loading",
"Loading LFG entrance positions...");
1664 TC_LOG_INFO(
"server.loading",
"Loading LFG rewards...");
1667 TC_LOG_INFO(
"server.loading",
"Loading Graveyard-zone links...");
1670 TC_LOG_INFO(
"server.loading",
"Loading spell pet auras...");
1673 TC_LOG_INFO(
"server.loading",
"Loading Spell target coordinates...");
1676 TC_LOG_INFO(
"server.loading",
"Loading linked spells...");
1679 TC_LOG_INFO(
"server.loading",
"Loading Scenes Templates...");
1682 TC_LOG_INFO(
"server.loading",
"Loading Player Create Data...");
1685 TC_LOG_INFO(
"server.loading",
"Loading Exploration BaseXP Data...");
1688 TC_LOG_INFO(
"server.loading",
"Loading Pet Name Parts...");
1691 TC_LOG_INFO(
"server.loading",
"Loading AreaTrigger Templates...");
1694 TC_LOG_INFO(
"server.loading",
"Loading AreaTrigger Spawns...");
1697 TC_LOG_INFO(
"server.loading",
"Loading Conversation Templates...");
1700 TC_LOG_INFO(
"server.loading",
"Loading Player Choices...");
1703 TC_LOG_INFO(
"server.loading",
"Loading Spawn Tracking Templates...");
1706 TC_LOG_INFO(
"server.loading",
"Loading Spawn Tracking Quest Objectives...");
1707 sObjectMgr->LoadSpawnTrackingQuestObjectives();
1709 TC_LOG_INFO(
"server.loading",
"Loading Spawn Tracking Spawns...");
1712 TC_LOG_INFO(
"server.loading",
"Loading Spawn Tracking Spawn States...");
1717 TC_LOG_INFO(
"server.loading",
"Loading Player Choices Locales...");
1721 TC_LOG_INFO(
"server.loading",
"Loading UIMap questlines...");
1724 TC_LOG_INFO(
"server.loading",
"Loading UIMap quests...");
1727 TC_LOG_INFO(
"server.loading",
"Loading Jump Charge Params...");
1732 TC_LOG_INFO(
"server.loading",
"Loading the max pet number...");
1735 TC_LOG_INFO(
"server.loading",
"Loading pet level stats...");
1738 TC_LOG_INFO(
"server.loading",
"Loading Player level dependent mail rewards...");
1744 TC_LOG_INFO(
"server.loading",
"Loading Skill Discovery Table...");
1747 TC_LOG_INFO(
"server.loading",
"Loading Skill Extra Item Table...");
1750 TC_LOG_INFO(
"server.loading",
"Loading Skill Perfection Data Table...");
1753 TC_LOG_INFO(
"server.loading",
"Loading Skill Fishing base level requirements...");
1756 TC_LOG_INFO(
"server.loading",
"Loading skill tier info...");
1759 TC_LOG_INFO(
"server.loading",
"Loading Criteria Modifier trees...");
1761 TC_LOG_INFO(
"server.loading",
"Loading Criteria Lists...");
1763 TC_LOG_INFO(
"server.loading",
"Loading Criteria Data...");
1765 TC_LOG_INFO(
"server.loading",
"Loading Achievements...");
1767 TC_LOG_INFO(
"server.loading",
"Loading Achievements Scripts...");
1769 TC_LOG_INFO(
"server.loading",
"Loading Achievement Rewards...");
1774 TC_LOG_INFO(
"server.loading",
"Loading Achievement Reward Locales...");
1777 TC_LOG_INFO(
"server.loading",
"Loading Completed Achievements...");
1781 TC_LOG_INFO(
"server.loading",
"Loading character cache store...");
1785 TC_LOG_INFO(
"server.loading",
"Loading Auctions...");
1790 TC_LOG_INFO(
"server.loading",
"Loading Black Market Templates...");
1793 TC_LOG_INFO(
"server.loading",
"Loading Black Market Auctions...");
1797 TC_LOG_INFO(
"server.loading",
"Loading Guild rewards...");
1800 TC_LOG_INFO(
"server.loading",
"Loading Guilds...");
1803 TC_LOG_INFO(
"server.loading",
"Loading ArenaTeams...");
1806 TC_LOG_INFO(
"server.loading",
"Loading Groups...");
1809 TC_LOG_INFO(
"server.loading",
"Loading ReservedNames...");
1812 TC_LOG_INFO(
"server.loading",
"Loading GameObjects for quests...");
1815 TC_LOG_INFO(
"server.loading",
"Loading BattleMasters...");
1818 TC_LOG_INFO(
"server.loading",
"Loading GameTeleports...");
1821 TC_LOG_INFO(
"server.loading",
"Loading Trainers...");
1824 TC_LOG_INFO(
"server.loading",
"Loading Gossip menu...");
1827 TC_LOG_INFO(
"server.loading",
"Loading Gossip menu options...");
1830 TC_LOG_INFO(
"server.loading",
"Loading Gossip menu addon...");
1833 TC_LOG_INFO(
"server.loading",
"Loading Creature Template Gossip...");
1836 TC_LOG_INFO(
"server.loading",
"Loading Creature trainers...");
1839 TC_LOG_INFO(
"server.loading",
"Loading Vendors...");
1842 TC_LOG_INFO(
"server.loading",
"Loading Waypoint paths...");
1845 TC_LOG_INFO(
"server.loading",
"Loading Creature Formations...");
1848 TC_LOG_INFO(
"server.loading",
"Loading Persistend World Variables...");
1856 TC_LOG_INFO(
"server.loading",
"Loading Conditions...");
1859 TC_LOG_INFO(
"server.loading",
"Loading faction change achievement pairs...");
1862 TC_LOG_INFO(
"server.loading",
"Loading faction change spell pairs...");
1865 TC_LOG_INFO(
"server.loading",
"Loading faction change quest pairs...");
1868 TC_LOG_INFO(
"server.loading",
"Loading faction change item pairs...");
1871 TC_LOG_INFO(
"server.loading",
"Loading faction change reputation pairs...");
1874 TC_LOG_INFO(
"server.loading",
"Loading faction change title pairs...");
1877 TC_LOG_INFO(
"server.loading",
"Loading mount definitions...");
1880 TC_LOG_INFO(
"server.loading",
"Loading warband scene definitions...");
1883 TC_LOG_INFO(
"server.loading",
"Loading GM bugs...");
1886 TC_LOG_INFO(
"server.loading",
"Loading GM complaints...");
1889 TC_LOG_INFO(
"server.loading",
"Loading GM suggestions...");
1895 TC_LOG_INFO(
"server.loading",
"Loading garrison info...");
1899 TC_LOG_INFO(
"server.loading",
"Returning old mails...");
1902 TC_LOG_INFO(
"server.loading",
"Loading Autobroadcasts...");
1908 TC_LOG_INFO(
"server.loading",
"Loading spell script names...");
1911 TC_LOG_INFO(
"server.loading",
"Loading Creature Texts...");
1916 TC_LOG_INFO(
"server.loading",
"Loading Creature Text Locales...");
1920 TC_LOG_INFO(
"server.loading",
"Loading creature StaticFlags overrides...");
1921 sObjectMgr->LoadCreatureStaticFlagsOverride();
1923 TC_LOG_INFO(
"server.loading",
"Initializing Scripts...");
1927 TC_LOG_INFO(
"server.loading",
"Validating spell scripts...");
1930 TC_LOG_INFO(
"server.loading",
"Loading SmartAI scripts...");
1933 TC_LOG_INFO(
"server.loading",
"Loading Calendar data...");
1936 TC_LOG_INFO(
"server.loading",
"Loading Petitions...");
1939 TC_LOG_INFO(
"server.loading",
"Loading Signatures...");
1942 TC_LOG_INFO(
"server.loading",
"Loading Item loot...");
1945 TC_LOG_INFO(
"server.loading",
"Initialize query data...");
1948 TC_LOG_INFO(
"server.loading",
"Initialize commands...");
1952 TC_LOG_INFO(
"server.loading",
"Initialize game time and timers");
1955 LoginDatabase.PExecute(
"INSERT INTO uptime (realmid, starttime, uptime, revision) VALUES({}, {}, 0, '{}')",
1990 localtime_r(&gameTime, &localTm);
1998 TC_LOG_INFO(
"server.loading",
"Starting Map System");
2001 TC_LOG_INFO(
"server.loading",
"Starting Game Event system...");
2008 TC_LOG_INFO(
"server.loading",
"Initialize AuctionHouseBot...");
2011 TC_LOG_INFO(
"server.loading",
"Initializing chat channels...");
2014 TC_LOG_INFO(
"server.loading",
"Initializing Opcodes...");
2019 TC_LOG_INFO(
"server.loading",
"Starting Arena Season...");
2025 TC_LOG_INFO(
"server.loading",
"Starting Battleground System");
2030 TC_LOG_INFO(
"server.loading",
"Starting Outdoor PvP System");
2034 TC_LOG_INFO(
"server.loading",
"Starting Battlefield System");
2037 TC_LOG_INFO(
"server.loading",
"Deleting expired bans...");
2038 LoginDatabase.Execute(
"DELETE FROM ip_banned WHERE unbandate <= UNIX_TIMESTAMP() AND unbandate<>bandate");
2040 TC_LOG_INFO(
"server.loading",
"Initializing quest reset times...");
2044 TC_LOG_INFO(
"server.loading",
"Calculate random battleground reset time...");
2047 TC_LOG_INFO(
"server.loading",
"Calculate deletion of old calendar events time...");
2050 TC_LOG_INFO(
"server.loading",
"Calculate guild limitation(s) reset time...");
2053 TC_LOG_INFO(
"server.loading",
"Calculate next currency reset time...");
2056 TC_LOG_INFO(
"server.loading",
"Loading race and class expansion requirements...");
2057 sObjectMgr->LoadRaceAndClassExpansionRequirements();
2059 TC_LOG_INFO(
"server.loading",
"Loading character templates...");
2062 TC_LOG_INFO(
"server.loading",
"Loading battle pets info...");
2065 TC_LOG_INFO(
"server.loading",
"Loading scenarios");
2069 TC_LOG_INFO(
"server.loading",
"Loading scenario poi data");
2072 TC_LOG_INFO(
"server.loading",
"Loading phase names...");
2075 TC_LOG_INFO(
"server.loading",
"Loading transmog data...");
2080 TC_LOG_INFO(
"server.worldserver",
"World initialized in {} minutes {} seconds", startupDuration / 60000, startupDuration % 60000 / 1000);
2109 TC_LOG_INFO(
"server.loading",
">> Loaded 0 autobroadcasts definitions. DB table `autobroadcast` is empty for this realm!");
2115 Field* fields = result->Fetch();
2120 }
while (result->NextRow());
2394 TC_LOG_DEBUG(
"sql.driver",
"Ping MySQL to keep connection alive");
2450 SessionMap::const_iterator itr;
2454 itr->second->GetPlayer() &&
2455 itr->second->GetPlayer()->IsInWorld() &&
2456 itr->second != self &&
2457 (!team || itr->second->GetPlayer()->GetTeam() == team))
2459 itr->second->SendPacket(packet);
2480 if (!team || player->
GetTeam() == team)
2494 for (std::unique_ptr<WorldPackets::Packet>
const& packet :
Packets)
2498 std::vector<std::unique_ptr<WorldPackets::Packet>>
Packets;
2531 void do_helper(std::vector<std::unique_ptr<WorldPackets::Packet>>& dataList,
char* text)
2538 dataList.emplace_back(packet);
2551 va_start(ap, string_id);
2557 if (!itr->second || !itr->second->GetPlayer() || !itr->second->GetPlayer()->IsInWorld())
2560 wt_do(itr->second->GetPlayer());
2570 va_start(ap, string_id);
2596 char* buf = strdup(text);
2616 itr->second->KickPlayer(
"World::KickAll");
2624 if (itr->second->GetSecurity() < sec)
2625 itr->second->KickPlayer(
"World::KickAllLess");
2632 return BanAccount(mode, nameOrIP, duration_secs, reason, author);
2681 if (!resultAccounts)
2693 Field* fieldsAccount = resultAccounts->Fetch();
2701 trans->Append(stmt);
2708 trans->Append(stmt);
2712 if (std::string(sess->GetPlayerName()) != author)
2713 sess->KickPlayer(
"World::BanAccount Banning account");
2714 }
while (resultAccounts->NextRow());
2773 trans->Append(stmt);
2780 trans->Append(stmt);
2880 if (!reason.empty())
2881 str +=
" - " + reason;
2942 std::pair<std::weak_ptr<WorldSocket>,
uint64> linkInfo;
2960 [[maybe_unused]]
uint32 currentSessionId = itr->first;
2963 if (!pSession->
Update(diff, updater))
2979 void* callbackArg =
nullptr;
2983 TC_LOG_INFO(
"misc",
"CLI command under processing...");
3001 return pair.second.Weight;
3008 else if (abcenter == 1)
3010 else if (abcenter == 2)
3016 TC_LOG_DEBUG(
"misc",
"AutoBroadcast: '{}'", itr->second.Message);
3025 _UpdateRealmCharCount(std::move(result));
3031 if (resultCharCount)
3033 Field* fields = resultCharCount->Fetch();
3035 uint8 charCount =
uint8(fields[1].GetUInt64());
3043 trans->Append(stmt);
3073 if (
Player* player = itr->second->GetPlayer())
3074 player->DailyReset();
3087 TC_LOG_INFO(
"misc",
"Daily quests for all characters have been reset.");
3094 int wday = time.tm_wday;
3098 t += (
DAY * (target - wday));
3109 if (
Player* player = itr->second->GetPlayer())
3110 player->ResetWeeklyQuestStatus();
3126 TC_LOG_INFO(
"misc",
"Weekly quests for all characters have been reset.");
3133 if (time.tm_mday == 1)
3138 return mktime(&time);
3148 if (
Player* player = itr->second->GetPlayer())
3149 player->ResetMonthlyQuestStatus();
3162 TC_LOG_INFO(
"misc",
"Monthly quests for all characters have been reset.");
3185 localtime_r(&curTime, &localTm);
3191 time_t nextDayResetTime = mktime(&localTm);
3194 if (curTime >= nextDayResetTime)
3195 nextDayResetTime +=
DAY;
3212 if (currentDeletionTime < now)
3217 if (!currentDeletionTime)
3230 localtime_r(&curTime, &localTm);
3236 time_t nextDayResetTime = mktime(&localTm);
3239 if (curTime >= nextDayResetTime)
3240 nextDayResetTime +=
DAY;
3258 localtime_r(&curTime, &localTm);
3266 time_t nextWeekResetTime = mktime(&localTm);
3269 if (curTime >= nextWeekResetTime)
3281 CharacterDatabase.Execute(
"UPDATE `character_currency` SET `WeeklyQuantity` = 0");
3284 if (itr->second->GetPlayer())
3285 itr->second->GetPlayer()->ResetCurrencyWeekCap();
3293 TC_LOG_INFO(
"misc",
"Seasonal quests reset for all characters.");
3301 if (itr->second->GetPlayer())
3302 itr->second->GetPlayer()->ResetSeasonalQuestStatus(event_id, eventStartTime);
3307 TC_LOG_INFO(
"misc",
"Random BG status reset for all characters.");
3313 if (itr->second->GetPlayer())
3314 itr->second->GetPlayer()->SetRandomWinner(
false);
3322 TC_LOG_INFO(
"misc",
"Calendar deletion of old events.");
3334 week = week < 7 ? week + 1 : 1;
3336 TC_LOG_INFO(
"misc",
"Guild Daily Cap reset. Week: {}", week == 1);
3351 Field* fields = result->Fetch();
3364 SessionMap::const_iterator itr;
3366 if (itr->second && itr->second->GetPlayer() && itr->second->GetPlayer()->IsInWorld())
3368 itr->second->GetPlayer()->UpdateAreaDependentAuras(itr->second->GetPlayer()->GetAreaId());
3369 itr->second->GetPlayer()->UpdateZoneDependentAuras(itr->second->GetPlayer()->GetZoneId());
3376 if (sessionForBnet.second->GetBattlePetMgr()->HasJournalLock())
3418 Field* fields = result->Fetch();
3420 }
while (result->NextRow());
3437 session->InvalidateRBACData();
3447 std::array<int64, 2> warModeEnabledFaction = { };
3457 Field* fields = result->Fetch();
3470 }
while (result->NextRow());
3474 int32 outnumberedFactionReward = 0;
3476 if (std::any_of(warModeEnabledFaction.begin(), warModeEnabledFaction.end(), [](
int64 val) { return val != 0; }))
3481 dominantFactionCount = warModeEnabledFaction[
TEAM_HORDE];
3486 double pct = dominantFactionCount / total;
3489 outnumberedFactionReward = 20;
3491 outnumberedFactionReward = 10;
3493 outnumberedFactionReward = 5;
3502 return sRealmList->GetCurrentRealmId().GetAddress();
3506 : 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 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 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_WHO_LIST_UPDATE_INTERVAL
@ 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_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_EXTENDED_ACCOUNT_NAME_LENGTH_LIMIT
@ 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_START_ALLIED_RACE_MONEY
@ CONFIG_CHARACTER_CREATING_DISABLED_RACEMASK
@ CONFIG_START_PLAYER_MONEY
@ CONFIG_START_DEATH_KNIGHT_PLAYER_MONEY
@ CONFIG_START_EVOKER_PLAYER_MONEY
@ CONFIG_START_DEMON_HUNTER_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::@320 Fields