diff options
author | MitchesD <majklprofik@seznam.cz> | 2015-06-07 17:08:45 +0200 |
---|---|---|
committer | MitchesD <majklprofik@seznam.cz> | 2015-06-07 17:08:45 +0200 |
commit | e3ed67732ff9e489896ef1d34ea0fd3bb8490b75 (patch) | |
tree | 60fcdaa6f82746c8f91f7b2cde279510067fc3ce | |
parent | 70fe4e57a0b6c97982fbedc521694d5a37fafae5 (diff) |
Core/PacketIO: updated structure of CMSG_RESET_INSTANCES, SMSG_INSTANCE_RESET, SMSG_INSTANCE_RESET_FAILED and SMSG_SPELL_INSTAKILL_LOG
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 15 | ||||
-rw-r--r-- | src/server/game/Handlers/MiscHandler.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Server/Packets/CombatLogPackets.cpp | 9 | ||||
-rw-r--r-- | src/server/game/Server/Packets/CombatLogPackets.h | 12 | ||||
-rw-r--r-- | src/server/game/Server/Packets/InstancePackets.cpp | 16 | ||||
-rw-r--r-- | src/server/game/Server/Packets/InstancePackets.h | 29 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 10 | ||||
-rw-r--r-- | src/server/game/Server/WorldSession.h | 3 | ||||
-rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 12 |
9 files changed, 89 insertions, 19 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 44a6019f542..9487a87d77d 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -20069,9 +20069,9 @@ void Player::ResetInstances(uint8 method, bool isRaid, bool isLegacy) void Player::SendResetInstanceSuccess(uint32 MapId) { - WorldPacket data(SMSG_INSTANCE_RESET, 4); - data << uint32(MapId); - GetSession()->SendPacket(&data); + WorldPackets::Instance::InstanceReset data; + data.MapID = MapId; + GetSession()->SendPacket(data.Write()); } void Player::SendResetInstanceFailed(uint32 reason, uint32 MapId) @@ -20081,10 +20081,11 @@ void Player::SendResetInstanceFailed(uint32 reason, uint32 MapId) // 1: There are players offline in your party. // 2>: There are players in your party attempting to zone into an instance. */ - WorldPacket data(SMSG_INSTANCE_RESET_FAILED, 8); - data << uint32(reason); - data << uint32(MapId); - GetSession()->SendPacket(&data); + + WorldPackets::Instance::InstanceResetFailed data; + data.MapID = MapId; + data.ResetFailedReason = reason; + GetSession()->SendPacket(data.Write()); } /*********************************************************/ diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index c87bff8511e..0aa941de4e2 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -904,7 +904,7 @@ void WorldSession::HandleTimeSyncResponse(WorldPackets::Misc::TimeSyncResponse& _player->m_timeSyncQueue.pop(); } -void WorldSession::HandleResetInstancesOpcode(WorldPacket& /*recvData*/) +void WorldSession::HandleResetInstancesOpcode(WorldPackets::Instance::ResetInstances& /*packet*/) { if (Group* group = _player->GetGroup()) { diff --git a/src/server/game/Server/Packets/CombatLogPackets.cpp b/src/server/game/Server/Packets/CombatLogPackets.cpp index b8d725e66c6..295f27375da 100644 --- a/src/server/game/Server/Packets/CombatLogPackets.cpp +++ b/src/server/game/Server/Packets/CombatLogPackets.cpp @@ -211,3 +211,12 @@ WorldPacket const* WorldPackets::CombatLog::SpellEnergizeLog::Write() return &_worldPacket; } + +WorldPacket const* WorldPackets::CombatLog::SpellInstakillLog::Write() +{ + _worldPacket << Target; + _worldPacket << Caster; + _worldPacket << int32(SpellID); + + return &_worldPacket; +} diff --git a/src/server/game/Server/Packets/CombatLogPackets.h b/src/server/game/Server/Packets/CombatLogPackets.h index a3b8c32b2e5..1962bc2c2fc 100644 --- a/src/server/game/Server/Packets/CombatLogPackets.h +++ b/src/server/game/Server/Packets/CombatLogPackets.h @@ -168,6 +168,18 @@ namespace WorldPackets int32 Amount = 0; Optional<Spells::SpellCastLogData> LogData; /// @todo: find the correct way where to use it, in sniff always false }; + + class SpellInstakillLog final : public ServerPacket + { + public: + SpellInstakillLog() : ServerPacket(SMSG_SPELL_INSTAKILL_LOG, 16 + 16 + 4) { } + + WorldPacket const* Write() override; + + ObjectGuid Target; + ObjectGuid Caster; + int32 SpellID; + }; } } diff --git a/src/server/game/Server/Packets/InstancePackets.cpp b/src/server/game/Server/Packets/InstancePackets.cpp index db5bdcbd9e8..7cf46454533 100644 --- a/src/server/game/Server/Packets/InstancePackets.cpp +++ b/src/server/game/Server/Packets/InstancePackets.cpp @@ -56,3 +56,19 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Instance::InstanceLockInf return data; } + +WorldPacket const* WorldPackets::Instance::InstanceReset::Write() +{ + _worldPacket << uint32(MapID); + + return &_worldPacket; +} + +WorldPacket const* WorldPackets::Instance::InstanceResetFailed::Write() +{ + _worldPacket << uint32(MapID); + _worldPacket.WriteBits(ResetFailedReason, 2); + _worldPacket.FlushBits(); + + return &_worldPacket; +} diff --git a/src/server/game/Server/Packets/InstancePackets.h b/src/server/game/Server/Packets/InstancePackets.h index e38bcb97462..53a757bde32 100644 --- a/src/server/game/Server/Packets/InstancePackets.h +++ b/src/server/game/Server/Packets/InstancePackets.h @@ -68,6 +68,35 @@ namespace WorldPackets std::vector<InstanceLockInfos> LockList; }; + + class ResetInstances final : public ClientPacket + { + public: + ResetInstances(WorldPacket&& packet) : ClientPacket(CMSG_RESET_INSTANCES, std::move(packet)) { } + + void Read() override { } + }; + + class InstanceReset final : public ServerPacket + { + public: + InstanceReset() : ServerPacket(SMSG_INSTANCE_RESET, 4) { } + + WorldPacket const* Write() override; + + uint32 MapID = 0; + }; + + class InstanceResetFailed final : public ServerPacket + { + public: + InstanceResetFailed() : ServerPacket(SMSG_INSTANCE_RESET_FAILED, 4 + 4) { } + + WorldPacket const* Write() override; + + uint32 MapID = 0; + uint8 ResetFailedReason = 0; + }; } } diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 59f4e5a12dc..d341922e4e9 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -692,7 +692,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_REQUEST_VEHICLE_SWITCH_SEAT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Vehicle::RequestVehicleSwitchSeat, &WorldSession::HandleRequestVehicleSwitchSeat); DEFINE_HANDLER(CMSG_REQUEST_WOW_TOKEN_MARKET_PRICE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Token::RequestWowTokenMarketPrice, &WorldSession::HandleRequestWowTokenMarketPrice); DEFINE_HANDLER(CMSG_RESET_CHALLENGE_MODE, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL); - DEFINE_OPCODE_HANDLER_OLD(CMSG_RESET_INSTANCES, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleResetInstancesOpcode ); + DEFINE_HANDLER(CMSG_RESET_INSTANCES, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Instance::ResetInstances, &WorldSession::HandleResetInstancesOpcode); DEFINE_HANDLER(CMSG_RESURRECT_RESPONSE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Misc::ResurrectResponse, &WorldSession::HandleResurrectResponse); DEFINE_HANDLER(CMSG_REVERT_MONUMENT_APPEARANCE, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_RIDE_VEHICLE_INTERACT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Vehicle::RideVehicleInteract, &WorldSession::HandleRideVehicleInteract); @@ -1084,7 +1084,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENCOUNTER_END, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENCOUNTER_START, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENUM_CHARACTERS_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENVIRONMENTAL_DAMAGE_LOG, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENVIRONMENTAL_DAMAGE_LOG, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_EQUIPMENT_SET_ID, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_EXPECTED_SPAM_RECORDS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_EXPLORATION_EXPERIENCE, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -1250,8 +1250,8 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_ENCOUNTER_TIMER_START, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_GROUP_SIZE_CHANGED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_INFO, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_RESET, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_RESET_FAILED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_RESET, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_RESET_FAILED, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_SAVE_CREATED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_INVALIDATE_PLAYER, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_INVALID_PROMOTION_CODE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1652,7 +1652,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_FAILURE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_GO, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_HEAL_LOG, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_INSTAKILL_LOG, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_INSTAKILL_LOG, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_INTERRUPT_LOG, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_MISS_LOG, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_MULTISTRIKE_EFFECT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 8f74a8900b0..d0242b86440 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -280,6 +280,7 @@ namespace WorldPackets namespace Instance { class InstanceInfo; + class ResetInstances; } namespace Item @@ -1398,7 +1399,7 @@ class WorldSession void HandleRealmSplitOpcode(WorldPacket& recvData); void HandleTimeSyncResponse(WorldPackets::Misc::TimeSyncResponse& packet); void HandleWhoIsOpcode(WorldPackets::Who::WhoIsRequest& packet); - void HandleResetInstancesOpcode(WorldPacket& recvData); + void HandleResetInstancesOpcode(WorldPackets::Instance::ResetInstances& packet); void HandleInstanceLockResponse(WorldPacket& recvPacket); // Looking for Dungeon/Raid diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index c640134f6e4..36e544de3bd 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -68,6 +68,7 @@ #include "ReputationMgr.h" #include "AreaTrigger.h" #include "Garrison.h" +#include "CombatLogPackets.h" #include "DuelPackets.h" #include "MiscPackets.h" #include "SpellPackets.h" @@ -378,11 +379,12 @@ void Spell::EffectInstaKill(SpellEffIndex /*effIndex*/) if (m_caster == unitTarget) // prevent interrupt message finish(); - WorldPacket data(SMSG_SPELL_INSTAKILL_LOG, 8+8+4); - data << m_caster->GetGUID(); - data << unitTarget->GetGUID(); - data << uint32(m_spellInfo->Id); - m_caster->SendMessageToSet(&data, true); + WorldPackets::CombatLog::SpellInstakillLog data; + data.Target = unitTarget->GetGUID(); + data.Caster = m_caster->GetGUID(); + data.SpellID = m_spellInfo->Id; + + m_caster->SendMessageToSet(data.Write(), true); m_caster->DealDamage(unitTarget, unitTarget->GetHealth(), NULL, NODAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); } |