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 Trinity Core 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");
915 TC_LOG_ERROR(
"server.loading",
"StartDeathKnightPlayerLevel ({}) must be in range 1..MaxPlayerLevel({}). Set to 55.",
921 TC_LOG_ERROR(
"server.loading",
"StartDeathKnightPlayerLevel ({}) must be in range 1..MaxPlayerLevel({}). Set to {}.",
934 TC_LOG_ERROR(
"server.loading",
"StartPlayerMoney ({}) must be in range 0..{}. Set to {}.",
947 TC_LOG_ERROR(
"server.loading",
"StartDeathKnightPlayerMoney ({}) must be in range 0..{}. Set to {}.",
962 TC_LOG_ERROR(
"server.loading",
"StartHonorPoints ({}) must be in range 0..MaxHonorPoints({}). Set to {}.",
968 TC_LOG_ERROR(
"server.loading",
"StartHonorPoints ({}) must be in range 0..MaxHonorPoints({}). Set to {}.",
983 TC_LOG_ERROR(
"server.loading",
"StartArenaPoints ({}) must be in range 0..MaxArenaPoints({}). Set to {}.",
989 TC_LOG_ERROR(
"server.loading",
"StartArenaPoints ({}) must be in range 0..MaxArenaPoints({}). Set to {}.",
997 TC_LOG_ERROR(
"server.loading",
"RecruitAFriend.MaxLevel ({}) must be in the range 0..MaxLevel({}). Set to {}.",
1046 TC_LOG_ERROR(
"server.loading",
"GM.StartLevel ({}) must be in range StartPlayerLevel({})..{}. Set to {}.",
1095 TC_LOG_INFO(
"server.loading",
"Will clear `logs` table of entries older than {} seconds every {} minutes.",
1263 if (
int32 clientCacheId =
sConfigMgr->GetIntDefault(
"ClientCacheVersion", 0))
1266 if (clientCacheId > 0)
1269 TC_LOG_ERROR(
"server.loading",
"ClientCacheVersion can't be negative {}, ignored.", clientCacheId);
1403 _guidWarningMsg =
sConfigMgr->GetStringDefault(
"Respawn.WarningMessage",
"There will be an unscheduled server restart at 03:00. The server will be available again shortly after.");
1407 std::string dataPath =
sConfigMgr->GetStringDefault(
"DataDir",
"./");
1408 if (dataPath.empty() || (dataPath.at(dataPath.length()-1) !=
'/' && dataPath.at(dataPath.length()-1) !=
'\\'))
1409 dataPath.push_back(
'/');
1411#if TRINITY_PLATFORM == TRINITY_PLATFORM_UNIX || TRINITY_PLATFORM == TRINITY_PLATFORM_APPLE
1412 if (dataPath[0] ==
'~')
1414 char const* home = getenv(
"HOME");
1416 dataPath.replace(0, 1, home);
1423 TC_LOG_ERROR(
"server.loading",
"DataDir option can't be changed at worldserver.conf reload, using current value ({}).",
m_dataPath);
1435 bool enableIndoor =
sConfigMgr->GetBoolDefault(
"vmap.enableIndoorCheck",
true);
1436 bool enableLOS =
sConfigMgr->GetBoolDefault(
"vmap.enableLOS",
true);
1437 bool enableHeight =
sConfigMgr->GetBoolDefault(
"vmap.enableHeight",
true);
1440 TC_LOG_ERROR(
"server.loading",
"VMap height checking disabled! Creatures movements and other various things WILL be broken! Expect no support.");
1444 TC_LOG_INFO(
"server.loading",
"VMap support included. LineOfSight: {}, getHeight: {}, indoorCheck: {}", enableLOS, enableHeight, enableIndoor);
1601 sLog->SetRealmId(realmId);
1637 TC_LOG_FATAL(
"server.loading",
"Unable to load critical files - server shutting down !!!");
1649 TC_LOG_INFO(
"server.loading",
"Loading Trinity strings...");
1660 LoginDatabase.PExecute(
"UPDATE realmlist SET icon = {}, timezone = {} WHERE id = '{}'", server_type, realm_zone,
realm.
Id.
Realm);
1663 TC_LOG_INFO(
"server.loading",
"Initialize data stores...");
1673 std::vector<uint32> mapIds;
1676 mapIds.push_back(mapId);
1683 TC_LOG_INFO(
"server.loading",
"Initializing PlayerDump tables...");
1689 TC_LOG_INFO(
"server.loading",
"Loading SpellInfo store...");
1692 TC_LOG_INFO(
"server.loading",
"Loading SpellInfo corrections...");
1695 TC_LOG_INFO(
"server.loading",
"Loading SkillLineAbilityMultiMap Data...");
1698 TC_LOG_INFO(
"server.loading",
"Loading SpellInfo custom attributes...");
1699 sSpellMgr->LoadSpellInfoCustomAttributes();
1701 TC_LOG_INFO(
"server.loading",
"Loading SpellInfo diminishing infos...");
1704 TC_LOG_INFO(
"server.loading",
"Loading SpellInfo immunity infos...");
1707 TC_LOG_INFO(
"server.loading",
"Loading Player Totem models...");
1710 TC_LOG_INFO(
"server.loading",
"Loading GameObject models...");
1713 TC_LOG_INFO(
"server.loading",
"Loading Script Names...");
1716 TC_LOG_INFO(
"server.loading",
"Loading Instance Template...");
1720 TC_LOG_INFO(
"server.loading",
"Loading instances...");
1724 TC_LOG_INFO(
"server.loading",
"Loading character cache store...");
1727 TC_LOG_INFO(
"server.loading",
"Loading Broadcast texts...");
1731 TC_LOG_INFO(
"server.loading",
"Loading Localization strings...");
1749 TC_LOG_INFO(
"server.loading",
"Loading Account Roles and Permissions...");
1752 TC_LOG_INFO(
"server.loading",
"Loading Page Texts...");
1755 TC_LOG_INFO(
"server.loading",
"Loading Game Object Templates...");
1758 TC_LOG_INFO(
"server.loading",
"Loading Game Object template addons...");
1761 TC_LOG_INFO(
"server.loading",
"Loading Transport templates...");
1764 TC_LOG_INFO(
"server.loading",
"Loading Transport animations and rotations...");
1767 TC_LOG_INFO(
"server.loading",
"Loading Spell Rank Data...");
1770 TC_LOG_INFO(
"server.loading",
"Loading Spell Required Data...");
1773 TC_LOG_INFO(
"server.loading",
"Loading Spell Group types...");
1776 TC_LOG_INFO(
"server.loading",
"Loading Spell Learn Skills...");
1779 TC_LOG_INFO(
"server.loading",
"Loading SpellInfo SpellSpecific and AuraState...");
1780 sSpellMgr->LoadSpellInfoSpellSpecificAndAuraState();
1782 TC_LOG_INFO(
"server.loading",
"Loading Spell Learn Spells...");
1785 TC_LOG_INFO(
"server.loading",
"Loading Spell Proc conditions and data...");
1788 TC_LOG_INFO(
"server.loading",
"Loading Spell Bonus Data...");
1791 TC_LOG_INFO(
"server.loading",
"Loading Aggro Spells Definitions...");
1794 TC_LOG_INFO(
"server.loading",
"Loading Spell Group Stack Rules...");
1797 TC_LOG_INFO(
"server.loading",
"Loading NPC Texts...");
1800 TC_LOG_INFO(
"server.loading",
"Loading Enchant Spells Proc datas...");
1803 TC_LOG_INFO(
"server.loading",
"Loading Item Random Enchantments Table...");
1806 TC_LOG_INFO(
"server.loading",
"Loading Disables");
1809 TC_LOG_INFO(
"server.loading",
"Loading Items...");
1812 TC_LOG_INFO(
"server.loading",
"Loading Item set names...");
1815 TC_LOG_INFO(
"server.loading",
"Loading Creature Model Based Info Data...");
1818 TC_LOG_INFO(
"server.loading",
"Loading Creature templates...");
1821 TC_LOG_INFO(
"server.loading",
"Loading Equipment templates...");
1824 TC_LOG_INFO(
"server.loading",
"Loading Creature template addons...");
1827 TC_LOG_INFO(
"server.loading",
"Loading Reputation Reward Rates...");
1830 TC_LOG_INFO(
"server.loading",
"Loading Creature Reputation OnKill Data...");
1833 TC_LOG_INFO(
"server.loading",
"Loading Reputation Spillover Data...");
1834 sObjectMgr->LoadReputationSpilloverTemplate();
1836 TC_LOG_INFO(
"server.loading",
"Loading Points Of Interest Data...");
1839 TC_LOG_INFO(
"server.loading",
"Loading Creature Base Stats...");
1842 TC_LOG_INFO(
"server.loading",
"Loading Spawn Group Templates...");
1845 TC_LOG_INFO(
"server.loading",
"Loading Creature Data...");
1848 TC_LOG_INFO(
"server.loading",
"Loading Temporary Summon Data...");
1851 TC_LOG_INFO(
"server.loading",
"Loading pet levelup spells...");
1854 TC_LOG_INFO(
"server.loading",
"Loading pet default spells additional to levelup spells...");
1857 TC_LOG_INFO(
"server.loading",
"Loading Creature Addon Data...");
1860 TC_LOG_INFO(
"server.loading",
"Loading Creature Movement Overrides...");
1863 TC_LOG_INFO(
"server.loading",
"Loading Gameobject Data...");
1866 TC_LOG_INFO(
"server.loading",
"Loading Spawn Group Data...");
1869 TC_LOG_INFO(
"server.loading",
"Loading instance spawn groups...");
1872 TC_LOG_INFO(
"server.loading",
"Loading GameObject Addon Data...");
1875 TC_LOG_INFO(
"server.loading",
"Loading GameObject faction and flags overrides...");
1878 TC_LOG_INFO(
"server.loading",
"Loading GameObject Quest Items...");
1881 TC_LOG_INFO(
"server.loading",
"Loading Creature Quest Items...");
1884 TC_LOG_INFO(
"server.loading",
"Loading Creature Linked Respawn...");
1887 TC_LOG_INFO(
"server.loading",
"Loading Weather Data...");
1890 TC_LOG_INFO(
"server.loading",
"Loading Quests...");
1893 TC_LOG_INFO(
"server.loading",
"Checking Quest Disables");
1896 TC_LOG_INFO(
"server.loading",
"Loading Quest POI");
1899 TC_LOG_INFO(
"server.loading",
"Loading Quests Starters and Enders...");
1902 TC_LOG_INFO(
"server.loading",
"Loading Quests Greetings...");
1905 TC_LOG_INFO(
"server.loading",
"Loading Objects Pooling Data...");
1907 TC_LOG_INFO(
"server.loading",
"Loading Quest Pooling Data...");
1910 TC_LOG_INFO(
"server.loading",
"Loading Game Event Data...");
1914 TC_LOG_INFO(
"server.loading",
"Loading UNIT_NPC_FLAG_SPELLCLICK Data...");
1917 TC_LOG_INFO(
"server.loading",
"Loading Vehicle Templates...");
1920 TC_LOG_INFO(
"server.loading",
"Loading Vehicle Template Accessories...");
1921 sObjectMgr->LoadVehicleTemplateAccessories();
1923 TC_LOG_INFO(
"server.loading",
"Loading Vehicle Accessories...");
1926 TC_LOG_INFO(
"server.loading",
"Loading Vehicle Seat Addon Data...");
1929 TC_LOG_INFO(
"server.loading",
"Loading SpellArea Data...");
1932 TC_LOG_INFO(
"server.loading",
"Loading Area Trigger Teleports definitions...");
1935 TC_LOG_INFO(
"server.loading",
"Loading Access Requirements...");
1938 TC_LOG_INFO(
"server.loading",
"Loading Quest Area Triggers...");
1941 TC_LOG_INFO(
"server.loading",
"Loading Tavern Area Triggers...");
1944 TC_LOG_INFO(
"server.loading",
"Loading AreaTrigger script names...");
1947 TC_LOG_INFO(
"server.loading",
"Loading LFG entrance positions...");
1950 TC_LOG_INFO(
"server.loading",
"Loading Dungeon boss data...");
1953 TC_LOG_INFO(
"server.loading",
"Loading LFG rewards...");
1956 TC_LOG_INFO(
"server.loading",
"Loading Graveyard-zone links...");
1959 TC_LOG_INFO(
"server.loading",
"Loading spell pet auras...");
1962 TC_LOG_INFO(
"server.loading",
"Loading Spell target coordinates...");
1965 TC_LOG_INFO(
"server.loading",
"Loading enchant custom attributes...");
1968 TC_LOG_INFO(
"server.loading",
"Loading linked spells...");
1971 TC_LOG_INFO(
"server.loading",
"Loading Player Create Data...");
1974 TC_LOG_INFO(
"server.loading",
"Loading Exploration BaseXP Data...");
1977 TC_LOG_INFO(
"server.loading",
"Loading Pet Name Parts...");
1982 TC_LOG_INFO(
"server.loading",
"Loading the max pet number...");
1985 TC_LOG_INFO(
"server.loading",
"Loading pet level stats...");
1988 TC_LOG_INFO(
"server.loading",
"Loading Player level dependent mail rewards...");
1994 TC_LOG_INFO(
"server.loading",
"Loading Skill Discovery Table...");
1997 TC_LOG_INFO(
"server.loading",
"Loading Skill Extra Item Table...");
2000 TC_LOG_INFO(
"server.loading",
"Loading Skill Perfection Data Table...");
2003 TC_LOG_INFO(
"server.loading",
"Loading Skill Fishing base level requirements...");
2006 TC_LOG_INFO(
"server.loading",
"Loading Achievements...");
2008 TC_LOG_INFO(
"server.loading",
"Loading Achievement Criteria Lists...");
2010 TC_LOG_INFO(
"server.loading",
"Loading Achievement Criteria Data...");
2012 TC_LOG_INFO(
"server.loading",
"Loading Achievement Rewards...");
2014 TC_LOG_INFO(
"server.loading",
"Loading Achievement Reward Locales...");
2016 TC_LOG_INFO(
"server.loading",
"Loading Completed Achievements...");
2020 TC_LOG_INFO(
"server.loading",
"Loading Item Auctions...");
2023 TC_LOG_INFO(
"server.loading",
"Loading Auctions...");
2026 TC_LOG_INFO(
"server.loading",
"Loading Guilds...");
2029 TC_LOG_INFO(
"server.loading",
"Loading ArenaTeams...");
2032 TC_LOG_INFO(
"server.loading",
"Loading Groups...");
2035 TC_LOG_INFO(
"server.loading",
"Loading ReservedNames...");
2038 TC_LOG_INFO(
"server.loading",
"Loading GameObjects for quests...");
2041 TC_LOG_INFO(
"server.loading",
"Loading BattleMasters...");
2044 TC_LOG_INFO(
"server.loading",
"Loading GameTeleports...");
2047 TC_LOG_INFO(
"server.loading",
"Loading Trainers...");
2050 TC_LOG_INFO(
"server.loading",
"Loading Creature default trainers...");
2053 TC_LOG_INFO(
"server.loading",
"Loading Gossip menu...");
2056 TC_LOG_INFO(
"server.loading",
"Loading Gossip menu options...");
2059 TC_LOG_INFO(
"server.loading",
"Loading Vendors...");
2062 TC_LOG_INFO(
"server.loading",
"Loading Waypoints...");
2065 TC_LOG_INFO(
"server.loading",
"Loading Creature Formations...");
2068 TC_LOG_INFO(
"server.loading",
"Loading World States...");
2071 TC_LOG_INFO(
"server.loading",
"Loading Conditions...");
2074 TC_LOG_INFO(
"server.loading",
"Loading faction change achievement pairs...");
2077 TC_LOG_INFO(
"server.loading",
"Loading faction change spell pairs...");
2080 TC_LOG_INFO(
"server.loading",
"Loading faction change quest pairs...");
2083 TC_LOG_INFO(
"server.loading",
"Loading faction change item pairs...");
2086 TC_LOG_INFO(
"server.loading",
"Loading faction change reputation pairs...");
2089 TC_LOG_INFO(
"server.loading",
"Loading faction change title pairs...");
2092 TC_LOG_INFO(
"server.loading",
"Loading GM tickets...");
2095 TC_LOG_INFO(
"server.loading",
"Loading GM surveys...");
2098 TC_LOG_INFO(
"server.loading",
"Loading client addons...");
2102 TC_LOG_INFO(
"server.loading",
"Returning old mails...");
2105 TC_LOG_INFO(
"server.loading",
"Loading Autobroadcasts...");
2112 TC_LOG_INFO(
"server.loading",
"Loading spell script names...");
2115 TC_LOG_INFO(
"server.loading",
"Loading Creature Texts...");
2118 TC_LOG_INFO(
"server.loading",
"Loading Creature Text Locales...");
2121 TC_LOG_INFO(
"server.loading",
"Initializing Scripts...");
2125 TC_LOG_INFO(
"server.loading",
"Validating spell scripts...");
2128 TC_LOG_INFO(
"server.loading",
"Loading SmartAI scripts...");
2131 TC_LOG_INFO(
"server.loading",
"Loading Calendar data...");
2134 TC_LOG_INFO(
"server.loading",
"Loading Petitions...");
2137 TC_LOG_INFO(
"server.loading",
"Loading Signatures...");
2140 TC_LOG_INFO(
"server.loading",
"Loading Item loot...");
2143 TC_LOG_INFO(
"server.loading",
"Initialize query data...");
2146 TC_LOG_INFO(
"server.loading",
"Initialize commands...");
2150 TC_LOG_INFO(
"server.loading",
"Initialize game time and timers");
2153 LoginDatabase.PExecute(
"INSERT INTO uptime (realmid, starttime, uptime, revision) VALUES({}, {}, 0, '{}')",
2184 localtime_r(&gameTime, &localTm);
2192 TC_LOG_INFO(
"server.loading",
"Starting Map System");
2195 TC_LOG_INFO(
"server.loading",
"Starting Game Event system...");
2202 TC_LOG_INFO(
"server.loading",
"Initialize AuctionHouseBot...");
2205 TC_LOG_INFO(
"server.loading",
"Initializing chat channels...");
2208 TC_LOG_INFO(
"server.loading",
"Initializing Opcodes...");
2211 TC_LOG_INFO(
"server.loading",
"Starting Arena Season...");
2217 TC_LOG_INFO(
"server.loading",
"Starting Battleground System");
2222 TC_LOG_INFO(
"server.loading",
"Starting Outdoor PvP System");
2226 TC_LOG_INFO(
"server.loading",
"Starting Battlefield System");
2229 TC_LOG_INFO(
"server.loading",
"Loading Transports...");
2233 TC_LOG_INFO(
"server.loading",
"Loading Warden Checks...");
2236 TC_LOG_INFO(
"server.loading",
"Loading Warden Action Overrides...");
2239 TC_LOG_INFO(
"server.loading",
"Deleting expired bans...");
2240 LoginDatabase.Execute(
"DELETE FROM ip_banned WHERE unbandate <= UNIX_TIMESTAMP() AND unbandate<>bandate");
2242 TC_LOG_INFO(
"server.loading",
"Initializing quest reset times...");
2246 TC_LOG_INFO(
"server.loading",
"Calculate random battleground reset time...");
2249 TC_LOG_INFO(
"server.loading",
"Calculate deletion of old calendar events time...");
2252 TC_LOG_INFO(
"server.loading",
"Calculate guild limitation(s) reset time...");
2262 TC_LOG_INFO(
"server.loading",
"Pre-loading base map data for map {}", map->GetId());
2263 map->LoadAllCells();
2270 TC_LOG_INFO(
"server.worldserver",
"World initialized in {} minutes {} seconds", (startupDuration / 60000), ((startupDuration % 60000) / 1000));
2272 TC_METRIC_EVENT(
"events",
"World initialized",
"World initialized in " + std::to_string(startupDuration / 60000) +
" minutes " + std::to_string((startupDuration % 60000) / 1000) +
" seconds");
2287 std::string availableLocalsStr;
2292 if (race->
Name[i][0] !=
'\0')
2300 availableLocalsStr +=
" ";
2306 TC_LOG_ERROR(
"server.loading",
"Unable to determine your DBC Locale! (corrupt DBC?)");
2310 if (default_locale != m_lang_confid && m_lang_confid <
TOTAL_LOCALES &&
2313 default_locale = m_lang_confid;
2335 TC_LOG_INFO(
"server.loading",
">> Loaded 0 autobroadcasts definitions. DB table `autobroadcast` is empty for this realm!");
2343 Field* fields = result->Fetch();
2350 }
while (result->NextRow());
2587 TC_LOG_DEBUG(
"sql.driver",
"Ping MySQL to keep connection alive");
2639 SessionMap::const_iterator itr;
2643 itr->second->GetPlayer() &&
2644 itr->second->GetPlayer()->IsInWorld() &&
2645 itr->second != self &&
2646 (team == 0 || itr->second->GetPlayer()->GetTeam() == team))
2648 itr->second->SendPacket(packet);
2669 if (!team || player->
GetTeam() == team)
2692 vsnprintf(str, 2048, text, ap);
2701 char*
lineFromMessage(
char*& pos) {
char* start = strtok(pos,
"\n"); pos =
nullptr;
return start; }
2709 data_list.push_back(data);
2722 va_start(ap, string_id);
2728 if (!itr->second || !itr->second->GetPlayer() || !itr->second->GetPlayer()->IsInWorld())
2731 wt_do(itr->second->GetPlayer());
2741 va_start(ap, string_id);
2769 char* buf = strdup(text);
2788 itr->second->KickPlayer(
"World::KickAll");
2796 if (itr->second->GetSecurity() < sec)
2797 itr->second->KickPlayer(
"World::KickAllLess");
2804 return BanAccount(mode, nameOrIP, duration_secs, reason, author);
2853 if (!resultAccounts)
2865 Field* fieldsAccount = resultAccounts->Fetch();
2873 trans->Append(stmt);
2880 trans->Append(stmt);
2884 if (std::string(sess->GetPlayerName()) != author)
2885 sess->KickPlayer(
"World::BanAccount Banning account");
2886 }
while (resultAccounts->NextRow());
2946 trans->Append(stmt);
2953 trans->Append(stmt);
3058 if (!reason.empty())
3059 str +=
" - " + reason;
3125 [[maybe_unused]]
uint32 currentSessionId = itr->first;
3128 if (!pSession->
Update(diff, updater))
3144 void* callbackArg =
nullptr;
3148 TC_LOG_INFO(
"misc",
"CLI command under processing...");
3172 weight += it->second;
3173 selectionWeights[it->first] = it->second;
3181 for (AutobroadcastsWeightMap::const_iterator it = selectionWeights.begin(); it != selectionWeights.end(); ++it)
3183 weight += it->second;
3184 if (selectedWeight < weight)
3198 else if (abcenter == 1)
3202 sWorld->SendGlobalMessage(&data);
3204 else if (abcenter == 2)
3210 sWorld->SendGlobalMessage(&data);
3225 if (resultCharCount)
3227 Field* fields = resultCharCount->Fetch();
3229 uint8 charCount =
uint8(fields[1].GetUInt64());
3237 trans->Append(stmt);
3262 if (
Player* player = itr->second->GetPlayer())
3263 player->ResetDailyQuestStatus();
3276 TC_LOG_INFO(
"misc",
"Daily quests for all characters have been reset.");
3283 int wday = time.tm_wday;
3287 t += (
DAY * (target - wday));
3298 if (
Player* player = itr->second->GetPlayer())
3299 player->ResetWeeklyQuestStatus();
3312 TC_LOG_INFO(
"misc",
"Weekly quests for all characters have been reset.");
3319 if (time.tm_mday == 1)
3324 return mktime(&time);
3334 if (
Player* player = itr->second->GetPlayer())
3335 player->ResetMonthlyQuestStatus();
3348 TC_LOG_INFO(
"misc",
"Monthly quests for all characters have been reset.");
3371 localtime_r(&curTime, &localTm);
3377 time_t nextDayResetTime = mktime(&localTm);
3380 if (curTime >= nextDayResetTime)
3381 nextDayResetTime +=
DAY;
3398 if (currentDeletionTime < now)
3403 if (!currentDeletionTime)
3416 localtime_r(&curTime, &localTm);
3422 time_t nextDayResetTime = mktime(&localTm);
3425 if (curTime >= nextDayResetTime)
3426 nextDayResetTime +=
DAY;
3437 TC_LOG_INFO(
"misc",
"Seasonal quests reset for all characters.");
3445 if (itr->second->GetPlayer())
3446 itr->second->GetPlayer()->ResetSeasonalQuestStatus(event_id, eventStartTime);
3451 TC_LOG_INFO(
"misc",
"Random BG status reset for all characters.");
3457 if (itr->second->GetPlayer())
3458 itr->second->GetPlayer()->SetRandomWinner(
false);
3466 TC_LOG_INFO(
"misc",
"Calendar deletion of old events.");
3493 Field* fields = result->Fetch();
3506 SessionMap::const_iterator itr;
3508 if (itr->second && itr->second->GetPlayer() && itr->second->GetPlayer()->IsInWorld())
3510 itr->second->GetPlayer()->UpdateAreaDependentAuras(itr->second->GetPlayer()->GetAreaId());
3511 itr->second->GetPlayer()->UpdateZoneDependentAuras(itr->second->GetPlayer()->GetZoneId());
3523 TC_LOG_INFO(
"server.loading",
">> Loaded 0 world states. DB table `worldstates` is empty!");
3532 Field* fields = result->Fetch();
3536 while (result->NextRow());
3555 WorldStatesMap::const_iterator it =
m_worldstates.find(index);
3558 if (it->second == value)
3582 WorldStatesMap::const_iterator it =
m_worldstates.find(index);
3597 session->InvalidateRBACData();
3608 : 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)
static size_t BuildChatPacket(WorldPacket &data, ChatMsg chatType, Language language, ObjectGuid senderGUID, ObjectGuid receiverGUID, std::string_view message, uint8 chatTag, std::string const &senderName="", std::string const &receiverName="", uint32 achievementId=0, bool gmMessage=false, std::string const &channelName="")
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 &data_list, char *text)
char * lineFromMessage(char *&pos)
WorldWorldTextBuilder(uint32 textId, va_list *args=nullptr)
void operator()(WorldPacketList &data_list, LocaleConstant loc_idx)
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
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_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)