91#include <boost/asio/ip/address.hpp>
180 SessionMap::const_iterator itr;
186 Player* player = itr->second->GetPlayer();
237 _motd.reserve(tokens.size());
239 for (std::string_view
const& token : tokens)
240 _motd.emplace_back(token);
254 time_t today = (gameTime /
DAY) *
DAY;
304 SessionMap::const_iterator itr =
m_sessions.find(
id);
316 SessionMap::const_iterator itr =
m_sessions.find(
id);
320 if (itr->second->PlayerLoading())
323 itr->second->
KickPlayer(
"World::RemoveSession");
344 s->
KickPlayer(
"World::AddSession_ Couldn't remove the other session while on loading screen");
350 bool decrease_session =
true;
361 decrease_session =
false;
375 if (decrease_session)
396 TC_LOG_INFO(
"misc",
"Server Population ({}).", popu);
469 if (!found && sessions)
487 (*iter)->SendAuthWaitQueue(position);
497 std::vector<std::string> configErrors;
500 for (std::string
const& configError : configErrors)
501 TC_LOG_ERROR(
"misc",
"World settings reload fail: {}.", configError);
505 sLog->LoadFromConfig();
511 SetMotd(
sConfigMgr->GetStringDefault(
"Motd",
"Welcome to a TrinityCore Server."));
710 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");
716 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");
916 TC_LOG_ERROR(
"server.loading",
"StartDeathKnightPlayerLevel ({}) must be in range 1..MaxPlayerLevel({}). Set to 55.",
922 TC_LOG_ERROR(
"server.loading",
"StartDeathKnightPlayerLevel ({}) must be in range 1..MaxPlayerLevel({}). Set to {}.",
935 TC_LOG_ERROR(
"server.loading",
"StartPlayerMoney ({}) must be in range 0..{}. Set to {}.",
948 TC_LOG_ERROR(
"server.loading",
"StartDeathKnightPlayerMoney ({}) must be in range 0..{}. Set to {}.",
963 TC_LOG_ERROR(
"server.loading",
"StartHonorPoints ({}) must be in range 0..MaxHonorPoints({}). Set to {}.",
969 TC_LOG_ERROR(
"server.loading",
"StartHonorPoints ({}) must be in range 0..MaxHonorPoints({}). Set to {}.",
984 TC_LOG_ERROR(
"server.loading",
"StartArenaPoints ({}) must be in range 0..MaxArenaPoints({}). Set to {}.",
990 TC_LOG_ERROR(
"server.loading",
"StartArenaPoints ({}) must be in range 0..MaxArenaPoints({}). Set to {}.",
998 TC_LOG_ERROR(
"server.loading",
"RecruitAFriend.MaxLevel ({}) must be in the range 0..MaxLevel({}). Set to {}.",
1047 TC_LOG_ERROR(
"server.loading",
"GM.StartLevel ({}) must be in range StartPlayerLevel({})..{}. Set to {}.",
1096 TC_LOG_INFO(
"server.loading",
"Will clear `logs` table of entries older than {} seconds every {} minutes.",
1264 if (
int32 clientCacheId =
sConfigMgr->GetIntDefault(
"ClientCacheVersion", 0))
1267 if (clientCacheId > 0)
1270 TC_LOG_ERROR(
"server.loading",
"ClientCacheVersion can't be negative {}, ignored.", clientCacheId);
1404 _guidWarningMsg =
sConfigMgr->GetStringDefault(
"Respawn.WarningMessage",
"There will be an unscheduled server restart at 03:00. The server will be available again shortly after.");
1408 std::string dataPath =
sConfigMgr->GetStringDefault(
"DataDir",
"./");
1409 if (dataPath.empty() || (dataPath.at(dataPath.length()-1) !=
'/' && dataPath.at(dataPath.length()-1) !=
'\\'))
1410 dataPath.push_back(
'/');
1412#if TRINITY_PLATFORM == TRINITY_PLATFORM_UNIX || TRINITY_PLATFORM == TRINITY_PLATFORM_APPLE
1413 if (dataPath[0] ==
'~')
1415 char const* home = getenv(
"HOME");
1417 dataPath.replace(0, 1, home);
1424 TC_LOG_ERROR(
"server.loading",
"DataDir option can't be changed at worldserver.conf reload, using current value ({}).",
m_dataPath);
1436 bool enableIndoor =
sConfigMgr->GetBoolDefault(
"vmap.enableIndoorCheck",
true);
1437 bool enableLOS =
sConfigMgr->GetBoolDefault(
"vmap.enableLOS",
true);
1438 bool enableHeight =
sConfigMgr->GetBoolDefault(
"vmap.enableHeight",
true);
1441 TC_LOG_ERROR(
"server.loading",
"VMap height checking disabled! Creatures movements and other various things WILL be broken! Expect no support.");
1445 TC_LOG_INFO(
"server.loading",
"VMap support included. LineOfSight: {}, getHeight: {}, indoorCheck: {}", enableLOS, enableHeight, enableIndoor);
1602 sLog->SetRealmId(realmId);
1638 TC_LOG_FATAL(
"server.loading",
"Unable to load critical files - server shutting down !!!");
1650 TC_LOG_INFO(
"server.loading",
"Loading Trinity strings...");
1661 LoginDatabase.PExecute(
"UPDATE realmlist SET icon = {}, timezone = {} WHERE id = '{}'", server_type, realm_zone,
realm.
Id.
Realm);
1664 TC_LOG_INFO(
"server.loading",
"Initialize data stores...");
1674 std::vector<uint32> mapIds;
1677 mapIds.push_back(mapId);
1684 TC_LOG_INFO(
"server.loading",
"Initializing PlayerDump tables...");
1690 TC_LOG_INFO(
"server.loading",
"Loading SpellInfo store...");
1693 TC_LOG_INFO(
"server.loading",
"Loading SpellInfo corrections...");
1696 TC_LOG_INFO(
"server.loading",
"Loading SkillLineAbilityMultiMap Data...");
1699 TC_LOG_INFO(
"server.loading",
"Loading SpellInfo custom attributes...");
1700 sSpellMgr->LoadSpellInfoCustomAttributes();
1702 TC_LOG_INFO(
"server.loading",
"Loading SpellInfo diminishing infos...");
1705 TC_LOG_INFO(
"server.loading",
"Loading SpellInfo immunity infos...");
1708 TC_LOG_INFO(
"server.loading",
"Loading Player Totem models...");
1711 TC_LOG_INFO(
"server.loading",
"Loading GameObject models...");
1714 TC_LOG_INFO(
"server.loading",
"Loading Script Names...");
1717 TC_LOG_INFO(
"server.loading",
"Loading Instance Template...");
1721 TC_LOG_INFO(
"server.loading",
"Loading instances...");
1725 TC_LOG_INFO(
"server.loading",
"Loading character cache store...");
1728 TC_LOG_INFO(
"server.loading",
"Loading Broadcast texts...");
1732 TC_LOG_INFO(
"server.loading",
"Loading Localization strings...");
1750 TC_LOG_INFO(
"server.loading",
"Loading Account Roles and Permissions...");
1753 TC_LOG_INFO(
"server.loading",
"Loading Page Texts...");
1756 TC_LOG_INFO(
"server.loading",
"Loading Game Object Templates...");
1759 TC_LOG_INFO(
"server.loading",
"Loading Game Object template addons...");
1762 TC_LOG_INFO(
"server.loading",
"Loading Transport templates...");
1765 TC_LOG_INFO(
"server.loading",
"Loading Transport animations and rotations...");
1768 TC_LOG_INFO(
"server.loading",
"Loading Spell Rank Data...");
1771 TC_LOG_INFO(
"server.loading",
"Loading Spell Required Data...");
1774 TC_LOG_INFO(
"server.loading",
"Loading Spell Group types...");
1777 TC_LOG_INFO(
"server.loading",
"Loading Spell Learn Skills...");
1780 TC_LOG_INFO(
"server.loading",
"Loading SpellInfo SpellSpecific and AuraState...");
1781 sSpellMgr->LoadSpellInfoSpellSpecificAndAuraState();
1783 TC_LOG_INFO(
"server.loading",
"Loading Spell Learn Spells...");
1786 TC_LOG_INFO(
"server.loading",
"Loading Spell Proc conditions and data...");
1789 TC_LOG_INFO(
"server.loading",
"Loading Spell Bonus Data...");
1792 TC_LOG_INFO(
"server.loading",
"Loading Aggro Spells Definitions...");
1795 TC_LOG_INFO(
"server.loading",
"Loading Spell Group Stack Rules...");
1798 TC_LOG_INFO(
"server.loading",
"Loading NPC Texts...");
1801 TC_LOG_INFO(
"server.loading",
"Loading Enchant Spells Proc datas...");
1804 TC_LOG_INFO(
"server.loading",
"Loading Item Random Enchantments Table...");
1807 TC_LOG_INFO(
"server.loading",
"Loading Disables");
1810 TC_LOG_INFO(
"server.loading",
"Loading Items...");
1813 TC_LOG_INFO(
"server.loading",
"Loading Item set names...");
1816 TC_LOG_INFO(
"server.loading",
"Loading Creature Model Based Info Data...");
1819 TC_LOG_INFO(
"server.loading",
"Loading Creature templates...");
1822 TC_LOG_INFO(
"server.loading",
"Loading Equipment templates...");
1825 TC_LOG_INFO(
"server.loading",
"Loading Creature template addons...");
1828 TC_LOG_INFO(
"server.loading",
"Loading Reputation Reward Rates...");
1831 TC_LOG_INFO(
"server.loading",
"Loading Creature Reputation OnKill Data...");
1834 TC_LOG_INFO(
"server.loading",
"Loading Reputation Spillover Data...");
1835 sObjectMgr->LoadReputationSpilloverTemplate();
1837 TC_LOG_INFO(
"server.loading",
"Loading Points Of Interest Data...");
1840 TC_LOG_INFO(
"server.loading",
"Loading Creature Base Stats...");
1843 TC_LOG_INFO(
"server.loading",
"Loading Spawn Group Templates...");
1846 TC_LOG_INFO(
"server.loading",
"Loading Creature Data...");
1849 TC_LOG_INFO(
"server.loading",
"Loading Temporary Summon Data...");
1852 TC_LOG_INFO(
"server.loading",
"Loading pet levelup spells...");
1855 TC_LOG_INFO(
"server.loading",
"Loading pet default spells additional to levelup spells...");
1858 TC_LOG_INFO(
"server.loading",
"Loading Creature Addon Data...");
1861 TC_LOG_INFO(
"server.loading",
"Loading Creature Movement Overrides...");
1864 TC_LOG_INFO(
"server.loading",
"Loading Gameobject Data...");
1867 TC_LOG_INFO(
"server.loading",
"Loading Spawn Group Data...");
1870 TC_LOG_INFO(
"server.loading",
"Loading instance spawn groups...");
1873 TC_LOG_INFO(
"server.loading",
"Loading GameObject Addon Data...");
1876 TC_LOG_INFO(
"server.loading",
"Loading GameObject faction and flags overrides...");
1879 TC_LOG_INFO(
"server.loading",
"Loading GameObject Quest Items...");
1882 TC_LOG_INFO(
"server.loading",
"Loading Creature Quest Items...");
1885 TC_LOG_INFO(
"server.loading",
"Loading Creature Linked Respawn...");
1888 TC_LOG_INFO(
"server.loading",
"Loading Weather Data...");
1891 TC_LOG_INFO(
"server.loading",
"Loading Quests...");
1894 TC_LOG_INFO(
"server.loading",
"Checking Quest Disables");
1897 TC_LOG_INFO(
"server.loading",
"Loading Quest POI");
1900 TC_LOG_INFO(
"server.loading",
"Loading Quests Starters and Enders...");
1903 TC_LOG_INFO(
"server.loading",
"Loading Quests Greetings...");
1906 TC_LOG_INFO(
"server.loading",
"Loading Objects Pooling Data...");
1908 TC_LOG_INFO(
"server.loading",
"Loading Quest Pooling Data...");
1911 TC_LOG_INFO(
"server.loading",
"Loading Game Event Data...");
1915 TC_LOG_INFO(
"server.loading",
"Loading UNIT_NPC_FLAG_SPELLCLICK Data...");
1918 TC_LOG_INFO(
"server.loading",
"Loading Vehicle Templates...");
1921 TC_LOG_INFO(
"server.loading",
"Loading Vehicle Template Accessories...");
1922 sObjectMgr->LoadVehicleTemplateAccessories();
1924 TC_LOG_INFO(
"server.loading",
"Loading Vehicle Accessories...");
1927 TC_LOG_INFO(
"server.loading",
"Loading Vehicle Seat Addon Data...");
1930 TC_LOG_INFO(
"server.loading",
"Loading SpellArea Data...");
1933 TC_LOG_INFO(
"server.loading",
"Loading Area Trigger Teleports definitions...");
1936 TC_LOG_INFO(
"server.loading",
"Loading Access Requirements...");
1939 TC_LOG_INFO(
"server.loading",
"Loading Quest Area Triggers...");
1942 TC_LOG_INFO(
"server.loading",
"Loading Tavern Area Triggers...");
1945 TC_LOG_INFO(
"server.loading",
"Loading AreaTrigger script names...");
1948 TC_LOG_INFO(
"server.loading",
"Loading LFG entrance positions...");
1951 TC_LOG_INFO(
"server.loading",
"Loading Dungeon boss data...");
1954 TC_LOG_INFO(
"server.loading",
"Loading LFG rewards...");
1957 TC_LOG_INFO(
"server.loading",
"Loading Graveyard-zone links...");
1960 TC_LOG_INFO(
"server.loading",
"Loading spell pet auras...");
1963 TC_LOG_INFO(
"server.loading",
"Loading Spell target coordinates...");
1966 TC_LOG_INFO(
"server.loading",
"Loading enchant custom attributes...");
1969 TC_LOG_INFO(
"server.loading",
"Loading linked spells...");
1972 TC_LOG_INFO(
"server.loading",
"Loading Player Create Data...");
1975 TC_LOG_INFO(
"server.loading",
"Loading Exploration BaseXP Data...");
1978 TC_LOG_INFO(
"server.loading",
"Loading Pet Name Parts...");
1983 TC_LOG_INFO(
"server.loading",
"Loading the max pet number...");
1986 TC_LOG_INFO(
"server.loading",
"Loading pet level stats...");
1989 TC_LOG_INFO(
"server.loading",
"Loading Player level dependent mail rewards...");
1995 TC_LOG_INFO(
"server.loading",
"Loading Skill Discovery Table...");
1998 TC_LOG_INFO(
"server.loading",
"Loading Skill Extra Item Table...");
2001 TC_LOG_INFO(
"server.loading",
"Loading Skill Perfection Data Table...");
2004 TC_LOG_INFO(
"server.loading",
"Loading Skill Fishing base level requirements...");
2007 TC_LOG_INFO(
"server.loading",
"Loading Achievements...");
2009 TC_LOG_INFO(
"server.loading",
"Loading Achievement Criteria Lists...");
2011 TC_LOG_INFO(
"server.loading",
"Loading Achievement Criteria Data...");
2013 TC_LOG_INFO(
"server.loading",
"Loading Achievement Rewards...");
2015 TC_LOG_INFO(
"server.loading",
"Loading Achievement Reward Locales...");
2017 TC_LOG_INFO(
"server.loading",
"Loading Completed Achievements...");
2021 TC_LOG_INFO(
"server.loading",
"Loading Item Auctions...");
2024 TC_LOG_INFO(
"server.loading",
"Loading Auctions...");
2027 TC_LOG_INFO(
"server.loading",
"Loading Guilds...");
2030 TC_LOG_INFO(
"server.loading",
"Loading ArenaTeams...");
2033 TC_LOG_INFO(
"server.loading",
"Loading Groups...");
2036 TC_LOG_INFO(
"server.loading",
"Loading ReservedNames...");
2039 TC_LOG_INFO(
"server.loading",
"Loading GameObjects for quests...");
2042 TC_LOG_INFO(
"server.loading",
"Loading BattleMasters...");
2045 TC_LOG_INFO(
"server.loading",
"Loading GameTeleports...");
2048 TC_LOG_INFO(
"server.loading",
"Loading Trainers...");
2051 TC_LOG_INFO(
"server.loading",
"Loading Creature default trainers...");
2054 TC_LOG_INFO(
"server.loading",
"Loading Gossip menu...");
2057 TC_LOG_INFO(
"server.loading",
"Loading Gossip menu options...");
2060 TC_LOG_INFO(
"server.loading",
"Loading Vendors...");
2063 TC_LOG_INFO(
"server.loading",
"Loading Waypoints...");
2066 TC_LOG_INFO(
"server.loading",
"Loading Creature Formations...");
2069 TC_LOG_INFO(
"server.loading",
"Loading World States...");
2072 TC_LOG_INFO(
"server.loading",
"Loading Conditions...");
2075 TC_LOG_INFO(
"server.loading",
"Loading faction change achievement pairs...");
2078 TC_LOG_INFO(
"server.loading",
"Loading faction change spell pairs...");
2081 TC_LOG_INFO(
"server.loading",
"Loading faction change quest pairs...");
2084 TC_LOG_INFO(
"server.loading",
"Loading faction change item pairs...");
2087 TC_LOG_INFO(
"server.loading",
"Loading faction change reputation pairs...");
2090 TC_LOG_INFO(
"server.loading",
"Loading faction change title pairs...");
2093 TC_LOG_INFO(
"server.loading",
"Loading GM tickets...");
2096 TC_LOG_INFO(
"server.loading",
"Loading GM surveys...");
2099 TC_LOG_INFO(
"server.loading",
"Loading client addons...");
2103 TC_LOG_INFO(
"server.loading",
"Returning old mails...");
2106 TC_LOG_INFO(
"server.loading",
"Loading Autobroadcasts...");
2113 TC_LOG_INFO(
"server.loading",
"Loading spell script names...");
2116 TC_LOG_INFO(
"server.loading",
"Loading Creature Texts...");
2119 TC_LOG_INFO(
"server.loading",
"Loading Creature Text Locales...");
2122 TC_LOG_INFO(
"server.loading",
"Initializing Scripts...");
2126 TC_LOG_INFO(
"server.loading",
"Validating spell scripts...");
2129 TC_LOG_INFO(
"server.loading",
"Loading SmartAI scripts...");
2132 TC_LOG_INFO(
"server.loading",
"Loading Calendar data...");
2135 TC_LOG_INFO(
"server.loading",
"Loading Petitions...");
2138 TC_LOG_INFO(
"server.loading",
"Loading Signatures...");
2141 TC_LOG_INFO(
"server.loading",
"Loading Item loot...");
2144 TC_LOG_INFO(
"server.loading",
"Initialize query data...");
2147 TC_LOG_INFO(
"server.loading",
"Initialize commands...");
2151 TC_LOG_INFO(
"server.loading",
"Initialize game time and timers");
2154 LoginDatabase.PExecute(
"INSERT INTO uptime (realmid, starttime, uptime, revision) VALUES({}, {}, 0, '{}')",
2185 localtime_r(&gameTime, &localTm);
2193 TC_LOG_INFO(
"server.loading",
"Starting Map System");
2196 TC_LOG_INFO(
"server.loading",
"Starting Game Event system...");
2203 TC_LOG_INFO(
"server.loading",
"Initialize AuctionHouseBot...");
2206 TC_LOG_INFO(
"server.loading",
"Initializing chat channels...");
2209 TC_LOG_INFO(
"server.loading",
"Initializing Opcodes...");
2212 TC_LOG_INFO(
"server.loading",
"Starting Arena Season...");
2218 TC_LOG_INFO(
"server.loading",
"Starting Battleground System");
2223 TC_LOG_INFO(
"server.loading",
"Starting Outdoor PvP System");
2227 TC_LOG_INFO(
"server.loading",
"Starting Battlefield System");
2230 TC_LOG_INFO(
"server.loading",
"Loading Transports...");
2234 TC_LOG_INFO(
"server.loading",
"Loading Warden Checks...");
2237 TC_LOG_INFO(
"server.loading",
"Loading Warden Action Overrides...");
2240 TC_LOG_INFO(
"server.loading",
"Deleting expired bans...");
2241 LoginDatabase.Execute(
"DELETE FROM ip_banned WHERE unbandate <= UNIX_TIMESTAMP() AND unbandate<>bandate");
2243 TC_LOG_INFO(
"server.loading",
"Initializing quest reset times...");
2247 TC_LOG_INFO(
"server.loading",
"Calculate random battleground reset time...");
2250 TC_LOG_INFO(
"server.loading",
"Calculate deletion of old calendar events time...");
2253 TC_LOG_INFO(
"server.loading",
"Calculate guild limitation(s) reset time...");
2263 TC_LOG_INFO(
"server.loading",
"Pre-loading base map data for map {}", map->GetId());
2264 map->LoadAllCells();
2271 TC_LOG_INFO(
"server.worldserver",
"World initialized in {} minutes {} seconds", (startupDuration / 60000), ((startupDuration % 60000) / 1000));
2273 TC_METRIC_EVENT(
"events",
"World initialized",
"World initialized in " + std::to_string(startupDuration / 60000) +
" minutes " + std::to_string((startupDuration % 60000) / 1000) +
" seconds");
2288 std::string availableLocalsStr;
2293 if (race->
Name[i][0] !=
'\0')
2301 availableLocalsStr +=
" ";
2307 TC_LOG_ERROR(
"server.loading",
"Unable to determine your DBC Locale! (corrupt DBC?)");
2311 if (default_locale != m_lang_confid && m_lang_confid <
TOTAL_LOCALES &&
2314 default_locale = m_lang_confid;
2336 TC_LOG_INFO(
"server.loading",
">> Loaded 0 autobroadcasts definitions. DB table `autobroadcast` is empty for this realm!");
2344 Field* fields = result->Fetch();
2351 }
while (result->NextRow());
2588 TC_LOG_DEBUG(
"sql.driver",
"Ping MySQL to keep connection alive");
2640 SessionMap::const_iterator itr;
2644 itr->second->GetPlayer() &&
2645 itr->second->GetPlayer()->IsInWorld() &&
2646 itr->second != self &&
2647 (team == 0 || itr->second->GetPlayer()->GetTeam() == team))
2649 itr->second->SendPacket(packet);
2670 if (!team || player->
GetTeam() == team)
2728 va_start(ap, string_id);
2734 if (!itr->second || !itr->second->GetPlayer() || !itr->second->GetPlayer()->IsInWorld())
2737 wt_do(itr->second->GetPlayer());
2747 va_start(ap, string_id);
2773 char* buf = strdup(text);
2793 itr->second->KickPlayer(
"World::KickAll");
2801 if (itr->second->GetSecurity() < sec)
2802 itr->second->KickPlayer(
"World::KickAllLess");
2809 return BanAccount(mode, nameOrIP, duration_secs, reason, author);
2858 if (!resultAccounts)
2870 Field* fieldsAccount = resultAccounts->Fetch();
2878 trans->Append(stmt);
2885 trans->Append(stmt);
2889 if (std::string(sess->GetPlayerName()) != author)
2890 sess->KickPlayer(
"World::BanAccount Banning account");
2891 }
while (resultAccounts->NextRow());
2951 trans->Append(stmt);
2958 trans->Append(stmt);
3063 if (!reason.empty())
3064 str +=
" - " + reason;
3130 [[maybe_unused]]
uint32 currentSessionId = itr->first;
3133 if (!pSession->
Update(diff, updater))
3149 void* callbackArg =
nullptr;
3153 TC_LOG_INFO(
"misc",
"CLI command under processing...");
3177 weight += it->second;
3178 selectionWeights[it->first] = it->second;
3186 for (AutobroadcastsWeightMap::const_iterator it = selectionWeights.begin(); it != selectionWeights.end(); ++it)
3188 weight += it->second;
3189 if (selectedWeight < weight)
3203 else if (abcenter == 1)
3207 sWorld->SendGlobalMessage(&data);
3209 else if (abcenter == 2)
3215 sWorld->SendGlobalMessage(&data);
3230 if (resultCharCount)
3232 Field* fields = resultCharCount->Fetch();
3234 uint8 charCount =
uint8(fields[1].GetUInt64());
3242 trans->Append(stmt);
3267 if (
Player* player = itr->second->GetPlayer())
3268 player->ResetDailyQuestStatus();
3281 TC_LOG_INFO(
"misc",
"Daily quests for all characters have been reset.");
3288 int wday = time.tm_wday;
3292 t += (
DAY * (target - wday));
3303 if (
Player* player = itr->second->GetPlayer())
3304 player->ResetWeeklyQuestStatus();
3317 TC_LOG_INFO(
"misc",
"Weekly quests for all characters have been reset.");
3324 if (time.tm_mday == 1)
3329 return mktime(&time);
3339 if (
Player* player = itr->second->GetPlayer())
3340 player->ResetMonthlyQuestStatus();
3353 TC_LOG_INFO(
"misc",
"Monthly quests for all characters have been reset.");
3376 localtime_r(&curTime, &localTm);
3382 time_t nextDayResetTime = mktime(&localTm);
3385 if (curTime >= nextDayResetTime)
3386 nextDayResetTime +=
DAY;
3403 if (currentDeletionTime < now)
3408 if (!currentDeletionTime)
3421 localtime_r(&curTime, &localTm);
3427 time_t nextDayResetTime = mktime(&localTm);
3430 if (curTime >= nextDayResetTime)
3431 nextDayResetTime +=
DAY;
3442 TC_LOG_INFO(
"misc",
"Seasonal quests reset for all characters.");
3450 if (itr->second->GetPlayer())
3451 itr->second->GetPlayer()->ResetSeasonalQuestStatus(event_id, eventStartTime);
3456 TC_LOG_INFO(
"misc",
"Random BG status reset for all characters.");
3462 if (itr->second->GetPlayer())
3463 itr->second->GetPlayer()->SetRandomWinner(
false);
3471 TC_LOG_INFO(
"misc",
"Calendar deletion of old events.");
3498 Field* fields = result->Fetch();
3511 SessionMap::const_iterator itr;
3513 if (itr->second && itr->second->GetPlayer() && itr->second->GetPlayer()->IsInWorld())
3515 itr->second->GetPlayer()->UpdateAreaDependentAuras(itr->second->GetPlayer()->GetAreaId());
3516 itr->second->GetPlayer()->UpdateZoneDependentAuras(itr->second->GetPlayer()->GetZoneId());
3528 TC_LOG_INFO(
"server.loading",
">> Loaded 0 world states. DB table `worldstates` is empty!");
3537 Field* fields = result->Fetch();
3541 while (result->NextRow());
3560 WorldStatesMap::const_iterator it =
m_worldstates.find(index);
3563 if (it->second == value)
3587 WorldStatesMap::const_iterator it =
m_worldstates.find(index);
3602 session->InvalidateRBACData();
3613 : m_callbackArg(callbackArg), m_command(strdup(command)), m_print(zprint), m_commandFinished(
commandFinished)
@ 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_DEL_BATTLEGROUND_RANDOM_ALL
@ CHAR_DEL_RESET_CHARACTER_QUESTSTATUS_WEEKLY
char const * localeNames[TOTAL_LOCALES]
uint32 GetLiquidFlags(uint32 liquidType)
DBCStorage< ChrRacesEntry > sChrRacesStore(ChrRacesEntryfmt)
DBCStorage< MapEntry > sMapStore(MapEntryfmt)
void LoadDBCStores(const std::string &dataPath)
SQLTransaction< CharacterDatabaseConnection > CharacterDatabaseTransaction
SQLTransaction< LoginDatabaseConnection > LoginDatabaseTransaction
std::shared_ptr< ResultSet > QueryResult
std::shared_ptr< PreparedResultSet > PreparedQueryResult
DatabaseWorkerPool< LoginDatabaseConnection > LoginDatabase
Accessor to the realm/login database.
DatabaseWorkerPool< CharacterDatabaseConnection > CharacterDatabase
Accessor to the character database.
DatabaseWorkerPool< WorldDatabaseConnection > WorldDatabase
Accessor to the world database.
#define ASSERT_NOTNULL(pointer)
void LoadGameObjectModelList(std::string const &dataPath)
#define MIN_MAP_UPDATE_DELAY
void LoadRandomEnchantmentsTable()
#define TC_LOG_DEBUG(filterType__,...)
#define TC_LOG_ERROR(filterType__,...)
#define TC_LOG_INFO(filterType__,...)
#define TC_LOG_FATAL(filterType__,...)
@ LOGIN_INS_ACCOUNT_BANNED
@ LOGIN_SEL_ACCOUNT_BY_IP
@ LOGIN_UPD_UPTIME_PLAYERS
@ LOGIN_DEL_IP_NOT_BANNED
@ LOGIN_REP_REALM_CHARACTERS
@ LOGIN_SEL_REALMLIST_SECURITY_LEVEL
@ LOGIN_UPD_ACCOUNT_NOT_BANNED
@ LOGIN_SEL_AUTOBROADCAST
@ LOGIN_SEL_ACCOUNT_ID_BY_NAME
void LoadM2Cameras(std::string const &dataPath)
void dtCustomFree(void *ptr)
void * dtCustomAlloc(size_t size, dtAllocHint)
#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
uint32 const MAX_MONEY_AMOUNT
uint32 urand(uint32 min, uint32 max)
BanReturn
Ban function return codes.
@ GUILD_BANKLOG_MAX_RECORDS
@ GUILD_EVENTLOG_MAX_RECORDS
@ WS_GUILD_DAILY_RESET_TIME
@ WS_WEEKLY_QUEST_RESET_TIME
@ WS_MONTHLY_QUEST_RESET_TIME
@ WS_DAILY_CALENDAR_DELETION_OLD_EVENTS_TIME
@ WS_DAILY_QUEST_RESET_TIME
BanMode
Ban function modes.
void LoadSkillDiscoveryTable()
uint32 GetMSTimeDiffToNow(uint32 oldMSTime)
float baseMoveSpeed[MAX_MOVE_TYPE]
float playerBaseMoveSpeed[MAX_MOVE_TYPE]
WorldUpdateTime sWorldUpdateTime
time_t GetLocalHourTimestamp(time_t time, uint8 hour, bool onlyAfterTime)
tm TimeBreakdown(time_t time)
std::string secsToTimeString(uint64 timeInSecs, TimeFormat timeFormat, bool hoursOnly)
uint32 TimeStringToSecs(std::string const ×tring)
#define sWhoListStorageMgr
static time_t GetNextDailyResetTime(time_t t)
static time_t GetNextWeeklyResetTime(time_t t)
static time_t GetNextMonthlyResetTime(time_t t)
static bool IsBannedAccount(std::string const &name)
static uint32 GetId(std::string_view username)
T & AddCallback(T &&query)
void ProcessReadyCallbacks()
static ChannelMgr * ForTeam(uint32 team)
bool HasSentErrorMessage() const
static char * LineFromMessage(char *&pos)
bool ParseCommands(std::string_view str) override
Class used to access individual fields of database query result.
std::string GetString() const
void add(const T &item)
Adds an item to the queue.
bool next(T &result)
Gets the next result in the queue, if any.
static MMapManager * createOrGetMMapManager()
void InitializeThreadUnsafe(const std::vector< uint32 > &mapIds)
static bool ExistMapAndVMap(uint32 mapid, float x, float y)
bool Instanceable() const
LowType GetCounter() const
static ObjectGuid GetGUID(Object const *o)
void Initialize()
Correspondence between opcodes and their names.
static void InitializeTables()
static void DeleteOldCharacters()
void SendDirectMessage(WorldPacket const *data) const
WorldSession * GetSession() const
void setUInt16(uint8 index, uint16 value)
void setUInt32(uint8 index, uint32 value)
void setInt64(uint8 index, int64 value)
void setInt32(uint8 index, int32 value)
void setUInt8(uint8 index, uint8 value)
void setString(uint8 index, std::string const &value)
std::vector< WorldPacket * > WorldPacketList
void do_helper(WorldPacketList &dataList, char *text)
static size_t const BufferSize
WorldWorldTextBuilder(uint32 textId, va_list *args=nullptr)
void operator()(WorldPacketList &dataList, LocaleConstant locale)
void UpdateWithDiff(uint32 diff)
void setEnableLineOfSightCalc(bool pVal)
void setEnableHeightCalc(bool pVal)
static VMapManager2 * createOrGetVMapManager()
void InitializeThreadUnsafe(const std::vector< uint32 > &mapIds)
IsVMAPDisabledForFn IsVMAPDisabledForPtr
GetLiquidFlagsFn GetLiquidFlagsPtr
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
Player session in the World.
bool Update(uint32 diff, PacketFilter &updater)
Update the WorldSession (triggered by World update)
void SendPacket(WorldPacket const *packet)
Send a packet to the client.
void KickPlayer(std::string const &reason)
Kick a player out of the World.
Player * GetPlayer() const
void SetInQueue(bool state)
Session in auth.queue currently.
bool HasPermission(uint32 permissionId)
uint32 GetAccountId() const
void ResetTimeOutTime(bool onlyActive)
void SendAuthResponse(uint8 code, bool shortForm, uint32 queuePos=0)
time_t m_NextWeeklyQuestReset
uint32 ShutdownCancel()
Cancel a planned server shutdown.
bool RemoveBanCharacter(std::string const &name)
Remove a ban from a character.
void UpdateSessions(uint32 diff)
uint32 getIntConfig(WorldIntConfigs index) const
Get a server configuration element (see #WorldConfigs)
LocaleConstant m_defaultDbcLocale
static int32 m_visibility_notify_periodInBG
uint32 m_int_configs[INT_CONFIG_VALUE_COUNT]
bool RemoveBanAccount(BanMode mode, std::string const &nameOrIP)
Remove a ban from an account or IP address.
static int32 m_visibility_notify_periodInInstances
static std::atomic< uint32 > m_worldLoopCounter
void AddSession_(WorldSession *s)
float m_float_configs[FLOAT_CONFIG_VALUE_COUNT]
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
void SetMotd(std::string motd)
Set a new Message of the Day.
bool IsPvPRealm() const
Are we on a "Player versus Player" server?
void SetNewCharString(std::string const &str)
Set the string for new characters (first login)
LockedQueue< WorldSession * > addSessQueue
static float m_MaxVisibleDistanceInArenas
static float m_MaxVisibleDistanceInBG
QueryCallbackProcessor _queryProcessor
bool m_bool_configs[BOOL_CONFIG_VALUE_COUNT]
void UpdateRealmCharCount(uint32 accid)
void CheckQuestResetTimes()
void LoadDBAllowedSecurityLevel()
std::mutex _guidAlertLock
bool HasRecentlyDisconnected(WorldSession *)
void AddQueuedPlayer(WorldSession *)
uint32 GetQueuedSessionCount() const
void UpdateMaxSessionCounters()
Get the number of current active sessions.
uint32 m_maxActiveSessionCount
void SetInitialWorldSettings()
Initialize the World.
void ResetMonthlyQuests()
time_t m_NextDailyQuestReset
void InitCalendarOldEventsDeletionTime()
void DoGuidAlertRestart()
bool IsFFAPvPRealm() const
bool RemoveSession(uint32 id)
Remove a given session.
time_t m_NextRandomBGReset
Player * FindPlayerInZone(uint32 zone)
Find a player in a specified zone.
void SendGlobalGMMessage(WorldPacket const *packet, WorldSession *self=nullptr, uint32 team=0)
Send a packet to all GMs (except self if mentioned)
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...
void TriggerGuidWarning()
float getRate(Rates rate) const
Get a server rate (see Rates)
void SendGMText(uint32 string_id,...)
Send a System Message to all GMs (except self if mentioned)
void ShutdownMsg(bool show=false, Player *player=nullptr, const std::string &reason=std::string())
Display a shutdown message to the user(s)
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...
AutobroadcastsMap m_Autobroadcasts
time_t mail_timer_expires
void InitRandomBGResetTime()
std::vector< std::string > const & GetMotd() const
Get the current Message of the Day.
~World()
World destructor.
void setWorldState(uint32 index, uint64 value)
void _UpdateRealmCharCount(PreparedQueryResult resultCharCount)
uint32 GetActiveSessionCount() const
DisconnectMap m_disconnects
time_t m_NextCalendarOldEventsDeletionTime
uint32 m_availableDbcLocaleMask
std::string _guidWarningMsg
void ResetEventSeasonalQuests(uint16 event_id, time_t eventStartTime)
void SetPlayerSecurityLimit(AccountTypes sec)
bool IsClosed() const
Deny clients?
static int32 m_visibility_notify_periodInArenas
void KickAll()
Kick (and save) all players.
uint32 GetPlayerAmountLimit() const
void AddSession(WorldSession *s)
std::string _alertRestartReason
void ForceGameEventUpdate()
void CalendarDeleteOldEvents()
void SendGlobalMessage(WorldPacket const *packet, WorldSession *self=nullptr, uint32 team=0)
Send a packet to all players (except self if mentioned)
void ProcessQueryCallbacks()
uint64 getWorldState(uint32 index) const
static World * instance()
WorldStatesMap m_worldstates
LocaleConstant GetDefaultDbcLocale() const
static float m_MaxVisibleDistanceOnContinents
uint32 GetActiveAndQueuedSessionCount() const
static float m_MaxVisibleDistanceInInstances
WorldSession * FindSession(uint32 id) const
Find a session by its id.
int32 GetQueuePos(WorldSession *)
bool RemoveQueuedPlayer(WorldSession *session)
void UpdateAreaDependentAuras()
void InitQuestResetTimes()
uint32 GetMaxPlayerCount() const
void SendServerMessage(ServerMessageType messageID, std::string stringParam="", Player *player=nullptr)
Send a server message to the user(s)
IntervalTimer m_timers[WUPDATE_COUNT]
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
static int32 m_visibility_notify_periodOnContinents
void Update(uint32 diff)
Update the World !
void LoadAutobroadcasts()
std::map< uint8, uint8 > AutobroadcastsWeightMap
void SetPlayerAmountLimit(uint32 limit)
Active session server limit.
AutobroadcastsWeightMap m_AutobroadcastsWeights
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 constexpr MAX_CHARACTERS_PER_REALM
@ SERVER_MSG_SHUTDOWN_TIME
@ SERVER_MSG_SHUTDOWN_CANCELLED
@ SERVER_MSG_RESTART_CANCELLED
@ SERVER_MSG_RESTART_TIME
@ CONFIG_AUTOBROADCAST_CENTER
@ CONFIG_ARENA_START_MATCHMAKER_RATING
@ CONFIG_RESPAWN_RESTARTQUIETTIME
@ CONFIG_CORPSE_DECAY_ELITE
@ CONFIG_MAX_INSTANCES_PER_HOUR
@ CONFIG_GUILD_EVENT_LOG_COUNT
@ CONFIG_ARENA_START_RATING
@ CONFIG_SOCKET_TIMEOUTTIME
@ CONFIG_MAX_OVERSPEED_PINGS
@ CONFIG_WARDEN_NUM_LUA_CHECKS
@ CONFIG_NO_GRAY_AGGRO_BELOW
@ CONFIG_CHARDELETE_METHOD
@ CONFIG_SESSION_ADD_DELAY
@ CONFIG_MIN_CREATURE_SCALED_XP_RATIO
@ CONFIG_CHARACTER_CREATING_DISABLED_CLASSMASK
@ CONFIG_WARDEN_CLIENT_BAN_DURATION
@ CONFIG_CLIENTCACHE_VERSION
@ CONFIG_DAILY_QUEST_RESET_TIME_HOUR
@ CONFIG_QUEST_LOW_LEVEL_HIDE_DIFF
@ CONFIG_CREATURE_PICKPOCKET_REFILL
@ CONFIG_SKILL_CHANCE_ORANGE
@ CONFIG_AUCTION_GETALL_DELAY
@ CONFIG_RESPAWN_DYNAMICMODE
@ CONFIG_CHATFLOOD_MUTE_TIME
@ CONFIG_STRICT_PET_NAMES
@ CONFIG_CHARACTER_CREATING_DISABLED
@ CONFIG_QUEST_HIGH_LEVEL_HIDE_DIFF
@ CONFIG_CHARACTER_CREATING_DISABLED_RACEMASK
@ CONFIG_INTERVAL_CHANGEWEATHER
@ CONFIG_PRESERVE_CUSTOM_CHANNEL_INTERVAL
@ CONFIG_PRESERVE_CUSTOM_CHANNEL_DURATION
@ CONFIG_GM_WHISPERING_TO
@ CONFIG_SKILL_CHANCE_SKINNING_STEPS
@ CONFIG_SKILL_CHANCE_YELLOW
@ CONFIG_RESPAWN_GUIDWARNING_FREQUENCY
@ CONFIG_AUTOBROADCAST_INTERVAL
@ CONFIG_MAX_HONOR_POINTS
@ CONFIG_DEATH_KNIGHTS_PER_REALM
@ CONFIG_PVP_TOKEN_MAP_TYPE
@ CONFIG_ENABLE_SINFO_LOGIN
@ CONFIG_CHARTER_COST_GUILD
@ CONFIG_CHARDELETE_MIN_LEVEL
@ CONFIG_FORCE_SHUTDOWN_THRESHOLD
@ CONFIG_MAX_ARENA_POINTS
@ CONFIG_ARENA_MAX_RATING_DIFFERENCE
@ CONFIG_BG_REWARD_LOSER_HONOR_LAST
@ CONFIG_WHO_LIST_UPDATE_INTERVAL
@ CONFIG_ARENA_RATED_UPDATE_TIMER
@ CONFIG_SKILL_GAIN_DEFENSE
@ CONFIG_MIN_PETITION_SIGNS
@ CONFIG_WARDEN_CLIENT_CHECK_HOLDOFF
@ CONFIG_RESPAWN_DYNAMICMINIMUM_CREATURE
@ CONFIG_MIN_LEVEL_STAT_SAVE
@ CONFIG_BATTLEGROUND_INVITATION_TYPE
@ CONFIG_START_DEATH_KNIGHT_PLAYER_LEVEL
@ CONFIG_MAX_PLAYER_LEVEL
@ CONFIG_START_ARENA_POINTS
@ CONFIG_MIN_CHARTER_NAME
@ CONFIG_CHAT_CHANNEL_LEVEL_REQ
@ CONFIG_BG_REWARD_WINNER_ARENA_FIRST
@ CONFIG_CHARACTERS_PER_ACCOUNT
@ CONFIG_DEATH_SICKNESS_LEVEL
@ CONFIG_CHARTER_COST_ARENA_5v5
@ CONFIG_INSTANCE_RESET_TIME_HOUR
@ CONFIG_WINTERGRASP_PLR_MIN_LVL
@ CONFIG_GUILD_RESET_HOUR
@ CONFIG_SKILL_GAIN_WEAPON
@ CONFIG_MAIL_DELIVERY_DELAY
@ CONFIG_WINTERGRASP_BATTLETIME
@ CONFIG_PENDING_MOVE_CHANGES_TIMEOUT
@ CONFIG_GM_FREEZE_DURATION
@ CONFIG_WINTERGRASP_NOBATTLETIME
@ CONFIG_PACKET_SPOOF_BANDURATION
@ CONFIG_WARDEN_NUM_CLIENT_MOD_CHECKS
@ CONFIG_SKILL_CHANCE_MINING_STEPS
@ CONFIG_ARENA_AUTO_DISTRIBUTE_INTERVAL_DAYS
@ CONFIG_START_PLAYER_MONEY
@ CONFIG_GUILD_BANK_EVENT_LOG_COUNT
@ CONFIG_AHBOT_UPDATE_INTERVAL
@ CONFIG_BG_REWARD_WINNER_ARENA_LAST
@ CONFIG_BATTLEGROUND_PREMADE_GROUP_WAIT_FOR_MATCH
@ CONFIG_START_DEATH_KNIGHT_PLAYER_MONEY
@ 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_CORPSE_DECAY_WORLDBOSS
@ CONFIG_TICKET_LEVEL_REQ
@ CONFIG_PACKET_SPOOF_POLICY
@ CONFIG_CHATFLOOD_ADDON_MESSAGE_COUNT
@ CONFIG_CHAT_YELL_LEVEL_REQ
@ CONFIG_WARDEN_NUM_INJECT_CHECKS
@ CONFIG_ARENA_PREV_OPPONENTS_DISCARD_TIMER
@ CONFIG_AUCTION_LEVEL_REQ
@ CONFIG_CHAT_STRICT_LINK_CHECKING_KICK
@ CONFIG_GM_LEVEL_IN_GM_LIST
@ CONFIG_ARENA_RATING_DISCARD_TIMER
@ CONFIG_CALENDAR_DELETE_OLD_EVENTS_HOUR
@ CONFIG_GM_VISIBLE_STATE
@ CONFIG_NO_GRAY_AGGRO_ABOVE
@ CONFIG_GROUP_VISIBILITY
@ CONFIG_CREATURE_FAMILY_FLEE_DELAY
@ CONFIG_PACKET_SPOOF_BANMODE
@ CONFIG_XP_BOOST_DAYMASK
@ CONFIG_MIN_DISCOVERED_SCALED_XP_RATIO
@ CONFIG_CHARACTER_CREATING_MIN_LEVEL_FOR_DEATH_KNIGHT
@ CONFIG_CHARDELETE_KEEP_DAYS
@ CONFIG_MAX_RESULTS_LOOKUP_COMMANDS
@ CONFIG_START_HONOR_POINTS
@ 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_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_BATTLEGROUND_PREMATURE_FINISH_TIMER
@ CONFIG_HONOR_AFTER_DUEL
@ CONFIG_WEEKLY_QUEST_RESET_TIME_WDAY
@ CONFIG_PERSISTENT_CHARACTER_CLEAN_FLAGS
@ CONFIG_CORPSE_DECAY_RARE
@ CONFIG_CHAT_STRICT_LINK_CHECKING_SEVERITY
@ CONFIG_RESPAWN_GUIDWARNLEVEL
@ CONFIG_WARDEN_CLIENT_RESPONSE_DELAY
@ CONFIG_TALENTS_INSPECTING
@ CONFIG_WINTERGRASP_PLR_MAX
@ CONFIG_CHAT_EMOTE_LEVEL_REQ
@ CONFIG_AUCTION_SEARCH_DELAY
@ CONFIG_MIN_DUALSPEC_LEVEL
@ CONFIG_SKILL_GAIN_CRAFTING
@ CONFIG_RANDOM_BG_RESET_HOUR
@ CONFIG_DB_PING_INTERVAL
@ CONFIG_WORLD_BOSS_LEVEL_DIFF
@ CONFIG_CORPSE_DECAY_RAREELITE
@ CONFIG_CHATFLOOD_MESSAGE_COUNT
@ CONFIG_WARDEN_CLIENT_FAIL_ACTION
@ CONFIG_RESPAWN_DYNAMICMINIMUM_GAMEOBJECT
@ CONFIG_CHARTER_COST_ARENA_3v3
@ CONFIG_CHATFLOOD_ADDON_MESSAGE_DELAY
@ CONFIG_SKILL_CHANCE_GREY
@ CONFIG_INTERVAL_MAPUPDATE
@ CONFIG_CREATURE_FAMILY_ASSISTANCE_DELAY
@ CONFIG_MAX_PRIMARY_TRADE_SKILL
@ CONFIG_SKILL_CHANCE_GREEN
@ CONFIG_CHAT_SAY_LEVEL_REQ
@ CONFIG_WINTERGRASP_PLR_MIN
@ CONFIG_BG_REWARD_WINNER_HONOR_LAST
@ CONFIG_CHARACTERS_PER_REALM
@ CONFIG_RESPAWN_MINCHECKINTERVALMS
@ WUPDATE_AUCTIONS_PENDING
@ WUPDATE_CHECK_FILECHANGES
@ RATE_CREATURE_NORMAL_SPELLDAMAGE
@ RATE_CREATURE_NORMAL_HP
@ RATE_DROP_ITEM_REFERENCED_AMOUNT
@ RATE_CREATURE_NORMAL_DAMAGE
@ RATE_CREATURE_ELITE_RARE_DAMAGE
@ RATE_REPUTATION_LOWLEVEL_QUEST
@ RATE_DURABILITY_LOSS_BLOCK
@ RATE_CREATURE_ELITE_ELITE_SPELLDAMAGE
@ RATE_REPUTATION_LOWLEVEL_KILL
@ RATE_POWER_RUNICPOWER_INCOME
@ RATE_INSTANCE_RESET_TIME
@ RATE_REST_OFFLINE_IN_WILDERNESS
@ RATE_POWER_RUNICPOWER_LOSS
@ RATE_CREATURE_ELITE_WORLDBOSS_DAMAGE
@ RATE_MONEY_MAX_LEVEL_QUEST
@ RATE_CREATURE_ELITE_RAREELITE_DAMAGE
@ RATE_CREATURE_ELITE_WORLDBOSS_HP
@ RATE_DROP_ITEM_LEGENDARY
@ RATE_DURABILITY_LOSS_PARRY
@ RATE_REST_OFFLINE_IN_TAVERN_OR_CITY
@ RATE_DROP_ITEM_UNCOMMON
@ RATE_DROP_ITEM_REFERENCED
@ RATE_CREATURE_ELITE_RAREELITE_SPELLDAMAGE
@ RATE_REPUTATION_RECRUIT_A_FRIEND_BONUS
@ RATE_DURABILITY_LOSS_DAMAGE
@ RATE_DURABILITY_LOSS_ON_DEATH
@ RATE_CREATURE_ELITE_ELITE_DAMAGE
@ RATE_CREATURE_ELITE_WORLDBOSS_SPELLDAMAGE
@ RATE_DROP_ITEM_ARTIFACT
@ RATE_CREATURE_ELITE_RARE_SPELLDAMAGE
@ RATE_CREATURE_ELITE_ELITE_HP
@ RATE_CREATURE_ELITE_RARE_HP
@ RATE_CORPSE_DECAY_LOOTED
@ RATE_DURABILITY_LOSS_ABSORB
@ RATE_CREATURE_ELITE_RAREELITE_HP
@ CONFIG_STATS_LIMITS_DODGE
@ CONFIG_RESPAWN_DYNAMICRATE_CREATURE
@ CONFIG_ARENA_WIN_RATING_MODIFIER_1
@ CONFIG_GROUP_XP_DISTANCE
@ CONFIG_LISTEN_RANGE_YELL
@ CONFIG_STATS_LIMITS_PARRY
@ CONFIG_CREATURE_FAMILY_FLEE_ASSISTANCE_RADIUS
@ CONFIG_ARENA_WIN_RATING_MODIFIER_2
@ CONFIG_ARENA_LOSE_RATING_MODIFIER
@ CONFIG_CREATURE_FAMILY_ASSISTANCE_RADIUS
@ CONFIG_LISTEN_RANGE_SAY
@ CONFIG_MAX_RECRUIT_A_FRIEND_DISTANCE
@ CONFIG_ARENA_MATCHMAKER_RATING_MODIFIER
@ CONFIG_RESPAWN_DYNAMICRATE_GAMEOBJECT
@ CONFIG_CHANCE_OF_GM_SURVEY
@ 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_CHECK_GOBJECT_LOS
@ CONFIG_INSTANCEMAP_LOAD_GRIDS
@ CONFIG_GM_LOWER_SECURITY
@ CONFIG_ARENA_AUTO_DISTRIBUTE_POINTS
@ CONFIG_PDUMP_NO_OVERWRITE
@ CONFIG_DEATH_CORPSE_RECLAIM_DELAY_PVP
@ CONFIG_START_ALL_SPELLS
@ 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_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_BATTLEGROUND_TRACK_DESERTERS
@ CONFIG_QUEST_IGNORE_AUTO_ACCEPT
@ CONFIG_PREVENT_RENAME_CUSTOMIZATION
@ CONFIG_DIE_COMMAND_MODE
@ CONFIG_VMAP_INDOOR_CHECK
@ CONFIG_CACHE_DATA_QUERIES
@ CONFIG_ALWAYS_MAX_SKILL_FOR_LEVEL
@ CONFIG_RESPAWN_DYNAMIC_ESCORTNPC
@ CONFIG_ALLOW_TWO_SIDE_INTERACTION_GROUP
@ CONFIG_DELETE_CHARACTER_TICKET_TRACE
@ CONFIG_DEATH_BONES_WORLD
@ CONFIG_QUEST_ENABLE_QUEST_TRACKER
@ CONFIG_REGEN_HP_CANNOT_REACH_TARGET_IN_RAID
@ 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_ALLOW_TRACK_BOTH_RESOURCES
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()
TC_COMMON_API std::vector< std::string_view > Tokenize(std::string_view str, char sep, bool keepEmpty)
@ 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)