aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2014-07-19 13:42:43 +0200
committerShauren <shauren.trinity@gmail.com>2014-07-19 15:26:06 +0200
commit2452cfb98ecdc18bd64a118410d2a6dc9505f0c4 (patch)
tree0e39b635b9a8cb6418db21e79e9d9c5eb07fc6a6
parent3e56a4b8d7340ff75ecdd596516370076419ce2f (diff)
parent99dd35da14e7cb0b79f7f70ad393abd6b7a22ea5 (diff)
Part 2: Merge branch 'master' of https://github.com/TrinityCore/TrinityCore into 4.3.4
-rw-r--r--cmake/compiler/msvc/settings.cmake4
-rw-r--r--sql/updates/world/2014_07_19_00_world_creature_misc.sql20
-rw-r--r--sql/updates/world/2014_07_19_00_world_spell_custom_attr.sql3
-rw-r--r--src/server/game/Server/Protocol/PacketLog.cpp64
-rw-r--r--src/server/game/Server/WorldSocket.cpp11
-rw-r--r--src/server/game/Server/WorldSocket.h4
-rw-r--r--src/server/game/Spells/SpellMgr.cpp3
-rw-r--r--src/server/scripts/Spells/spell_item.cpp9
-rw-r--r--src/server/worldserver/worldserver.conf.dist4
9 files changed, 103 insertions, 19 deletions
diff --git a/cmake/compiler/msvc/settings.cmake b/cmake/compiler/msvc/settings.cmake
index 700ab234d37..b68a0de1ace 100644
--- a/cmake/compiler/msvc/settings.cmake
+++ b/cmake/compiler/msvc/settings.cmake
@@ -49,8 +49,8 @@ add_definitions(-D_CRT_NONSTDC_NO_WARNINGS)
message(STATUS "MSVC: Disabled POSIX warnings")
if(NOT WITH_WARNINGS)
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4996 /wd4355 /wd4244 /wd4985 /wd4267 /wd4619")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4996 /wd4355 /wd4244 /wd4985 /wd4267 /wd4619 /wd4800")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4996 /wd4355 /wd4244 /wd4985 /wd4267 /wd4619 /wd4512")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4996 /wd4355 /wd4244 /wd4985 /wd4267 /wd4619 /wd4512")
message(STATUS "MSVC: Disabled generic compiletime warnings")
endif()
diff --git a/sql/updates/world/2014_07_19_00_world_creature_misc.sql b/sql/updates/world/2014_07_19_00_world_creature_misc.sql
new file mode 100644
index 00000000000..1f8eba3d33c
--- /dev/null
+++ b/sql/updates/world/2014_07_19_00_world_creature_misc.sql
@@ -0,0 +1,20 @@
+DELETE FROM `creature_addon` WHERE `guid` IN (
+132567,
+132568,
+132566,
+132564,
+132565,
+132553,
+132554,
+132555,
+132556,
+132557,
+132558,
+132559,
+132560,
+132561,
+132562,
+132563);
+DELETE FROM `creature_template_addon` WHERE `entry`=23051;
+INSERT INTO `creature_template_addon` (`entry`, `mount`, `bytes1`, `bytes2`, `auras`) VALUES
+(23051, 0, 0x0, 0x1, '');
diff --git a/sql/updates/world/2014_07_19_00_world_spell_custom_attr.sql b/sql/updates/world/2014_07_19_00_world_spell_custom_attr.sql
new file mode 100644
index 00000000000..fee4f9cc077
--- /dev/null
+++ b/sql/updates/world/2014_07_19_00_world_spell_custom_attr.sql
@@ -0,0 +1,3 @@
+DELETE FROM `spell_custom_attr` WHERE `entry`=49882;
+INSERT INTO `spell_custom_attr` (`entry`, `attributes`) VALUES
+(49882, 32768);
diff --git a/src/server/game/Server/Protocol/PacketLog.cpp b/src/server/game/Server/Protocol/PacketLog.cpp
index ed5a3b52871..6ef33133615 100644
--- a/src/server/game/Server/Protocol/PacketLog.cpp
+++ b/src/server/game/Server/Protocol/PacketLog.cpp
@@ -17,9 +17,36 @@
#include "PacketLog.h"
#include "Config.h"
-#include "ByteBuffer.h"
#include "WorldPacket.h"
+#pragma pack(push, 1)
+
+// Packet logging structures in PKT 3.1 format
+struct LogHeader
+{
+ char Signature[3];
+ uint16 FormatVersion;
+ uint8 SnifferId;
+ uint32 Build;
+ char Locale[4];
+ uint8 SessionKey[40];
+ uint32 SniffStartUnixtime;
+ uint32 SniffStartTicks;
+ uint32 OptionalDataSize;
+};
+
+struct PacketHeader
+{
+ char Direction[4];
+ uint32 ConnectionId;
+ uint32 ArrivalTicks;
+ uint32 OptionalDataSize;
+ uint32 Length;
+ uint32 Opcode;
+};
+
+#pragma pack(pop)
+
PacketLog::PacketLog() : _file(NULL)
{
Initialize();
@@ -38,25 +65,42 @@ void PacketLog::Initialize()
std::string logsDir = sConfigMgr->GetStringDefault("LogsDir", "");
if (!logsDir.empty())
- if ((logsDir.at(logsDir.length()-1) != '/') && (logsDir.at(logsDir.length()-1) != '\\'))
+ if ((logsDir.at(logsDir.length() - 1) != '/') && (logsDir.at(logsDir.length() - 1) != '\\'))
logsDir.push_back('/');
std::string logname = sConfigMgr->GetStringDefault("PacketLogFile", "");
if (!logname.empty())
+ {
_file = fopen((logsDir + logname).c_str(), "wb");
+
+ LogHeader header;
+ header.Signature[0] = 'P'; header.Signature[1] = 'K'; header.Signature[2] = 'T';
+ header.FormatVersion = 0x0301;
+ header.SnifferId = 'T';
+ header.Build = 12340;
+ header.Locale[0] = 'e'; header.Locale[1] = 'n'; header.Locale[2] = 'U'; header.Locale[3] = 'S';
+ std::memset(header.SessionKey, 0, sizeof(header.SessionKey));
+ header.SniffStartUnixtime = time(NULL);
+ header.SniffStartTicks = getMSTime();
+ header.OptionalDataSize = 0;
+
+ fwrite(&header, sizeof(header), 1, _file);
+ }
}
void PacketLog::LogPacket(WorldPacket const& packet, Direction direction)
{
- ByteBuffer data(4+4+4+1+packet.size());
- data << int32(packet.GetOpcode());
- data << int32(packet.size());
- data << uint32(time(NULL));
- data << uint8(direction);
+ PacketHeader header;
+ *reinterpret_cast<uint32*>(header.Direction) = direction == CLIENT_TO_SERVER ? 0x47534d43 : 0x47534d53;
+ header.ConnectionId = 0;
+ header.ArrivalTicks = getMSTime();
+ header.OptionalDataSize = 0;
+ header.Length = packet.size() + 4;
+ header.Opcode = packet.GetOpcode();
- for (uint32 i = 0; i < packet.size(); i++)
- data << packet[i];
+ fwrite(&header, sizeof(header), 1, _file);
+ if (!packet.empty())
+ fwrite(packet.contents(), 1, packet.size(), _file);
- fwrite(data.contents(), 1, data.size(), _file);
fflush(_file);
}
diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp
index a46c03ac092..db8d4e8a3e8 100644
--- a/src/server/game/Server/WorldSocket.cpp
+++ b/src/server/game/Server/WorldSocket.cpp
@@ -25,6 +25,7 @@
#include "Opcodes.h"
#include "ScriptMgr.h"
#include "SHA1.h"
+#include "PacketLog.h"
#include "BattlenetAccountMgr.h"
using boost::asio::ip::tcp;
@@ -110,6 +111,11 @@ void WorldSocket::AsyncReadData(size_t dataSize)
std::memcpy(packet.contents(), &_readBuffer[sizeof(ClientPktHeader)], header->size);
}
+ if (sPacketLog->CanLogPacket())
+ sPacketLog->LogPacket(packet, CLIENT_TO_SERVER);
+
+ TC_LOG_TRACE("network.opcode", "C->S: %s %s", (_worldSession ? _worldSession->GetPlayerInfo() : GetRemoteIpAddress()).c_str(), GetOpcodeNameForLogging(opcode).c_str());
+
switch (opcode)
{
case CMSG_PING:
@@ -188,6 +194,11 @@ void WorldSocket::AsyncReadData(size_t dataSize)
void WorldSocket::AsyncWrite(WorldPacket const& packet)
{
+ if (sPacketLog->CanLogPacket())
+ sPacketLog->LogPacket(packet, SERVER_TO_CLIENT);
+
+ TC_LOG_TRACE("network.opcode", "S->C: %s %s", (_worldSession ? _worldSession->GetPlayerInfo() : GetRemoteIpAddress()).c_str(), GetOpcodeNameForLogging(packet.GetOpcode()).c_str());
+
ServerPktHeader header(packet.size() + 2, packet.GetOpcode());
_authCrypt.EncryptSend((uint8*)header.header, header.getHeaderLength());
diff --git a/src/server/game/Server/WorldSocket.h b/src/server/game/Server/WorldSocket.h
index fb0522021d9..ce7a3eae48f 100644
--- a/src/server/game/Server/WorldSocket.h
+++ b/src/server/game/Server/WorldSocket.h
@@ -51,8 +51,8 @@ public:
void Start();
- const std::string GetRemoteIpAddress() const { return _socket.remote_endpoint().address().to_string(); };
- unsigned short GetRemotePort() const { return _socket.remote_endpoint().port(); }
+ 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(); };
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp
index fa43176fd0b..0e5264bf56a 100644
--- a/src/server/game/Spells/SpellMgr.cpp
+++ b/src/server/game/Spells/SpellMgr.cpp
@@ -3319,6 +3319,9 @@ void SpellMgr::LoadSpellInfoCorrections()
/// @todo: remove this when basepoints of all Ride Vehicle auras are calculated correctly
spellInfo->Effects[EFFECT_0].BasePoints = 1;
break;
+ case 59630: // Black Magic
+ spellInfo->Attributes |= SPELL_ATTR0_PASSIVE;
+ break;
// ULDUAR SPELLS
//
case 62374: // Pursued (Flame Leviathan)
diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp
index 003aa6b1bc1..c4bd473f1d1 100644
--- a/src/server/scripts/Spells/spell_item.cpp
+++ b/src/server/scripts/Spells/spell_item.cpp
@@ -2133,7 +2133,7 @@ class spell_item_complete_raptor_capture : public SpellScriptLoader
enum ImpaleLeviroth
{
NPC_LEVIROTH = 26452,
- SPELL_LEVIROTH_SELF_IMPALE = 49882,
+ SPELL_LEVIROTH_SELF_IMPALE = 49882
};
class spell_item_impale_leviroth : public SpellScriptLoader
@@ -2152,11 +2152,14 @@ class spell_item_impale_leviroth : public SpellScriptLoader
return true;
}
- void HandleDummy(SpellEffIndex /* effIndex */)
+ void HandleDummy(SpellEffIndex /*effIndex*/)
{
- if (Unit* target = GetHitCreature())
+ if (Creature* target = GetHitCreature())
if (target->GetEntry() == NPC_LEVIROTH && !target->HealthBelowPct(95))
+ {
target->CastSpell(target, SPELL_LEVIROTH_SELF_IMPALE, true);
+ target->ResetPlayerDamageReq();
+ }
}
void Register() override
diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist
index f9c88e0dcef..a048a7d3a80 100644
--- a/src/server/worldserver/worldserver.conf.dist
+++ b/src/server/worldserver/worldserver.conf.dist
@@ -414,8 +414,8 @@ PidFile = ""
#
# PacketLogFile
# Description: Binary packet logging file for the world server.
-# Filename extension must be .bin to be parsable with WowPacketParser.
-# Example: "World.bin" - (Enabled)
+# Filename extension must be .pkt to be parsable with WowPacketParser.
+# Example: "World.pkt" - (Enabled)
# Default: "" - (Disabled)
PacketLogFile = ""