diff options
author | Shauren <shauren.trinity@gmail.com> | 2014-07-19 13:42:43 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2014-07-19 15:26:06 +0200 |
commit | 2452cfb98ecdc18bd64a118410d2a6dc9505f0c4 (patch) | |
tree | 0e39b635b9a8cb6418db21e79e9d9c5eb07fc6a6 | |
parent | 3e56a4b8d7340ff75ecdd596516370076419ce2f (diff) | |
parent | 99dd35da14e7cb0b79f7f70ad393abd6b7a22ea5 (diff) |
Part 2: Merge branch 'master' of https://github.com/TrinityCore/TrinityCore into 4.3.4
-rw-r--r-- | cmake/compiler/msvc/settings.cmake | 4 | ||||
-rw-r--r-- | sql/updates/world/2014_07_19_00_world_creature_misc.sql | 20 | ||||
-rw-r--r-- | sql/updates/world/2014_07_19_00_world_spell_custom_attr.sql | 3 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/PacketLog.cpp | 64 | ||||
-rw-r--r-- | src/server/game/Server/WorldSocket.cpp | 11 | ||||
-rw-r--r-- | src/server/game/Server/WorldSocket.h | 4 | ||||
-rw-r--r-- | src/server/game/Spells/SpellMgr.cpp | 3 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_item.cpp | 9 | ||||
-rw-r--r-- | src/server/worldserver/worldserver.conf.dist | 4 |
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 = "" |