aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Groups/Group.cpp2
-rw-r--r--src/server/game/Guilds/Guild.cpp3
-rw-r--r--src/server/game/Instances/InstanceSaveMgr.cpp6
-rw-r--r--src/server/game/Instances/InstanceSaveMgr.h2
-rw-r--r--src/server/game/Server/WorldSocket.cpp2
-rw-r--r--src/server/game/Server/WorldSocket.h2
-rw-r--r--src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp68
-rw-r--r--src/server/shared/Networking/Socket.h33
-rw-r--r--src/server/worldserver/Main.cpp4
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")