From 440fff54b8c1dbd6ad2ebe64a5b869b31eb76f22 Mon Sep 17 00:00:00 2001 From: DDuarte Date: Mon, 28 Jul 2014 13:26:03 +0100 Subject: Core/Startup: Change an error about "broken zone-data" on guild loading to debug This "error" happens when player is on zone 0 or transport. --- src/server/game/Guilds/Guild.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/server/game') diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp index 57e9a84d611..bace2ec1360 100644 --- a/src/server/game/Guilds/Guild.cpp +++ b/src/server/game/Guilds/Guild.cpp @@ -677,9 +677,10 @@ bool Guild::Member::LoadFromDB(Field* fields) if (!m_zoneId) { - TC_LOG_ERROR("guild", "Player (GUID: %u) has broken zone-data", GUID_LOPART(m_guid)); + TC_LOG_DEBUG("guild", "Player (GUID: %u) has broken zone-data", GUID_LOPART(m_guid)); m_zoneId = Player::GetZoneIdFromDB(m_guid); } + ResetFlags(); return true; } -- cgit v1.2.3 From 7a888d03bdf7781d283b5f063b9f29fba62e7bd1 Mon Sep 17 00:00:00 2001 From: Shauren Date: Mon, 28 Jul 2014 16:37:42 +0200 Subject: Core/Network: Fixed packets being properly received only by the first player when broadcasted to everyone Closes #12675 --- src/server/game/Server/WorldSocket.cpp | 2 +- src/server/game/Server/WorldSocket.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'src/server/game') diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp index ea0bfc234bf..99c2d27ed03 100644 --- a/src/server/game/Server/WorldSocket.cpp +++ b/src/server/game/Server/WorldSocket.cpp @@ -153,7 +153,7 @@ void WorldSocket::AsyncWrite(WorldPacket& packet) bool needsWriteStart = _writeQueue.empty(); _authCrypt.EncryptSend(header.header, header.getHeaderLength()); - _writeQueue.emplace(header, std::move(packet)); + _writeQueue.emplace(header, packet); if (needsWriteStart) AsyncWrite(_writeQueue.front()); diff --git a/src/server/game/Server/WorldSocket.h b/src/server/game/Server/WorldSocket.h index 1fa08c2b5f1..7275da5ff29 100644 --- a/src/server/game/Server/WorldSocket.h +++ b/src/server/game/Server/WorldSocket.h @@ -58,7 +58,7 @@ struct WorldPacketBuffer typedef boost::asio::const_buffer const* const_iterator; - WorldPacketBuffer(ServerPktHeader header, WorldPacket&& packet) : _header(header), _packet(std::move(packet)) + WorldPacketBuffer(ServerPktHeader header, WorldPacket const& packet) : _header(header), _packet(packet) { _buffers[0] = boost::asio::const_buffer(_header.header, _header.getHeaderLength()); if (!_packet.empty()) -- cgit v1.2.3 From 86f3ee99493613700cfa166361336821eaf79793 Mon Sep 17 00:00:00 2001 From: Shauren Date: Mon, 28 Jul 2014 23:32:53 +0200 Subject: Core/Instances: Explicitly unload InstanceSaveMgr before MapManager, fixes invalid memory access at shutdown Closes #12635 --- src/server/game/Groups/Group.cpp | 2 -- src/server/game/Instances/InstanceSaveMgr.cpp | 6 ++++-- src/server/game/Instances/InstanceSaveMgr.h | 2 ++ src/server/worldserver/Main.cpp | 4 +++- 4 files changed, 9 insertions(+), 5 deletions(-) (limited to 'src/server/game') diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp index 2e7633091f3..8068e82f676 100644 --- a/src/server/game/Groups/Group.cpp +++ b/src/server/game/Groups/Group.cpp @@ -80,8 +80,6 @@ Group::~Group() delete(r); } - // it is undefined whether objectmgr (which stores the groups) or instancesavemgr - // will be unloaded first so we must be prepared for both cases // this may unload some instance saves for (uint8 i = 0; i < MAX_DIFFICULTY; ++i) for (BoundInstancesMap::iterator itr2 = m_boundInstances[i].begin(); itr2 != m_boundInstances[i].end(); ++itr2) diff --git a/src/server/game/Instances/InstanceSaveMgr.cpp b/src/server/game/Instances/InstanceSaveMgr.cpp index c46d9002604..370d02631ba 100644 --- a/src/server/game/Instances/InstanceSaveMgr.cpp +++ b/src/server/game/Instances/InstanceSaveMgr.cpp @@ -39,8 +39,10 @@ uint16 InstanceSaveManager::ResetTimeDelay[] = {3600, 900, 300, 60}; InstanceSaveManager::~InstanceSaveManager() { - // it is undefined whether this or objectmgr will be unloaded first - // so we must be prepared for both cases +} + +void InstanceSaveManager::Unload() +{ lock_instLists = true; for (InstanceSaveHashMap::iterator itr = m_instanceSaveById.begin(); itr != m_instanceSaveById.end(); ++itr) { diff --git a/src/server/game/Instances/InstanceSaveMgr.h b/src/server/game/Instances/InstanceSaveMgr.h index 0a2af4b73ee..1bab66be1b8 100644 --- a/src/server/game/Instances/InstanceSaveMgr.h +++ b/src/server/game/Instances/InstanceSaveMgr.h @@ -164,6 +164,8 @@ class InstanceSaveManager return &instance; } + void Unload(); + /* resetTime is a global propery of each (raid/heroic) map all instances of that map reset at the same time */ struct InstResetEvent diff --git a/src/server/worldserver/Main.cpp b/src/server/worldserver/Main.cpp index 206103608a4..02e6268cd26 100644 --- a/src/server/worldserver/Main.cpp +++ b/src/server/worldserver/Main.cpp @@ -37,6 +37,7 @@ #include "RealmList.h" #include "World.h" #include "MapManager.h" +#include "InstanceSaveMgr.h" #include "ObjectAccessor.h" #include "ScriptMgr.h" #include "OutdoorPvP/OutdoorPvPMgr.h" @@ -251,6 +252,7 @@ extern int main(int argc, char** argv) // unload battleground templates before different singletons destroyed sBattlegroundMgr->DeleteAllBattlegrounds(); + sInstanceSaveMgr->Unload(); sMapMgr->UnloadAll(); // unload all grids (including locked in memory) sObjectAccessor->UnloadAll(); // unload 'i_player2corpse' storage and remove from world sScriptMgr->Unload(); @@ -537,7 +539,7 @@ variables_map GetConsoleArguments(int argc, char** argv, std::string& configFile { // Silences warning about configService not be used if the OS is not Windows (void)configService; - + options_description all("Allowed options"); all.add_options() ("help,h", "print usage message") -- cgit v1.2.3