mirror of
https://github.com/mangosfour/server.git
synced 2025-12-14 07:37:01 +00:00
[9924] Implement .server log filter and .server log level comamnds.
* .server log filter comamnd let temporary (until config reload or restart) set log filters state. Or look at filters state. * .server log level renamed from .server set loglevel but now let look at log level also.
This commit is contained in:
parent
ffd2cf874d
commit
b6d7365ac9
12 changed files with 140 additions and 48 deletions
|
|
@ -24,7 +24,7 @@ CREATE TABLE `db_version` (
|
|||
`version` varchar(120) default NULL,
|
||||
`creature_ai_version` varchar(120) default NULL,
|
||||
`cache_id` int(10) default '0',
|
||||
`required_9899_01_mangos_spell_bonus_data` bit(1) default NULL
|
||||
`required_9924_02_mangos_command` bit(1) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes';
|
||||
|
||||
--
|
||||
|
|
@ -754,11 +754,12 @@ INSERT INTO `command` VALUES
|
|||
('server idleshutdown cancel',3,'Syntax: .server idleshutdown cancel\r\n\r\nCancel the restart/shutdown timer if any.'),
|
||||
('server idlerestart',3,'Syntax: .server idlerestart #delay\r\n\r\nRestart the server after #delay seconds if no active connections are present (no players). Use #exist_code or 2 as program exist code.'),
|
||||
('server idlerestart cancel',3,'Syntax: .server idlerestart cancel\r\n\r\nCancel the restart/shutdown timer if any.'),
|
||||
('server log filter',4,'Syntax: .server log filter [($filtername|all) (on|off)]\r\n\r\nShow or set server log filters. If used "all" then all filters will be set to on/off state.'),
|
||||
('server log level',4,'Syntax: .server log level [#level]\r\n\r\nShow or set server log level (0 - errors only, 1 - basic, 2 - detail, 3 - debug).'),
|
||||
('server motd',0,'Syntax: .server motd\r\n\r\nShow server Message of the day.'),
|
||||
('server plimit',3,'Syntax: .server plimit [#num|-1|-2|-3|reset|player|moderator|gamemaster|administrator]\r\n\r\nWithout arg show current player amount and security level limitations for login to server, with arg set player linit ($num > 0) or securiti limitation ($num < 0 or security leme name. With `reset` sets player limit to the one in the config file'),
|
||||
('server restart',3,'Syntax: .server restart #delay\r\n\r\nRestart the server after #delay seconds. Use #exist_code or 2 as program exist code.'),
|
||||
('server restart cancel',3,'Syntax: .server restart cancel\r\n\r\nCancel the restart/shutdown timer if any.'),
|
||||
('server set loglevel',4,'Syntax: .server set loglevel #level\r\n\r\nSet server log level (0 - errors only, 1 - basic, 2 - detail, 3 - debug).'),
|
||||
('server set motd',3,'Syntax: .server set motd $MOTD\r\n\r\nSet server Message of the day.'),
|
||||
('server shutdown',3,'Syntax: .server shutdown #delay [#exit_code]\r\n\r\nShut the server down after #delay seconds. Use #exit_code or 0 as program exit code.'),
|
||||
('server shutdown cancel',3,'Syntax: .server shutdown cancel\r\n\r\nCancel the restart/shutdown timer if any.'),
|
||||
|
|
@ -3635,6 +3636,8 @@ INSERT INTO `mangos_string` VALUES
|
|||
(1024, 'Character \'%s\' (GUID: %u Account %u) can\'t be restored: account character list full!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
||||
(1025, 'Character \'%s\' (GUID: %u Account %u) can\'t be restored: new name already used!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
||||
(1026, 'GUID: %u Name: %s Account: %s (%u) Date: %s',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
||||
(1027, 'Log filters state:',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
||||
(1028, 'All log filters set to: %s',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
||||
(1100,'Account %s (Id: %u) have up to %u expansion allowed now.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
||||
(1101,'Message of the day changed to:\r\n%s',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
||||
(1102,'Message sent to %s: %s',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
||||
|
|
|
|||
6
sql/updates/9924_01_mangos_mangos_string.sql
Normal file
6
sql/updates/9924_01_mangos_mangos_string.sql
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
ALTER TABLE db_version CHANGE COLUMN required_9899_01_mangos_spell_bonus_data required_9924_01_mangos_mangos_string bit;
|
||||
|
||||
DELETE FROM mangos_string WHERE entry IN (1027,1028);
|
||||
INSERT INTO mangos_string VALUES
|
||||
(1027, 'Log filters state:',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
||||
(1028, 'All log filters set to: %s',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
|
||||
6
sql/updates/9924_02_mangos_command.sql
Normal file
6
sql/updates/9924_02_mangos_command.sql
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
ALTER TABLE db_version CHANGE COLUMN required_9924_01_mangos_mangos_string required_9924_02_mangos_command bit;
|
||||
|
||||
DELETE FROM command WHERE name IN('server set loglevel','server log level','server log filter');
|
||||
INSERT INTO command (name, security, help) VALUES
|
||||
('server log filter',4,'Syntax: .server log filter [($filtername|all) (on|off)]\r\n\r\nShow or set server log filters. If used "all" then all filters will be set to on/off state.'),
|
||||
('server log level',4,'Syntax: .server log level [#level]\r\n\r\nShow or set server log level (0 - errors only, 1 - basic, 2 - detail, 3 - debug).');
|
||||
|
|
@ -65,6 +65,8 @@ pkgdata_DATA = \
|
|||
9891_01_mangos_creature_movement.sql \
|
||||
9891_02_mangos_creature_movement_scripts.sql \
|
||||
9899_01_mangos_spell_bonus_data.sql \
|
||||
9924_01_mangos_mangos_string.sql \
|
||||
9924_02_mangos_command.sql \
|
||||
README
|
||||
|
||||
## Additional files to include when running 'make dist'
|
||||
|
|
@ -110,4 +112,6 @@ EXTRA_DIST = \
|
|||
9891_01_mangos_creature_movement.sql \
|
||||
9891_02_mangos_creature_movement_scripts.sql \
|
||||
9899_01_mangos_spell_bonus_data.sql \
|
||||
9924_01_mangos_mangos_string.sql \
|
||||
9924_02_mangos_command.sql \
|
||||
README
|
||||
|
|
|
|||
|
|
@ -549,9 +549,15 @@ ChatCommand * ChatHandler::getCommandTable()
|
|||
{ NULL, 0, false, NULL, "", NULL }
|
||||
};
|
||||
|
||||
static ChatCommand serverLogCommandTable[] =
|
||||
{
|
||||
{ "filter", SEC_CONSOLE, true, &ChatHandler::HandleServerLogFilterCommand, "", NULL },
|
||||
{ "level", SEC_CONSOLE, true, &ChatHandler::HandleServerLogLevelCommand, "", NULL },
|
||||
{ NULL, 0, false, NULL, "", NULL }
|
||||
};
|
||||
|
||||
static ChatCommand serverSetCommandTable[] =
|
||||
{
|
||||
{ "loglevel", SEC_CONSOLE, true, &ChatHandler::HandleServerSetLogLevelCommand, "", NULL },
|
||||
{ "motd", SEC_ADMINISTRATOR, true, &ChatHandler::HandleServerSetMotdCommand, "", NULL },
|
||||
{ NULL, 0, false, NULL, "", NULL }
|
||||
};
|
||||
|
|
@ -563,6 +569,7 @@ ChatCommand * ChatHandler::getCommandTable()
|
|||
{ "idlerestart", SEC_ADMINISTRATOR, true, NULL, "", serverIdleRestartCommandTable },
|
||||
{ "idleshutdown", SEC_ADMINISTRATOR, true, NULL, "", serverShutdownCommandTable },
|
||||
{ "info", SEC_PLAYER, true, &ChatHandler::HandleServerInfoCommand, "", NULL },
|
||||
{ "log", SEC_CONSOLE, true, NULL, "", serverLogCommandTable },
|
||||
{ "motd", SEC_PLAYER, true, &ChatHandler::HandleServerMotdCommand, "", NULL },
|
||||
{ "plimit", SEC_ADMINISTRATOR, true, &ChatHandler::HandleServerPLimitCommand, "", NULL },
|
||||
{ "restart", SEC_ADMINISTRATOR, true, NULL, "", serverRestartCommandTable },
|
||||
|
|
@ -611,29 +618,29 @@ ChatCommand * ChatHandler::getCommandTable()
|
|||
static ChatCommand commandTable[] =
|
||||
{
|
||||
{ "account", SEC_PLAYER, true, NULL, "", accountCommandTable },
|
||||
{ "gm", SEC_MODERATOR, true, NULL, "", gmCommandTable },
|
||||
{ "npc", SEC_MODERATOR, false, NULL, "", npcCommandTable },
|
||||
{ "go", SEC_MODERATOR, false, NULL, "", goCommandTable },
|
||||
{ "learn", SEC_MODERATOR, false, NULL, "", learnCommandTable },
|
||||
{ "modify", SEC_MODERATOR, false, NULL, "", modifyCommandTable },
|
||||
{ "debug", SEC_MODERATOR, true, NULL, "", debugCommandTable },
|
||||
{ "tele", SEC_MODERATOR, true, NULL, "", teleCommandTable },
|
||||
{ "cast", SEC_ADMINISTRATOR, false, NULL, "", castCommandTable },
|
||||
{ "character", SEC_GAMEMASTER, true, NULL, "", characterCommandTable},
|
||||
{ "debug", SEC_MODERATOR, true, NULL, "", debugCommandTable },
|
||||
{ "event", SEC_GAMEMASTER, false, NULL, "", eventCommandTable },
|
||||
{ "gobject", SEC_GAMEMASTER, false, NULL, "", gobjectCommandTable },
|
||||
{ "gm", SEC_MODERATOR, true, NULL, "", gmCommandTable },
|
||||
{ "honor", SEC_GAMEMASTER, false, NULL, "", honorCommandTable },
|
||||
{ "wp", SEC_GAMEMASTER, false, NULL, "", wpCommandTable },
|
||||
{ "titles", SEC_GAMEMASTER, false, NULL, "", titlesCommandTable },
|
||||
{ "quest", SEC_ADMINISTRATOR, false, NULL, "", questCommandTable },
|
||||
{ "reload", SEC_ADMINISTRATOR, true, NULL, "", reloadCommandTable },
|
||||
{ "go", SEC_MODERATOR, false, NULL, "", goCommandTable },
|
||||
{ "gobject", SEC_GAMEMASTER, false, NULL, "", gobjectCommandTable },
|
||||
{ "guild", SEC_ADMINISTRATOR, true, NULL, "", guildCommandTable },
|
||||
{ "instance", SEC_ADMINISTRATOR, true, NULL, "", instanceCommandTable },
|
||||
{ "learn", SEC_MODERATOR, false, NULL, "", learnCommandTable },
|
||||
{ "list", SEC_ADMINISTRATOR, true, NULL, "", listCommandTable },
|
||||
{ "lookup", SEC_ADMINISTRATOR, true, NULL, "", lookupCommandTable },
|
||||
{ "modify", SEC_MODERATOR, false, NULL, "", modifyCommandTable },
|
||||
{ "npc", SEC_MODERATOR, false, NULL, "", npcCommandTable },
|
||||
{ "pdump", SEC_ADMINISTRATOR, true, NULL, "", pdumpCommandTable },
|
||||
{ "guild", SEC_ADMINISTRATOR, true, NULL, "", guildCommandTable },
|
||||
{ "cast", SEC_ADMINISTRATOR, false, NULL, "", castCommandTable },
|
||||
{ "quest", SEC_ADMINISTRATOR, false, NULL, "", questCommandTable },
|
||||
{ "reload", SEC_ADMINISTRATOR, true, NULL, "", reloadCommandTable },
|
||||
{ "reset", SEC_ADMINISTRATOR, true, NULL, "", resetCommandTable },
|
||||
{ "instance", SEC_ADMINISTRATOR, true, NULL, "", instanceCommandTable },
|
||||
{ "server", SEC_ADMINISTRATOR, true, NULL, "", serverCommandTable },
|
||||
{ "tele", SEC_MODERATOR, true, NULL, "", teleCommandTable },
|
||||
{ "titles", SEC_GAMEMASTER, false, NULL, "", titlesCommandTable },
|
||||
{ "wp", SEC_GAMEMASTER, false, NULL, "", wpCommandTable },
|
||||
|
||||
{ "aura", SEC_ADMINISTRATOR, false, &ChatHandler::HandleAuraCommand, "", NULL },
|
||||
{ "unaura", SEC_ADMINISTRATOR, false, &ChatHandler::HandleUnAuraCommand, "", NULL },
|
||||
|
|
|
|||
|
|
@ -425,10 +425,11 @@ class ChatHandler
|
|||
bool HandleServerIdleRestartCommand(const char* args);
|
||||
bool HandleServerIdleShutDownCommand(const char* args);
|
||||
bool HandleServerInfoCommand(const char* args);
|
||||
bool HandleServerLogFilterCommand(const char* args);
|
||||
bool HandleServerLogLevelCommand(const char* args);
|
||||
bool HandleServerMotdCommand(const char* args);
|
||||
bool HandleServerPLimitCommand(const char* args);
|
||||
bool HandleServerRestartCommand(const char* args);
|
||||
bool HandleServerSetLogLevelCommand(const char* args);
|
||||
bool HandleServerSetMotdCommand(const char* args);
|
||||
bool HandleServerShutDownCommand(const char* args);
|
||||
bool HandleServerShutDownCancelCommand(const char* args);
|
||||
|
|
|
|||
|
|
@ -792,7 +792,9 @@ enum MangosStrings
|
|||
LANG_CHARACTER_DELETED_SKIP_FULL = 1024,
|
||||
LANG_CHARACTER_DELETED_SKIP_NAME = 1025,
|
||||
LANG_CHARACTER_DELETED_LIST_LINE_CHAT = 1026,
|
||||
// Room for more level 4 1027-1099 not used
|
||||
LANG_LOG_FILTERS_STATE_HEADER = 1027,
|
||||
LANG_ALL_LOG_FILTERS_SET_TO_S = 1028,
|
||||
// Room for more level 4 1029-1099 not used
|
||||
|
||||
// Level 3 (continue)
|
||||
LANG_ACCOUNT_SETADDON = 1100,
|
||||
|
|
|
|||
|
|
@ -531,17 +531,69 @@ bool ChatHandler::HandleAccountCreateCommand(const char* args)
|
|||
return true;
|
||||
}
|
||||
|
||||
/// Set the level of logging
|
||||
bool ChatHandler::HandleServerSetLogLevelCommand(const char *args)
|
||||
/// Set the filters of logging
|
||||
bool ChatHandler::HandleServerLogFilterCommand(const char* args)
|
||||
{
|
||||
if(!*args)
|
||||
{
|
||||
uint32 logfiler = sLog.getLogFilter();
|
||||
|
||||
SendSysMessage(LANG_LOG_FILTERS_STATE_HEADER);
|
||||
for(int i = 0; i < LOG_FILTER_COUNT; ++i)
|
||||
PSendSysMessage(" %-20s = %s",logFilterData[i].name,(logfiler & (1 << i)) !=0 ? GetMangosString(LANG_ON) : GetMangosString(LANG_OFF));
|
||||
return true;
|
||||
}
|
||||
|
||||
char *filtername = strtok((char*)args, " ");
|
||||
if (!filtername)
|
||||
return false;
|
||||
|
||||
char *NewLevel = strtok((char*)args, " ");
|
||||
if (!NewLevel)
|
||||
char *value_str = strtok(NULL, " ");
|
||||
if (!value_str)
|
||||
return false;
|
||||
|
||||
sLog.SetLogLevel(NewLevel);
|
||||
bool value;
|
||||
if (strncmp(value_str, "on", 3) == 0)
|
||||
value = true;
|
||||
else if (strncmp(value_str, "off", 4) == 0)
|
||||
value = false;
|
||||
else
|
||||
{
|
||||
SendSysMessage(LANG_USE_BOL);
|
||||
SetSentErrorMessage(true);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (strncmp(filtername, "all", 4) == 0)
|
||||
{
|
||||
sLog.SetLogFilter(LogFilters(0xFFFFFFFF),value);
|
||||
PSendSysMessage(LANG_ALL_LOG_FILTERS_SET_TO_S, value ? GetMangosString(LANG_ON) : GetMangosString(LANG_OFF));
|
||||
return true;
|
||||
}
|
||||
|
||||
for(int i = 0; i < LOG_FILTER_COUNT; ++i)
|
||||
{
|
||||
if (!strncmp(filtername,logFilterData[i].name,strlen(filtername)))
|
||||
{
|
||||
sLog.SetLogFilter(LogFilters(1 << i),value);
|
||||
PSendSysMessage(" %-20s = %s",logFilterData[i].name,value ? GetMangosString(LANG_ON) : GetMangosString(LANG_OFF));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/// Set the level of logging
|
||||
bool ChatHandler::HandleServerLogLevelCommand(const char *args)
|
||||
{
|
||||
if(!*args)
|
||||
{
|
||||
PSendSysMessage("Log level: %u");
|
||||
return true;
|
||||
}
|
||||
|
||||
sLog.SetLogLevel((char*)args);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -32,6 +32,20 @@
|
|||
|
||||
INSTANTIATE_SINGLETON_1( Log );
|
||||
|
||||
LogFilterData logFilterData[LOG_FILTER_COUNT] =
|
||||
{
|
||||
{ "transport_moves", "LogFilter_TransportMoves", true },
|
||||
{ "creature_moves", "LogFilter_CreatureMoves", true },
|
||||
{ "visibility_changes", "LogFilter_VisibilityChanges", true },
|
||||
{ "achievement_updates", "LogFilter_AchievementUpdates", true },
|
||||
{ "weather", "LogFilter_Weather", true },
|
||||
{ "player_stats", "LogFilter_PlayerStats", false },
|
||||
{ "sql_text", "LogFilter_SQLText", false },
|
||||
{ "player_moves", "LogFilter_PlayerMoves", false },
|
||||
{ "periodic_effects", "LogFilter_PeriodicAffects", false },
|
||||
{ "ai_and_movegens", "LogFilter_AIAndMovegens", false },
|
||||
};
|
||||
|
||||
enum LogType
|
||||
{
|
||||
LogNormal = 0,
|
||||
|
|
@ -250,26 +264,10 @@ void Log::Initialize()
|
|||
InitColors(sConfig.GetStringDefault("LogColors", ""));
|
||||
|
||||
m_logFilter = 0;
|
||||
|
||||
if (sConfig.GetBoolDefault("LogFilter_TransportMoves", true))
|
||||
m_logFilter |= LOG_FILTER_TRANSPORT_MOVES;
|
||||
if (sConfig.GetBoolDefault("LogFilter_CreatureMoves", true))
|
||||
m_logFilter |= LOG_FILTER_CREATURE_MOVES;
|
||||
if (sConfig.GetBoolDefault("LogFilter_VisibilityChanges", true))
|
||||
m_logFilter |= LOG_FILTER_VISIBILITY_CHANGES;
|
||||
if (sConfig.GetBoolDefault("LogFilter_AchievementUpdates", true))
|
||||
m_logFilter |= LOG_FILTER_ACHIEVEMENT_UPDATES;
|
||||
if (sConfig.GetBoolDefault("LogFilter_Weather", true))
|
||||
m_logFilter |= LOG_FILTER_WEATHER;
|
||||
|
||||
if (sConfig.GetBoolDefault("LogFilter_SQLText", false))
|
||||
m_logFilter |= LOG_FILTER_SQL_TEXT;
|
||||
if (sConfig.GetBoolDefault("LogFilter_PlayerMoves", false))
|
||||
m_logFilter |= LOG_FILTER_PLAYER_MOVES;
|
||||
if (sConfig.GetBoolDefault("LogFilter_PeriodicAffects", false))
|
||||
m_logFilter |= LOG_FILTER_PERIODIC_AFFECTS;
|
||||
if (sConfig.GetBoolDefault("LogFilter_AIAndMovegens", false))
|
||||
m_logFilter |= LOG_FILTER_AI_AND_MOVEGENSS;
|
||||
for(int i = 0; i < LOG_FILTER_COUNT; ++i)
|
||||
if (logFilterData[i].name)
|
||||
if (sConfig.GetBoolDefault(logFilterData[i].configName, logFilterData[i].defaultState))
|
||||
m_logFilter |= (1 << i);
|
||||
|
||||
// Char log settings
|
||||
m_charLog_Dump = sConfig.GetBoolDefault("CharLogDump", false);
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ enum LogLevel
|
|||
LOG_LVL_DEBUG = 3
|
||||
};
|
||||
|
||||
// bitmask
|
||||
// bitmask (not forgot update logFilterData content)
|
||||
enum LogFilters
|
||||
{
|
||||
LOG_FILTER_TRANSPORT_MOVES = 0x0001, // any related to transport moves
|
||||
|
|
@ -48,6 +48,17 @@ enum LogFilters
|
|||
LOG_FILTER_AI_AND_MOVEGENSS = 0x0200, // DoT/HoT apply trace
|
||||
};
|
||||
|
||||
#define LOG_FILTER_COUNT 10
|
||||
|
||||
struct LogFilterData
|
||||
{
|
||||
char const* name;
|
||||
char const* configName;
|
||||
bool defaultState;
|
||||
};
|
||||
|
||||
extern LogFilterData logFilterData[LOG_FILTER_COUNT];
|
||||
|
||||
enum Color
|
||||
{
|
||||
BLACK,
|
||||
|
|
@ -129,6 +140,7 @@ class Log : public MaNGOS::Singleton<Log, MaNGOS::ClassLevelLockable<Log, ACE_Th
|
|||
// any log level
|
||||
void outCharDump( const char * str, uint32 account_id, uint32 guid, const char * name );
|
||||
void outRALog( const char * str, ... ) ATTR_PRINTF(2,3);
|
||||
uint32 GetLogLevel() const { return m_logLevel; }
|
||||
void SetLogLevel(char * Level);
|
||||
void SetLogFileLevel(char * Level);
|
||||
void SetColor(bool stdout_stream, Color color);
|
||||
|
|
@ -137,6 +149,7 @@ class Log : public MaNGOS::Singleton<Log, MaNGOS::ClassLevelLockable<Log, ACE_Th
|
|||
static void outTimestamp(FILE* file);
|
||||
static std::string GetTimestampStr();
|
||||
uint32 getLogFilter() const { return m_logFilter; }
|
||||
void SetLogFilter(LogFilters filter, bool on) { if (on) m_logFilter |= filter; else m_logFilter &= ~filter; }
|
||||
bool HasLogLevelOrHigher(LogLevel loglvl) const { return m_logLevel >= loglvl || (m_logFileLevel >= loglvl && logfile); }
|
||||
bool IsOutCharDump() const { return m_charLog_Dump; }
|
||||
bool IsIncludeTime() const { return m_includeTime; }
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#ifndef __REVISION_NR_H__
|
||||
#define __REVISION_NR_H__
|
||||
#define REVISION_NR "9923"
|
||||
#define REVISION_NR "9924"
|
||||
#endif // __REVISION_NR_H__
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
#ifndef __REVISION_SQL_H__
|
||||
#define __REVISION_SQL_H__
|
||||
#define REVISION_DB_CHARACTERS "required_9849_01_characters_saved_variables"
|
||||
#define REVISION_DB_MANGOS "required_9899_01_mangos_spell_bonus_data"
|
||||
#define REVISION_DB_MANGOS "required_9924_02_mangos_command"
|
||||
#define REVISION_DB_REALMD "required_9748_01_realmd_realmlist"
|
||||
#endif // __REVISION_SQL_H__
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue