diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/game/Chat.cpp | 1 | ||||
-rw-r--r-- | src/game/Chat.h | 1 | ||||
-rw-r--r-- | src/game/Language.h | 3 | ||||
-rw-r--r-- | src/game/Level3.cpp | 23 | ||||
-rw-r--r-- | src/game/Opcodes.cpp | 4 | ||||
-rw-r--r-- | src/game/World.cpp | 2 | ||||
-rw-r--r-- | src/game/World.h | 8 | ||||
-rw-r--r-- | src/game/WorldSocket.cpp | 10 |
8 files changed, 50 insertions, 2 deletions
diff --git a/src/game/Chat.cpp b/src/game/Chat.cpp index 83b383fb7b1..390cab6150a 100644 --- a/src/game/Chat.cpp +++ b/src/game/Chat.cpp @@ -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 } }; diff --git a/src/game/Chat.h b/src/game/Chat.h index 5d8dd5e646c..7d799849b8e 100644 --- a/src/game/Chat.h +++ b/src/game/Chat.h @@ -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); diff --git a/src/game/Language.h b/src/game/Language.h index 035fef4cfe3..3ebf52ce5d3 100644 --- a/src/game/Language.h +++ b/src/game/Language.h @@ -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 diff --git a/src/game/Level3.cpp b/src/game/Level3.cpp index 46e5c880b16..bd2fadcb0ee 100644 --- a/src/game/Level3.cpp +++ b/src/game/Level3.cpp @@ -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) { diff --git a/src/game/Opcodes.cpp b/src/game/Opcodes.cpp index bba5c81ae9e..638d54236d1 100644 --- a/src/game/Opcodes.cpp +++ b/src/game/Opcodes.cpp @@ -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 }, diff --git a/src/game/World.cpp b/src/game/World.cpp index bbfa47edd6c..947500c09dc 100644 --- a/src/game/World.cpp +++ b/src/game/World.cpp @@ -120,6 +120,8 @@ World::World() m_updateTimeSum = 0; m_updateTimeCount = 0; + + m_isClosed = false; } /// World destructor diff --git a/src/game/World.h b/src/game/World.h index de5934ec40e..7e9af69a7da 100644 --- a/src/game/World.h +++ b/src/game/World.h @@ -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]; diff --git a/src/game/WorldSocket.cpp b/src/game/WorldSocket.cpp index 0f975cf776f..dd2d2d93f1f 100644 --- a/src/game/WorldSocket.cpp +++ b/src/game/WorldSocket.cpp @@ -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; |