Core/FSB: implement Followship db

This commit is contained in:
luis
2026-06-29 18:53:58 -03:00
parent c794d99e14
commit 4fe26bc564
17 changed files with 238 additions and 42 deletions
+32
View File
@@ -0,0 +1,32 @@
-- Followship Database Base Schema
-- Creates the followship database with standard TrinityCore update tracking tables
-- and the bot_owners table (moved from characters database, renamed from followship_bot_owners)
CREATE TABLE `updates` (
`name` varchar(200) NOT NULL COMMENT 'filename with extension of the update.',
`hash` char(40) DEFAULT '' COMMENT 'sha1 hash of the sql file.',
`state` enum('RELEASED','CUSTOM','MODULE') NOT NULL DEFAULT 'RELEASED' COMMENT 'defines if an update is released or archived.',
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'timestamp when the query was applied.',
`speed` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'time the query takes to apply in ms.',
PRIMARY KEY (`name`) USING BTREE,
UNIQUE KEY `unique_index` (`name`,`hash`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='List of all applied updates in this database.';
CREATE TABLE `updates_include` (
`path` varchar(200) NOT NULL COMMENT 'directory to include. $ means relative to the source directory.',
`state` enum('RELEASED','CUSTOM','MODULE') NOT NULL DEFAULT 'RELEASED' COMMENT 'defines if the directory contains released or archived updates.',
PRIMARY KEY (`path`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='List of directories containing update files.';
INSERT INTO `updates_include` (`path`, `state`) VALUES
('$/sql/updates/followship', 'RELEASED');
CREATE TABLE `bot_owners` (
`bot_id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`bot_guid` BIGINT UNSIGNED NOT NULL,
`bot_entry` INT UNSIGNED NOT NULL,
`player_guid` BIGINT UNSIGNED NOT NULL,
`hire_expiry_time` BIGINT UNSIGNED NOT NULL,
UNIQUE KEY `uq_bot_player` (`bot_guid`, `player_guid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+4
View File
@@ -6,6 +6,8 @@ CREATE DATABASE `auth` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE DATABASE `hotfixes` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE DATABASE `followship` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
GRANT ALL PRIVILEGES ON `world` . * TO 'playerbot'@'localhost' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON `characters` . * TO 'playerbot'@'localhost' WITH GRANT OPTION;
@@ -13,3 +15,5 @@ GRANT ALL PRIVILEGES ON `characters` . * TO 'playerbot'@'localhost' WITH GRANT O
GRANT ALL PRIVILEGES ON `auth` . * TO 'playerbot'@'localhost' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON `hotfixes` . * TO 'playerbot'@'localhost' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON `followship` . * TO 'playerbot'@'localhost' WITH GRANT OPTION;
+6
View File
@@ -16,6 +16,10 @@ REVOKE ALL PRIVILEGES ON `hotfixes` . * FROM 'trinity'@'localhost';
REVOKE GRANT OPTION ON `hotfixes` . * FROM 'trinity'@'localhost';
REVOKE ALL PRIVILEGES ON `followship` . * FROM 'trinity'@'localhost';
REVOKE GRANT OPTION ON `followship` . * FROM 'trinity'@'localhost';
DROP USER 'trinity'@'localhost';
DROP DATABASE IF EXISTS `world`;
@@ -25,3 +29,5 @@ DROP DATABASE IF EXISTS `characters`;
DROP DATABASE IF EXISTS `auth`;
DROP DATABASE IF EXISTS `hotfixes`;
DROP DATABASE IF EXISTS `followship`;
+2
View File
@@ -9,3 +9,5 @@ DROP DATABASE IF EXISTS `characters`;
DROP DATABASE IF EXISTS `auth`;
DROP DATABASE IF EXISTS `hotfixes`;
DROP DATABASE IF EXISTS `followship`;
View File
@@ -19,5 +19,6 @@
DatabaseWorkerPool<WorldDatabaseConnection> WorldDatabase;
DatabaseWorkerPool<CharacterDatabaseConnection> CharacterDatabase;
DatabaseWorkerPool<FollowshipDatabaseConnection> FollowshipDatabase;
DatabaseWorkerPool<LoginDatabaseConnection> LoginDatabase;
DatabaseWorkerPool<HotfixDatabaseConnection> HotfixDatabase;
@@ -23,6 +23,7 @@
#include "Implementation/LoginDatabase.h"
#include "Implementation/CharacterDatabase.h"
#include "Implementation/FollowshipDatabase.h"
#include "Implementation/WorldDatabase.h"
#include "Implementation/HotfixDatabase.h"
@@ -36,6 +37,8 @@
TC_DATABASE_API extern DatabaseWorkerPool<WorldDatabaseConnection> WorldDatabase;
/// Accessor to the character database
TC_DATABASE_API extern DatabaseWorkerPool<CharacterDatabaseConnection> CharacterDatabase;
/// Accessor to the followship database
TC_DATABASE_API extern DatabaseWorkerPool<FollowshipDatabaseConnection> FollowshipDatabase;
/// Accessor to the realm/login database
TC_DATABASE_API extern DatabaseWorkerPool<LoginDatabaseConnection> LoginDatabase;
/// Accessor to the hotfix database
@@ -28,6 +28,7 @@ class ResultSet;
using QueryResult = std::shared_ptr<ResultSet>;
class CharacterDatabaseConnection;
class FollowshipDatabaseConnection;
class HotfixDatabaseConnection;
class LoginDatabaseConnection;
class WorldDatabaseConnection;
@@ -38,6 +39,7 @@ template<typename T>
class PreparedStatement;
using CharacterDatabasePreparedStatement = PreparedStatement<CharacterDatabaseConnection>;
using FollowshipDatabasePreparedStatement = PreparedStatement<FollowshipDatabaseConnection>;
using HotfixDatabasePreparedStatement = PreparedStatement<HotfixDatabaseConnection>;
using LoginDatabasePreparedStatement = PreparedStatement<LoginDatabaseConnection>;
using WorldDatabasePreparedStatement = PreparedStatement<WorldDatabaseConnection>;
@@ -62,6 +64,7 @@ template<typename T>
using SQLTransaction = std::shared_ptr<Transaction<T>>;
using CharacterDatabaseTransaction = SQLTransaction<CharacterDatabaseConnection>;
using FollowshipDatabaseTransaction = SQLTransaction<FollowshipDatabaseConnection>;
using HotfixDatabaseTransaction = SQLTransaction<HotfixDatabaseConnection>;
using LoginDatabaseTransaction = SQLTransaction<LoginDatabaseConnection>;
using WorldDatabaseTransaction = SQLTransaction<WorldDatabaseConnection>;
@@ -72,6 +75,7 @@ template<typename T>
class SQLQueryHolder;
using CharacterDatabaseQueryHolder = SQLQueryHolder<CharacterDatabaseConnection>;
using FollowshipDatabaseQueryHolder = SQLQueryHolder<FollowshipDatabaseConnection>;
using HotfixDatabaseQueryHolder = SQLQueryHolder<HotfixDatabaseConnection>;
using LoginDatabaseQueryHolder = SQLQueryHolder<LoginDatabaseConnection>;
using WorldDatabaseQueryHolder = SQLQueryHolder<WorldDatabaseConnection>;
@@ -184,6 +184,8 @@ DatabaseLoader& DatabaseLoader::AddDatabase<LoginDatabaseConnection>(DatabaseWor
template TC_DATABASE_API
DatabaseLoader& DatabaseLoader::AddDatabase<CharacterDatabaseConnection>(DatabaseWorkerPool<CharacterDatabaseConnection>&, std::string const&);
template TC_DATABASE_API
DatabaseLoader& DatabaseLoader::AddDatabase<FollowshipDatabaseConnection>(DatabaseWorkerPool<FollowshipDatabaseConnection>&, std::string const&);
template TC_DATABASE_API
DatabaseLoader& DatabaseLoader::AddDatabase<WorldDatabaseConnection>(DatabaseWorkerPool<WorldDatabaseConnection>&, std::string const&);
template TC_DATABASE_API
DatabaseLoader& DatabaseLoader::AddDatabase<HotfixDatabaseConnection>(DatabaseWorkerPool<HotfixDatabaseConnection>&, std::string const&);
@@ -46,12 +46,13 @@ public:
{
DATABASE_NONE = 0,
DATABASE_LOGIN = 1,
DATABASE_CHARACTER = 2,
DATABASE_WORLD = 4,
DATABASE_HOTFIX = 8,
DATABASE_LOGIN = 1,
DATABASE_CHARACTER = 2,
DATABASE_WORLD = 4,
DATABASE_HOTFIX = 8,
DATABASE_FOLLOWSHIP = 16,
DATABASE_MASK_ALL = DATABASE_LOGIN | DATABASE_CHARACTER | DATABASE_WORLD | DATABASE_HOTFIX
DATABASE_MASK_ALL = DATABASE_LOGIN | DATABASE_CHARACTER | DATABASE_WORLD | DATABASE_HOTFIX | DATABASE_FOLLOWSHIP
};
private:
@@ -23,6 +23,7 @@
#include "Implementation/LoginDatabase.h"
#include "Implementation/WorldDatabase.h"
#include "Implementation/CharacterDatabase.h"
#include "Implementation/FollowshipDatabase.h"
#include "Implementation/HotfixDatabase.h"
#include "Log.h"
#include "MySQLPreparedStatement.h"
@@ -619,4 +620,5 @@ void DatabaseWorkerPool<T>::ExecuteOrAppend(SQLTransaction<T>& trans, PreparedSt
template class TC_DATABASE_API DatabaseWorkerPool<LoginDatabaseConnection>;
template class TC_DATABASE_API DatabaseWorkerPool<WorldDatabaseConnection>;
template class TC_DATABASE_API DatabaseWorkerPool<CharacterDatabaseConnection>;
template class TC_DATABASE_API DatabaseWorkerPool<FollowshipDatabaseConnection>;
template class TC_DATABASE_API DatabaseWorkerPool<HotfixDatabaseConnection>;
@@ -0,0 +1,49 @@
/*
* This file is part of the Stefal WoW Project.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*/
#include "FollowshipDatabase.h"
#include "MySQLPreparedStatement.h"
void FollowshipDatabaseConnection::DoPrepareStatements()
{
if (!m_reconnecting)
m_stmts.resize(MAX_FOLLOWSHIPDATABASE_STATEMENTS);
PrepareStatement(FSB_SEL_BOT_OWNERS_ALL,
"SELECT bot_id, bot_guid, bot_entry, player_guid, hire_expiry_time FROM bot_owners", CONNECTION_SYNCH);
PrepareStatement(FSB_SEL_BOT_OWNERS_BY_PLAYER,
"SELECT bot_id, bot_guid, bot_entry, hire_expiry_time FROM bot_owners WHERE player_guid = ?", CONNECTION_SYNCH);
PrepareStatement(FSB_SEL_BOT_OWNER_ID,
"SELECT bot_id FROM bot_owners WHERE bot_guid = ? AND player_guid = ?", CONNECTION_SYNCH);
PrepareStatement(FSB_INS_BOT_OWNER,
"INSERT INTO bot_owners (bot_guid, bot_entry, player_guid, hire_expiry_time) VALUES (?, ?, ?, ?)", CONNECTION_ASYNC);
PrepareStatement(FSB_DEL_BOT_OWNER_BY_GUID,
"DELETE FROM bot_owners WHERE bot_guid = ?", CONNECTION_ASYNC);
PrepareStatement(FSB_DEL_BOT_OWNER_BY_ENTRY_PLAYER,
"DELETE FROM bot_owners WHERE bot_entry = ? AND player_guid = ?", CONNECTION_ASYNC);
}
FollowshipDatabaseConnection::FollowshipDatabaseConnection(MySQLConnectionInfo& connInfo, ConnectionFlags connectionFlags)
: MySQLConnection(connInfo, connectionFlags)
{
}
FollowshipDatabaseConnection::~FollowshipDatabaseConnection()
{
}
@@ -0,0 +1,48 @@
/*
* This file is part of the Stefal WoW Project.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*/
#ifndef _FOLLOWSHIPDATABASE_H
#define _FOLLOWSHIPDATABASE_H
#include "MySQLConnection.h"
enum FollowshipDatabaseStatements : uint32
{
/* Naming standard for defines:
{DB}_{SEL/INS/UPD/DEL/REP}_{Summary of data changed}
*/
FSB_SEL_BOT_OWNERS_ALL,
FSB_SEL_BOT_OWNERS_BY_PLAYER,
FSB_SEL_BOT_OWNER_ID,
FSB_INS_BOT_OWNER,
FSB_DEL_BOT_OWNER_BY_GUID,
FSB_DEL_BOT_OWNER_BY_ENTRY_PLAYER,
MAX_FOLLOWSHIPDATABASE_STATEMENTS
};
class TC_DATABASE_API FollowshipDatabaseConnection : public MySQLConnection
{
public:
typedef FollowshipDatabaseStatements Statements;
FollowshipDatabaseConnection(MySQLConnectionInfo& connInfo, ConnectionFlags connectionFlags);
~FollowshipDatabaseConnection();
//- Loads database type specific prepared statements
void DoPrepareStatements() override;
};
#endif
+27
View File
@@ -150,6 +150,32 @@ bool DBUpdater<CharacterDatabaseConnection>::IsEnabled(uint32 const updateMask)
return (updateMask & DatabaseLoader::DATABASE_CHARACTER) ? true : false;
}
// Followship Database
template<>
std::string DBUpdater<FollowshipDatabaseConnection>::GetConfigEntry()
{
return "Updates.Followship";
}
template<>
std::string DBUpdater<FollowshipDatabaseConnection>::GetTableName()
{
return "Followship";
}
template<>
std::string DBUpdater<FollowshipDatabaseConnection>::GetBaseFile()
{
return BuiltInConfig::GetSourceDirectory() +
"/sql/base/followship_database.sql";
}
template<>
bool DBUpdater<FollowshipDatabaseConnection>::IsEnabled(uint32 const updateMask)
{
return (updateMask & DatabaseLoader::DATABASE_FOLLOWSHIP) ? true : false;
}
// Hotfix Database
template<>
std::string DBUpdater<HotfixDatabaseConnection>::GetConfigEntry()
@@ -450,4 +476,5 @@ void DBUpdater<T>::ApplyFile(DatabaseWorkerPool<T>& pool, std::string const& hos
template class TC_DATABASE_API DBUpdater<LoginDatabaseConnection>;
template class TC_DATABASE_API DBUpdater<WorldDatabaseConnection>;
template class TC_DATABASE_API DBUpdater<CharacterDatabaseConnection>;
template class TC_DATABASE_API DBUpdater<FollowshipDatabaseConnection>;
template class TC_DATABASE_API DBUpdater<HotfixDatabaseConnection>;
@@ -20,7 +20,7 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "CharacterDatabase.h"
#include "FollowshipDatabase.h"
#include "DatabaseEnv.h"
#include "Log.h"
@@ -30,9 +30,8 @@ namespace FSBUtilsDB
{
bool LoadAllPersistentBotsFromDB(std::vector<PlayerBotData>& outBots)
{
QueryResult result = CharacterDatabase.Query(
"SELECT bot_id, bot_guid, bot_entry, player_guid, hire_expiry_time "
"FROM followship_bot_owners");
FollowshipDatabasePreparedStatement* stmt = FollowshipDatabase.GetPreparedStatement(FSB_SEL_BOT_OWNERS_ALL);
PreparedQueryResult result = FollowshipDatabase.Query(stmt);
if (!result)
return false;
@@ -43,7 +42,7 @@ namespace FSBUtilsDB
PlayerBotData data;
data.botId = fields[0].GetUInt32();
data.spawnId = fields[1].GetUInt64(); // rename!
data.spawnId = fields[1].GetUInt64();
data.entry = fields[2].GetUInt32();
data.owner = fields[3].GetUInt32();
data.hireExpiry = fields[4].GetUInt64();
@@ -59,11 +58,9 @@ namespace FSBUtilsDB
{
outBots.clear();
QueryResult result = CharacterDatabase.PQuery(
"SELECT bot_id, bot_guid, bot_entry, hire_expiry_time "
"FROM followship_bot_owners "
"WHERE player_guid = {}",
playerGuidLow);
FollowshipDatabasePreparedStatement* stmt = FollowshipDatabase.GetPreparedStatement(FSB_SEL_BOT_OWNERS_BY_PLAYER);
stmt->setUInt64(0, playerGuidLow);
PreparedQueryResult result = FollowshipDatabase.Query(stmt);
if (!result)
return true; // no bots is valid
@@ -74,7 +71,7 @@ namespace FSBUtilsDB
PlayerBotData data;
data.botId = fields[0].GetUInt32();
data.spawnId = fields[1].GetUInt64(); // rename!
data.spawnId = fields[1].GetUInt64();
data.entry = fields[2].GetUInt32();
data.hireExpiry = fields[3].GetUInt64();
data.runtimeGuid = ObjectGuid::Empty;
@@ -89,8 +86,8 @@ namespace FSBUtilsDB
{
botOwners.clear();
QueryResult result = CharacterDatabase.Query(
"SELECT bot_guid, player_guid, hire_expiry_time FROM followship_bot_owners");
FollowshipDatabasePreparedStatement* stmt = FollowshipDatabase.GetPreparedStatement(FSB_SEL_BOT_OWNERS_ALL);
PreparedQueryResult result = FollowshipDatabase.Query(stmt);
if (!result)
return true; // no bots is valid
@@ -99,16 +96,17 @@ namespace FSBUtilsDB
{
Field* fields = result->Fetch();
ObjectGuid::LowType spawnId = fields[0].GetUInt64(); // bot_guid
ObjectGuid::LowType ownerGuid = fields[1].GetUInt32(); // player_guid
uint64 hireExpiry = fields[2].GetUInt64();
ObjectGuid::LowType spawnId = fields[1].GetUInt64(); // bot_guid
ObjectGuid::LowType ownerGuid = fields[3].GetUInt32(); // player_guid
uint64 hireExpiry = fields[4].GetUInt64();
// Skip expired bots
if (hireExpiry > 0 && hireExpiry <= static_cast<uint64>(time(nullptr)))
{
// Clean up DB entry
CharacterDatabase.PExecute(
"DELETE FROM followship_bot_owners WHERE bot_guid = {}", spawnId);
FollowshipDatabasePreparedStatement* delStmt = FollowshipDatabase.GetPreparedStatement(FSB_DEL_BOT_OWNER_BY_GUID);
delStmt->setUInt64(0, spawnId);
FollowshipDatabase.Execute(delStmt);
TC_LOG_DEBUG("scripts.fsb.manager",
"FSB: LoadBotOwners from DB Removing expired bot {} (owner {})", spawnId, ownerGuid);
@@ -140,24 +138,23 @@ namespace FSBUtilsDB
uint32 entry = bot->GetEntry();
CharacterDatabase.PExecute(
"INSERT INTO followship_bot_owners (bot_guid, bot_entry, player_guid, hire_expiry_time) "
"VALUES ({}, {}, {}, {})",
spawnId,
entry,
playerGuidLow,
hireExpiry);
FollowshipDatabasePreparedStatement* insStmt = FollowshipDatabase.GetPreparedStatement(FSB_INS_BOT_OWNER);
insStmt->setUInt64(0, spawnId);
insStmt->setUInt32(1, entry);
insStmt->setUInt32(2, playerGuidLow);
insStmt->setUInt64(3, hireExpiry);
FollowshipDatabase.Execute(insStmt);
TC_LOG_DEBUG("scripts.fsb.manager", "FSB: SaveBotToDB Bot: {} was saved to DB for player: {} with expiry time: {}", bot->GetName(), player->GetName(), hireExpiry);
// 2?? Retry select until we get the bot_id
// Retry select until we get the bot_id
uint32 botId = 0;
for (int attempts = 0; attempts < 5; ++attempts)
{
QueryResult result = CharacterDatabase.PQuery(
"SELECT bot_id FROM followship_bot_owners "
"WHERE bot_guid = {} AND player_guid = {}",
spawnId, playerGuidLow);
FollowshipDatabasePreparedStatement* selStmt = FollowshipDatabase.GetPreparedStatement(FSB_SEL_BOT_OWNER_ID);
selStmt->setUInt64(0, spawnId);
selStmt->setUInt32(1, playerGuidLow);
PreparedQueryResult result = FollowshipDatabase.Query(selStmt);
if (result)
{
@@ -192,7 +189,10 @@ namespace FSBUtilsDB
if (!bot_entry || !player_guid)
return false;
CharacterDatabase.PExecute("DELETE FROM followship_bot_owners WHERE bot_entry = {} AND player_guid = {} ", bot_entry, player_guid);
FollowshipDatabasePreparedStatement* stmt = FollowshipDatabase.GetPreparedStatement(FSB_DEL_BOT_OWNER_BY_ENTRY_PLAYER);
stmt->setUInt32(0, bot_entry);
stmt->setUInt32(1, player_guid);
FollowshipDatabase.Execute(stmt);
TC_LOG_DEBUG("scripts.fsb.manager", "FSB: DeleteBotByEntry Deleted Bot with bot_entry: {}", bot_entry);
+5
View File
@@ -331,6 +331,7 @@ int main(int argc, char** argv)
TC_METRIC_VALUE("online_players", sWorld->GetPlayerCount());
TC_METRIC_VALUE("db_queue_login", uint64(LoginDatabase.QueueSize()));
TC_METRIC_VALUE("db_queue_character", uint64(CharacterDatabase.QueueSize()));
TC_METRIC_VALUE("db_queue_followship", uint64(FollowshipDatabase.QueueSize()));
TC_METRIC_VALUE("db_queue_world", uint64(WorldDatabase.QueueSize()));
});
@@ -545,6 +546,7 @@ void WorldUpdateLoop()
LoginDatabase.WarnAboutSyncQueries(true);
CharacterDatabase.WarnAboutSyncQueries(true);
FollowshipDatabase.WarnAboutSyncQueries(true);
WorldDatabase.WarnAboutSyncQueries(true);
HotfixDatabase.WarnAboutSyncQueries(true);
@@ -579,6 +581,7 @@ void WorldUpdateLoop()
LoginDatabase.WarnAboutSyncQueries(false);
CharacterDatabase.WarnAboutSyncQueries(false);
FollowshipDatabase.WarnAboutSyncQueries(false);
WorldDatabase.WarnAboutSyncQueries(false);
HotfixDatabase.WarnAboutSyncQueries(false);
}
@@ -653,6 +656,7 @@ bool StartDB()
loader
.AddDatabase(LoginDatabase, "Login")
.AddDatabase(CharacterDatabase, "Character")
.AddDatabase(FollowshipDatabase, "Followship")
.AddDatabase(WorldDatabase, "World")
.AddDatabase(HotfixDatabase, "Hotfix");
@@ -672,6 +676,7 @@ void StopDB()
{
HotfixDatabase.Close();
WorldDatabase.Close();
FollowshipDatabase.Close();
CharacterDatabase.Close();
LoginDatabase.Close();
+16 -6
View File
@@ -94,6 +94,7 @@ LogsDir = "Logs"
# WorldDatabaseInfo
# CharacterDatabaseInfo
# HotfixDatabaseInfo
# FollowshipDatabaseInfo
# Description: Database connection settings for the world server.
# Example: "hostname;port;username;password;database;ssl"
# ".;some_number;username;password;database" - (Use named pipes on Windows
@@ -105,6 +106,7 @@ LogsDir = "Logs"
# "127.0.0.1;3306;trinity;trinity;world" - (WorldDatabaseInfo)
# "127.0.0.1;3306;trinity;trinity;characters" - (CharacterDatabaseInfo)
# "127.0.0.1;3306;trinity;trinity;hotfixes" - (HotfixDatabaseInfo)
# "127.0.0.1;3306;trinity;trinity;followship" - (FollowshipDatabaseInfo)
#
# Don't change hostname unless you are hosting MySQL on a different machine, if you need help
# with configuration allowing to connect from different machine than the one running server
@@ -118,12 +120,14 @@ LoginDatabaseInfo = "127.0.0.1;3306;root;1234;wc_auth"
WorldDatabaseInfo = "127.0.0.1;3306;root;1234;wc_world"
CharacterDatabaseInfo = "127.0.0.1;3306;root;1234;wc_characters"
HotfixDatabaseInfo = "127.0.0.1;3306;root;1234;wc_hotfixes"
FollowshipDatabaseInfo = "127.0.0.1;3306;root;1234;wc_followship"
#
# LoginDatabase.WorkerThreads
# WorldDatabase.WorkerThreads
# CharacterDatabase.WorkerThreads
# HotfixDatabase.WorkerThreads
# FollowshipDatabase.WorkerThreads
# Description: The amount of worker threads spawned to handle asynchronous (delayed) MySQL
# statements. Each worker thread is mirrored with its own connection to the
# MySQL server and their own thread on the MySQL server.
@@ -131,27 +135,32 @@ HotfixDatabaseInfo = "127.0.0.1;3306;root;1234;wc_hotfixes"
# 1 - (WorldDatabase.WorkerThreads)
# 1 - (CharacterDatabase.WorkerThreads)
# 1 - (HotfixDatabase.WorkerThreads)
# 1 - (FollowshipDatabase.WorkerThreads)
LoginDatabase.WorkerThreads = 4
WorldDatabase.WorkerThreads = 8
CharacterDatabase.WorkerThreads = 12
HotfixDatabase.WorkerThreads = 4
FollowshipDatabase.WorkerThreads = 1
#
# LoginDatabase.SynchThreads
# WorldDatabase.SynchThreads
# CharacterDatabase.SynchThreads
# HotfixDatabase.SynchThreads
# FollowshipDatabase.SynchThreads
# Description: The amount of MySQL connections spawned to handle.
# Default: 1 - (LoginDatabase.SynchThreads)
# 1 - (WorldDatabase.SynchThreads)
# 2 - (CharacterDatabase.SynchThreads)
# 1 - (HotfixDatabase.SynchThreads)
# 1 - (FollowshipDatabase.SynchThreads)
LoginDatabase.SynchThreads = 4
WorldDatabase.SynchThreads = 8
CharacterDatabase.SynchThreads = 12
HotfixDatabase.SynchThreads = 4
FollowshipDatabase.SynchThreads = 1
#
# MaxPingTime
@@ -1461,16 +1470,17 @@ TOTPMasterSecret =
# Description: A mask that describes which databases shall be updated.
#
# Following flags are available
# DATABASE_LOGIN = 1, // Auth database
# DATABASE_CHARACTER = 2, // Character database
# DATABASE_WORLD = 4, // World database
# DATABASE_HOTFIX = 8, // Hotfixes database
# DATABASE_LOGIN = 1, // Auth database
# DATABASE_CHARACTER = 2, // Character database
# DATABASE_WORLD = 4, // World database
# DATABASE_HOTFIX = 8, // Hotfixes database
# DATABASE_FOLLOWSHIP = 16, // Followship database
#
# Default: 15 - (All enabled)
# Default: 31 - (All enabled)
# 4 - (Enable world only)
# 0 - (All Disabled)
Updates.EnableDatabases = 15
Updates.EnableDatabases = 31
#
# Updates.AutoSetup