diff options
author | Treeston <treeston.mmoc@gmail.com> | 2019-08-09 12:03:46 +0200 |
---|---|---|
committer | Treeston <treeston.mmoc@gmail.com> | 2019-08-09 12:04:20 +0200 |
commit | 464b0b059b5ccb7db6d2f282937711032005b5c3 (patch) | |
tree | 0eeebafd68c2a17f3084b9f088af9ed695d1f369 | |
parent | 31b4b897e4938b3f04d53c584b02ab4402132864 (diff) |
Core/Channels: Fix a bug that would cause channel settings to disappear in certain settings. Fix a bug that would cause channels to not be saved on .server shutdown without delay. Closes #23699.
-rw-r--r-- | src/server/game/Chat/Channels/ChannelMgr.cpp | 21 | ||||
-rw-r--r-- | src/server/game/Chat/Channels/ChannelMgr.h | 1 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 4 | ||||
-rw-r--r-- | src/server/game/Handlers/ChannelHandler.cpp | 2 | ||||
-rw-r--r-- | src/server/game/World/World.cpp | 9 |
5 files changed, 3 insertions, 34 deletions
diff --git a/src/server/game/Chat/Channels/ChannelMgr.cpp b/src/server/game/Chat/Channels/ChannelMgr.cpp index 63672d048e7..c1043205a3d 100644 --- a/src/server/game/Chat/Channels/ChannelMgr.cpp +++ b/src/server/game/Chat/Channels/ChannelMgr.cpp @@ -89,7 +89,7 @@ ChannelMgr::~ChannelMgr() channel->SetAnnounce(dbAnnounce); channel->SetOwnership(dbOwnership); channel->SetPassword(dbPass); - ASSERT_NOTNULL(forTeam(team))->_customChannels.emplace(channelName, channel); + mgr->_customChannels.emplace(channelName, channel); ++count; } while (result->NextRow()); @@ -249,25 +249,6 @@ Channel* ChannelMgr::GetChannel(uint32 channelId, std::string const& name, Playe return ret; } -void ChannelMgr::LeftChannel(std::string const& name) -{ - std::wstring channelName; - if (!Utf8toWStr(name, channelName)) - return; - - wstrToLower(channelName); - auto itr = _customChannels.find(channelName); - if (itr == _customChannels.end()) - return; - - Channel* channel = itr->second; - if (!channel->GetNumPlayers()) - { - _customChannels.erase(itr); - delete channel; - } -} - void ChannelMgr::LeftChannel(uint32 channelId, AreaTableEntry const* zoneEntry) { ChatChannelsEntry const* channelEntry = sChatChannelsStore.AssertEntry(channelId); diff --git a/src/server/game/Chat/Channels/ChannelMgr.h b/src/server/game/Chat/Channels/ChannelMgr.h index 337069a37a1..8da6699298f 100644 --- a/src/server/game/Chat/Channels/ChannelMgr.h +++ b/src/server/game/Chat/Channels/ChannelMgr.h @@ -47,7 +47,6 @@ class TC_GAME_API ChannelMgr Channel* CreateCustomChannel(std::string const& name); Channel* GetCustomChannel(std::string const& name) const; Channel* GetChannel(uint32 channelId, std::string const& name, Player* player, bool pkt = true, AreaTableEntry const* zoneEntry = nullptr) const; - void LeftChannel(std::string const& name); void LeftChannel(uint32 channelId, AreaTableEntry const* zoneEntry); private: diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 85346522d2d..336d2fa5917 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -5062,12 +5062,8 @@ void Player::CleanupChannels() // delete channel if empty if (ChannelMgr* cMgr = ChannelMgr::forTeam(GetTeam())) - { if (ch->IsConstant()) cMgr->LeftChannel(ch->GetChannelId(), ch->GetZoneEntry()); - else - cMgr->LeftChannel(ch->GetName()); - } } TC_LOG_DEBUG("chat.system", "Player::CleanupChannels: Channels of player '%s' (%s) cleaned up.", GetName().c_str(), GetGUID().ToString().c_str()); } diff --git a/src/server/game/Handlers/ChannelHandler.cpp b/src/server/game/Handlers/ChannelHandler.cpp index 531642d6958..92962280c0f 100644 --- a/src/server/game/Handlers/ChannelHandler.cpp +++ b/src/server/game/Handlers/ChannelHandler.cpp @@ -117,8 +117,6 @@ void WorldSession::HandleLeaveChannel(WorldPacket& recvPacket) if (channelId) cMgr->LeftChannel(channelId, zone); - else - cMgr->LeftChannel(channelName); } } diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 5ef6c149bc9..f4c188434c4 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -2914,14 +2914,9 @@ void World::ShutdownServ(uint32 time, uint32 options, uint8 exitcode, const std: m_ShutdownMask = options; m_ExitCode = exitcode; - ///- If the shutdown time is 0, set m_stopEvent (except if shutdown is 'idle' with remaining sessions) + ///- If the shutdown time is 0, evaluate shutdown on next tick (no message) if (time == 0) - { - if (!(options & SHUTDOWN_MASK_IDLE) || GetActiveAndQueuedSessionCount() == 0) - m_stopEvent = true; // exist code already set - else - m_ShutdownTimer = 1; //So that the session count is re-evaluated at next world tick - } + m_ShutdownTimer = 1; ///- Else set the shutdown timer and warn users else { |