diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Groups/Group.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Guilds/Guild.cpp | 3 | ||||
-rw-r--r-- | src/server/game/Instances/InstanceSaveMgr.cpp | 6 | ||||
-rw-r--r-- | src/server/game/Instances/InstanceSaveMgr.h | 2 | ||||
-rw-r--r-- | src/server/game/Server/WorldSocket.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Server/WorldSocket.h | 2 | ||||
-rw-r--r-- | src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp | 68 | ||||
-rw-r--r-- | src/server/shared/Networking/Socket.h | 33 | ||||
-rw-r--r-- | src/server/worldserver/Main.cpp | 4 |
9 files changed, 43 insertions, 79 deletions
diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp index e6f0b0f459a..8f90371c481 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/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp index 9e86039e4af..8cfa6a4e681 100644 --- a/src/server/game/Guilds/Guild.cpp +++ b/src/server/game/Guilds/Guild.cpp @@ -728,9 +728,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; } diff --git a/src/server/game/Instances/InstanceSaveMgr.cpp b/src/server/game/Instances/InstanceSaveMgr.cpp index e37e6847bdd..9f565c8d58d 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 701776bb57d..72d180c2373 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/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp index 46a1bf8f16d..9c46eac6896 100644 --- a/src/server/game/Server/WorldSocket.cpp +++ b/src/server/game/Server/WorldSocket.cpp @@ -191,7 +191,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 4e1cbe743fd..2cf6159cb38 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()) diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp index a8df690f726..ef6d7da5116 100644 --- a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp +++ b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp @@ -38,73 +38,6 @@ EndContentData */ #include "CellImpl.h" /*### -# npc_henry_stern -####*/ - -enum Spells -{ - SPELL_TEACHING_GOLDTHORN_TEA = 13029, - SPELL_TEACHING_MIGHTY_TROLLS_BLOOD_POTION = 13030 -}; - -enum Gossips -{ - GOSSIP_COOKING_SKILL_HIGH = 1444, - GOSSIP_COOKING_SKILL_LOW = 1501, - GOSSIP_ALCHEMY_SKILL_HIGH = 1442, - GOSSIP_ALCHEMY_SKILL_LOW = 1502 -}; - -class npc_henry_stern : public CreatureScript -{ -public: - npc_henry_stern() : CreatureScript("npc_henry_stern") { } - - struct npc_henry_sternAI : public ScriptedAI - { - npc_henry_sternAI(Creature* creature) : ScriptedAI(creature) { } - - void sGossipSelect(Player* player, uint32 /*sender*/, uint32 action) override - { - if (action == 0) - { - if (player->GetBaseSkillValue(SKILL_COOKING) >= 175) - { - player->PrepareGossipMenu(me, GOSSIP_COOKING_SKILL_HIGH); - player->SendPreparedGossip(me); - DoCast(player, SPELL_TEACHING_GOLDTHORN_TEA); - } - else - { - player->PrepareGossipMenu(me, GOSSIP_COOKING_SKILL_LOW); - player->SendPreparedGossip(me); - } - } - - if (action == 1) - { - if (player->GetBaseSkillValue(SKILL_ALCHEMY) >= 180) - { - player->PrepareGossipMenu(me, GOSSIP_ALCHEMY_SKILL_HIGH); - player->SendPreparedGossip(me); - DoCast(player, SPELL_TEACHING_MIGHTY_TROLLS_BLOOD_POTION); - } - else - { - player->PrepareGossipMenu(me, GOSSIP_ALCHEMY_SKILL_LOW); - player->SendPreparedGossip(me); - } - } - } - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return new npc_henry_sternAI(creature); - } -}; - -/*###### ## npc_belnistrasz for Quest 3525 "Extinguishing the Idol" ######*/ @@ -460,7 +393,6 @@ public: void AddSC_razorfen_downs() { - new npc_henry_stern(); new npc_belnistrasz(); new npc_idol_room_spawner(); new npc_tomb_creature(); diff --git a/src/server/shared/Networking/Socket.h b/src/server/shared/Networking/Socket.h index 9c3ec180b0a..38d88e3592c 100644 --- a/src/server/shared/Networking/Socket.h +++ b/src/server/shared/Networking/Socket.h @@ -34,13 +34,40 @@ using boost::asio::ip::tcp; template<class T, class PacketType> class Socket : public std::enable_shared_from_this<T> { + typedef typename std::conditional<std::is_pointer<PacketType>::value, PacketType, PacketType const&>::type WritePacketType; + public: Socket(tcp::socket&& socket, std::size_t headerSize) : _socket(std::move(socket)), _headerSize(headerSize) { } virtual void Start() = 0; - boost::asio::ip::address GetRemoteIpAddress() const { return _socket.remote_endpoint().address(); }; - uint16 GetRemotePort() const { return _socket.remote_endpoint().port(); } + boost::asio::ip::address GetRemoteIpAddress() const + { + boost::system::error_code error; + auto ep = _socket.remote_endpoint(error); + + if (error) + { + TC_LOG_DEBUG("network", "Socket::GetRemoteIpAddress: errored with: %i (%s)", error.value(), error.message().c_str()); + return boost::asio::ip::address(); + } + else + return ep.address(); + } + + uint16 GetRemotePort() const + { + boost::system::error_code error; + auto ep = _socket.remote_endpoint(error); + + if (error) + { + TC_LOG_DEBUG("network", "Socket::GetRemotePort: errored with: %i (%s)", error.value(), error.message().c_str()); + return 0; + } + else + return ep.port(); + } void AsyncReadHeader() { @@ -68,7 +95,7 @@ public: } } - void AsyncWrite(PacketType const& data) + void AsyncWrite(WritePacketType data) { boost::asio::async_write(_socket, boost::asio::buffer(data), std::bind(&Socket<T, PacketType>::WriteHandler, this->shared_from_this(), std::placeholders::_1, std::placeholders::_2)); 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") |