aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/authserver/Server/AuthSession.cpp16
-rw-r--r--src/server/authserver/Server/AuthSession.h1
-rw-r--r--src/server/game/Server/WorldSocket.cpp24
-rw-r--r--src/server/game/Server/WorldSocket.h4
-rw-r--r--src/server/game/Spells/Spell.cpp9
-rw-r--r--src/server/game/Warden/WardenWin.cpp2
-rw-r--r--src/server/shared/Utilities/Util.cpp8
-rw-r--r--src/server/shared/Utilities/Util.h25
-rw-r--r--src/tools/mmaps_generator/CMakeLists.txt1
-rw-r--r--src/tools/mmaps_generator/MapBuilder.cpp19
-rw-r--r--src/tools/mmaps_generator/MapBuilder.h2
11 files changed, 67 insertions, 44 deletions
diff --git a/src/server/authserver/Server/AuthSession.cpp b/src/server/authserver/Server/AuthSession.cpp
index bcc32887616..7d2948470f7 100644
--- a/src/server/authserver/Server/AuthSession.cpp
+++ b/src/server/authserver/Server/AuthSession.cpp
@@ -161,7 +161,7 @@ void AuthSession::AsyncReadHeader()
}
else
{
- _socket.close();
+ CloseSocket();
}
});
}
@@ -176,7 +176,7 @@ void AuthSession::AsyncReadData(bool (AuthSession::*handler)(), size_t dataSize,
{
if (!(*this.*handler)())
{
- _socket.close();
+ CloseSocket();
return;
}
@@ -184,7 +184,7 @@ void AuthSession::AsyncReadData(bool (AuthSession::*handler)(), size_t dataSize,
}
else
{
- _socket.close();
+ CloseSocket();
}
});
}
@@ -195,7 +195,7 @@ void AuthSession::AsyncWrite(std::size_t length)
{
if (error)
{
- _socket.close();
+ CloseSocket();
}
});
}
@@ -889,3 +889,11 @@ void AuthSession::SetVSFields(const std::string& rI)
stmt->setString(2, _login);
LoginDatabase.Execute(stmt);
}
+
+void AuthSession::CloseSocket()
+{
+ boost::system::error_code socketError;
+ _socket.close(socketError);
+ if (socketError)
+ TC_LOG_DEBUG("server.authserver", "Account '%s' errored when closing socket: %i (%s)", _login.c_str(), socketError.value(), socketError.message());
+}
diff --git a/src/server/authserver/Server/AuthSession.h b/src/server/authserver/Server/AuthSession.h
index 4ae33f44cb3..6dc9c404857 100644
--- a/src/server/authserver/Server/AuthSession.h
+++ b/src/server/authserver/Server/AuthSession.h
@@ -58,6 +58,7 @@ private:
void AsyncReadData(bool (AuthSession::*handler)(), size_t dataSize, size_t bufferOffset);
void AsyncWrite(size_t length);
+ void CloseSocket();
void SetVSFields(const std::string& rI);
diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp
index 9790eae69ec..fa83db6b185 100644
--- a/src/server/game/Server/WorldSocket.cpp
+++ b/src/server/game/Server/WorldSocket.cpp
@@ -32,7 +32,7 @@ using boost::asio::ip::tcp;
using boost::asio::streambuf;
WorldSocket::WorldSocket(tcp::socket&& socket)
- : _socket(std::move(socket)), _authSeed(static_cast<uint32>(rand32())), _OverSpeedPings(0), _worldSession(nullptr)
+ : _socket(std::move(socket)), _authSeed(rand32()), _OverSpeedPings(0), _worldSession(nullptr)
{
}
@@ -83,8 +83,7 @@ void WorldSocket::AsyncReadHeader()
else
{
// _socket.is_open() till returns true even after calling close()
- boost::system::error_code socketError;
- _socket.close(socketError);
+ CloseSocket();
}
});
}
@@ -190,8 +189,7 @@ void WorldSocket::AsyncReadData(size_t dataSize)
else
{
// _socket.is_open() till returns true even after calling close()
- boost::system::error_code socketError;
- _socket.close(socketError);
+ CloseSocket();
}
});
}
@@ -245,7 +243,7 @@ void WorldSocket::AsyncWrite(std::vector<uint8> const& data)
AsyncWrite(_writeQueue.front());
}
else
- _socket.close();
+ CloseSocket();
});
}
@@ -554,7 +552,7 @@ void WorldSocket::HandlePing(WorldPacket& recvPacket)
TC_LOG_ERROR("network", "WorldSocket::HandlePing: %s kicked for over-speed pings (address: %s)",
_worldSession->GetPlayerInfo().c_str(), GetRemoteIpAddress().c_str());
- _socket.close();
+ CloseSocket();
return;
}
}
@@ -573,7 +571,7 @@ void WorldSocket::HandlePing(WorldPacket& recvPacket)
TC_LOG_ERROR("network", "WorldSocket::HandlePing: peer sent CMSG_PING, but is not authenticated or got recently kicked, address = %s",
GetRemoteIpAddress().c_str());
- _socket.close();
+ CloseSocket();
return;
}
@@ -581,3 +579,13 @@ void WorldSocket::HandlePing(WorldPacket& recvPacket)
packet << ping;
return AsyncWrite(packet);
}
+
+void WorldSocket::CloseSocket()
+{
+ boost::system::error_code socketError;
+ _socket.close(socketError);
+ if (socketError)
+ TC_LOG_DEBUG("network", "WorldSocket::CloseSocket: Player '%s' (%s) errored when closing socket: %i (%s)",
+ _worldSession ? _worldSession->GetPlayerInfo().c_str() : "unknown", GetRemoteIpAddress().c_str(),
+ socketError.value(), socketError.message());
+}
diff --git a/src/server/game/Server/WorldSocket.h b/src/server/game/Server/WorldSocket.h
index c0986f88779..085ee98b00d 100644
--- a/src/server/game/Server/WorldSocket.h
+++ b/src/server/game/Server/WorldSocket.h
@@ -55,8 +55,8 @@ public:
std::string GetRemoteIpAddress() const { return _socket.remote_endpoint().address().to_string(); };
uint16 GetRemotePort() const { return _socket.remote_endpoint().port(); }
- void CloseSocket() { _socket.close(); };
- bool IsOpen() { return _socket.is_open(); };
+ void CloseSocket();
+ bool IsOpen() const { return _socket.is_open(); }
void AsyncWrite(WorldPacket const& packet);
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index 411f3c7343e..bf518859b49 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -4858,8 +4858,15 @@ SpellCastResult Spell::CheckCast(bool strict)
return SPELL_FAILED_NOT_INFRONT;
if (m_caster->GetEntry() != WORLD_TRIGGER) // Ignore LOS for gameobjects casts (wrongly cast by a trigger)
- if (!(m_spellInfo->AttributesEx2 & SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS) && !DisableMgr::IsDisabledFor(DISABLE_TYPE_SPELL, m_spellInfo->Id, NULL, SPELL_DISABLE_LOS) && !m_caster->IsWithinLOSInMap(target))
+ {
+ WorldObject* losTarget = m_caster;
+ if (IsTriggered() && m_triggeredByAuraSpell)
+ if (DynamicObject* dynObj = m_caster->GetDynObject(m_triggeredByAuraSpell->Id))
+ losTarget = dynObj;
+
+ if (!(m_spellInfo->AttributesEx2 & SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS) && !DisableMgr::IsDisabledFor(DISABLE_TYPE_SPELL, m_spellInfo->Id, NULL, SPELL_DISABLE_LOS) && !target->IsWithinLOSInMap(losTarget))
return SPELL_FAILED_LINE_OF_SIGHT;
+ }
}
}
diff --git a/src/server/game/Warden/WardenWin.cpp b/src/server/game/Warden/WardenWin.cpp
index 9de4ff0958e..1a6127daa89 100644
--- a/src/server/game/Warden/WardenWin.cpp
+++ b/src/server/game/Warden/WardenWin.cpp
@@ -281,7 +281,7 @@ void WardenWin::RequestData()
}
case MODULE_CHECK:
{
- uint32 seed = static_cast<uint32>(rand32());
+ uint32 seed = rand32();
buff << uint32(seed);
HmacSha1 hmac(4, (uint8*)&seed);
hmac.UpdateData(wd->Str);
diff --git a/src/server/shared/Utilities/Util.cpp b/src/server/shared/Utilities/Util.cpp
index 446ee889c90..a5279eae03f 100644
--- a/src/server/shared/Utilities/Util.cpp
+++ b/src/server/shared/Utilities/Util.cpp
@@ -63,17 +63,17 @@ float frand(float min, float max)
return float(GetRng()->Random() * (max - min) + min);
}
-int32 rand32()
+uint32 rand32()
{
- return int32(GetRng()->BRandom());
+ return GetRng()->BRandom();
}
-double rand_norm(void)
+double rand_norm()
{
return GetRng()->Random();
}
-double rand_chance(void)
+double rand_chance()
{
return GetRng()->Random() * 100.0;
}
diff --git a/src/server/shared/Utilities/Util.h b/src/server/shared/Utilities/Util.h
index 2a776715521..c8883773eed 100644
--- a/src/server/shared/Utilities/Util.h
+++ b/src/server/shared/Utilities/Util.h
@@ -76,30 +76,23 @@ std::string secsToTimeString(uint64 timeInSecs, bool shortText = false, bool hou
uint32 TimeStringToSecs(const std::string& timestring);
std::string TimeToTimestampStr(time_t t);
-/* Return a random number in the range min..max; (max-min) must be smaller than 32768. */
+/* Return a random number in the range min..max. */
int32 irand(int32 min, int32 max);
-/* Return a random number in the range min..max (inclusive). For reliable results, the difference
-* between max and min should be less than RAND32_MAX. */
+/* Return a random number in the range min..max (inclusive). */
uint32 urand(uint32 min, uint32 max);
-/* Return a random number in the range 0 .. RAND32_MAX. */
-int32 rand32();
+/* Return a random number in the range 0 .. UINT32_MAX. */
+uint32 rand32();
/* Return a random number in the range min..max */
float frand(float min, float max);
-/* Return a random double from 0.0 to 1.0 (exclusive). Floats support only 7 valid decimal digits.
- * A double supports up to 15 valid decimal digits and is used internally (RAND32_MAX has 10 digits).
- * With an FPU, there is usually no difference in performance between float and double.
-*/
-double rand_norm(void);
-
-/* Return a random double from 0.0 to 99.9999999999999. Floats support only 7 valid decimal digits.
- * A double supports up to 15 valid decimal digits and is used internally (RAND32_MAX has 10 digits).
- * With an FPU, there is usually no difference in performance between float and double.
-*/
-double rand_chance(void);
+/* Return a random double from 0.0 to 1.0 (exclusive). */
+double rand_norm();
+
+/* Return a random double from 0.0 to 100.0 (exclusive). */
+double rand_chance();
/* Return true if a random roll fits in the specified chance (range 0-100). */
inline bool roll_chance_f(float chance)
diff --git a/src/tools/mmaps_generator/CMakeLists.txt b/src/tools/mmaps_generator/CMakeLists.txt
index a2b729ca998..8661c035c8e 100644
--- a/src/tools/mmaps_generator/CMakeLists.txt
+++ b/src/tools/mmaps_generator/CMakeLists.txt
@@ -48,6 +48,7 @@ target_link_libraries(mmaps_generator
Detour
${BZIP2_LIBRARIES}
${ZLIB_LIBRARIES}
+ ${CMAKE_THREAD_LIBS_INIT}
${Boost_LIBRARIES}
)
diff --git a/src/tools/mmaps_generator/MapBuilder.cpp b/src/tools/mmaps_generator/MapBuilder.cpp
index 01a342249fd..94b5f3607cf 100644
--- a/src/tools/mmaps_generator/MapBuilder.cpp
+++ b/src/tools/mmaps_generator/MapBuilder.cpp
@@ -171,20 +171,25 @@ namespace MMAP
{
while (1)
{
- uint32 mapId;
+ uint32* mapId = nullptr;
_queue.WaitAndPop(mapId);
if (_cancelationToken)
return;
- buildMap(mapId);
+ if (!mapId) // shouldn't happen?
+ continue;
+
+ buildMap(*mapId);
+
+ delete mapId;
}
}
void MapBuilder::buildAllMaps(int threads)
{
- for (size_t i = 0; i < threads; ++i)
+ for (int i = 0; i < threads; ++i)
{
_workerThreads.push_back(std::thread(&MapBuilder::WorkerThread, this));
}
@@ -196,13 +201,13 @@ namespace MMAP
for (TileList::iterator it = m_tiles.begin(); it != m_tiles.end(); ++it)
{
- uint32 mapID = it->m_mapId;
- if (!shouldSkipMap(mapID))
+ uint32 mapId = it->m_mapId;
+ if (!shouldSkipMap(mapId))
{
if (threads > 0)
- _queue.Push(mapID);
+ _queue.Push(new uint32(mapId));
else
- buildMap(mapID);
+ buildMap(mapId);
}
}
diff --git a/src/tools/mmaps_generator/MapBuilder.h b/src/tools/mmaps_generator/MapBuilder.h
index 1d688ccfa77..c2168d048b4 100644
--- a/src/tools/mmaps_generator/MapBuilder.h
+++ b/src/tools/mmaps_generator/MapBuilder.h
@@ -143,7 +143,7 @@ namespace MMAP
rcContext* m_rcContext;
std::vector<std::thread> _workerThreads;
- ProducerConsumerQueue<uint32> _queue;
+ ProducerConsumerQueue<uint32*> _queue;
std::atomic<bool> _cancelationToken;
};
}