* Implement ".server set closed on/off" command to allow/deny new connections to the world.
--HG-- branch : trunk
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
DELETE FROM trinity_string WHERE entry IN(7523,7524);
|
||||
INSERT INTO trinity_string VALUES
|
||||
(7523,'WORLD: Denying connections.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
||||
(7523,'WORLD: Accepting connections.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
|
||||
|
||||
DELETE FROM command WHERE name IN('server set closed');
|
||||
INSERT INTO command VALUES ('server set closed', 3, 'Syntax: server set closed on/off\r\n\r\nSets whether the world accepts new client connectsions.');
|
||||
@@ -421,6 +421,7 @@ INSERT INTO `command` VALUES
|
||||
('server motd',0,'Syntax: .server motd\r\n\r\nShow server Message of the day.'),
|
||||
('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 closed',3,'Syntax: server set closed on/off\r\n\r\nSets whether the world accepts new client connectsions.'),
|
||||
('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 [#exist_code]\r\n\r\nShut the server down after #delay seconds. Use #exist_code or 0 as program exist code.'),
|
||||
|
||||
@@ -488,6 +488,7 @@ ChatCommand * ChatHandler::getCommandTable()
|
||||
{ "difftime", SEC_CONSOLE, true, &ChatHandler::HandleServerSetDiffTimeCommand, "", NULL },
|
||||
{ "loglevel", SEC_CONSOLE, true, &ChatHandler::HandleServerSetLogLevelCommand, "", NULL },
|
||||
{ "motd", SEC_ADMINISTRATOR, true, &ChatHandler::HandleServerSetMotdCommand, "", NULL },
|
||||
{ "closed", SEC_ADMINISTRATOR, true, &ChatHandler::HandleServerSetClosedCommand, "", NULL },
|
||||
{ NULL, 0, false, NULL, "", NULL }
|
||||
};
|
||||
|
||||
|
||||
@@ -314,6 +314,7 @@ class ChatHandler
|
||||
bool HandleServerSetDiffTimeCommand(const char* args);
|
||||
bool HandleServerShutDownCommand(const char* args);
|
||||
bool HandleServerShutDownCancelCommand(const char* args);
|
||||
bool HandleServerSetClosedCommand(const char* args);
|
||||
|
||||
bool HandleHonorAddCommand(const char* args);
|
||||
bool HandleHonorAddKillCommand(const char* args);
|
||||
|
||||
@@ -843,6 +843,9 @@ enum TrinityStrings
|
||||
LANG_GM_NOTIFY = 6614,
|
||||
LANG_GM_ANNOUNCE_COLOR = 6615,
|
||||
|
||||
LANG_WORLD_CLOSED = 7523,
|
||||
LANG_WORLD_OPENED = 7524,
|
||||
|
||||
// Use for not-in-offcial-sources patches
|
||||
// 10000-10999
|
||||
// opvp hp
|
||||
|
||||
@@ -6821,6 +6821,29 @@ bool ChatHandler::HandleServerSetMotdCommand(const char* args)
|
||||
return true;
|
||||
}
|
||||
|
||||
/// Set whether we accept new clients
|
||||
bool ChatHandler::HandleServerSetClosedCommand(const char* args)
|
||||
{
|
||||
std::string arg = args;
|
||||
|
||||
if(args == "on")
|
||||
{
|
||||
SendSysMessage(LANG_WORLD_CLOSED);
|
||||
sWorld.SetClosed(true);
|
||||
return true;
|
||||
}
|
||||
if(args == "off")
|
||||
{
|
||||
SendSysMessage(LANG_WORLD_OPENED);
|
||||
sWorld.SetClosed(false);
|
||||
return true;
|
||||
}
|
||||
|
||||
SendSysMessage(LANG_USE_BOL);
|
||||
SetSentErrorMessage(true);
|
||||
return false;
|
||||
}
|
||||
|
||||
/// Set/Unset the expansion level for an account
|
||||
bool ChatHandler::HandleAccountSetAddonCommand(const char* args)
|
||||
{
|
||||
|
||||
@@ -547,7 +547,7 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] =
|
||||
/*0x204*/ { "CMSG_DECHARGE", STATUS_NEVER, &WorldSession::Handle_NULL },
|
||||
/*0x205*/ { "CMSG_GMTICKET_CREATE", STATUS_LOGGEDIN, &WorldSession::HandleGMTicketCreateOpcode },
|
||||
/*0x206*/ { "SMSG_GMTICKET_CREATE", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
||||
/*0x207*/ { "CMSG_GMTICKET_UPDATETEXT", STATUS_LOGGEDIN, &WorldSession::HandleGMTicketUpdateOpcode },
|
||||
/*0x207*/ { "CMSG_GMTICKET_UPDATETEXT", STATUS_LOGGEDIN, &WorldSession::HandleGMTicketUpdateOpcode },
|
||||
/*0x208*/ { "SMSG_GMTICKET_UPDATETEXT", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
||||
/*0x209*/ { "SMSG_ACCOUNT_DATA_TIMES", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
||||
/*0x20A*/ { "CMSG_REQUEST_ACCOUNT_DATA", STATUS_LOGGEDIN, &WorldSession::HandleRequestAccountData },
|
||||
@@ -1067,7 +1067,7 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] =
|
||||
/*0x40C*/ { "CMSG_SET_GRANTABLE_LEVELS", STATUS_NEVER, &WorldSession::Handle_NULL },
|
||||
/*0x40D*/ { "CMSG_GRANT_LEVEL", STATUS_NEVER, &WorldSession::Handle_NULL },
|
||||
/*0x40E*/ { "CMSG_REFER_A_FRIEND", STATUS_NEVER, &WorldSession::Handle_NULL },
|
||||
/*0x40F*/ { "CMSG_DECLINE_CHANNEL_INVITE", STATUS_LOGGEDIN, &WorldSession::HandleChannelDeclineInvite },
|
||||
/*0x40F*/ { "CMSG_DECLINE_CHANNEL_INVITE", STATUS_LOGGEDIN, &WorldSession::HandleChannelDeclineInvite },
|
||||
/*0x410*/ { "CMSG_DECLINE_CHANNEL_INVITE", STATUS_NEVER, &WorldSession::Handle_NULL },
|
||||
/*0x411*/ { "CMSG_GROUPACTION_THROTTLED", STATUS_NEVER, &WorldSession::Handle_NULL },
|
||||
/*0x412*/ { "SMSG_OVERRIDE_LIGHT", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
||||
|
||||
@@ -120,6 +120,8 @@ World::World()
|
||||
|
||||
m_updateTimeSum = 0;
|
||||
m_updateTimeCount = 0;
|
||||
|
||||
m_isClosed = false;
|
||||
}
|
||||
|
||||
/// World destructor
|
||||
|
||||
@@ -392,6 +392,12 @@ class World
|
||||
Weather* AddWeather(uint32 zone_id);
|
||||
void RemoveWeather(uint32 zone_id);
|
||||
|
||||
/// Deny clients?
|
||||
bool IsClosed() { return m_isClosed; }
|
||||
|
||||
/// Close world
|
||||
void SetClosed(bool val) { m_isClosed = val; }
|
||||
|
||||
/// Get the active session server limit (or security level limitations)
|
||||
uint32 GetPlayerAmountLimit() const { return m_playerLimit >= 0 ? m_playerLimit : 0; }
|
||||
AccountTypes GetPlayerSecurityLimit() const { return m_playerLimit <= 0 ? AccountTypes(-m_playerLimit) : SEC_PLAYER; }
|
||||
@@ -550,6 +556,8 @@ class World
|
||||
uint32 m_ShutdownTimer;
|
||||
uint32 m_ShutdownMask;
|
||||
|
||||
bool m_isClosed;
|
||||
|
||||
time_t m_startTime;
|
||||
time_t m_gameTime;
|
||||
IntervalTimer m_timers[WUPDATE_COUNT];
|
||||
|
||||
@@ -764,6 +764,16 @@ int WorldSocket::HandleAuthSession (WorldPacket& recvPacket)
|
||||
return -1;
|
||||
}
|
||||
|
||||
if(sWorld.IsClosed())
|
||||
{
|
||||
packet.Initialize(SMSG_AUTH_RESPONSE, 1);
|
||||
packet << uint8(AUTH_REJECT);
|
||||
SendPacket (packet);
|
||||
|
||||
sLog.outError ("WorldSocket::HandleAuthSession: World closed, denying client (%s).", m_Session->GetRemoteAddress());
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Read the content of the packet
|
||||
recvPacket >> BuiltNumberClient; // for now no use
|
||||
recvPacket >> unk2;
|
||||
|
||||
Reference in New Issue
Block a user