Core/PacketIO: updated structure of CMSG_RESET_INSTANCES, SMSG_INSTANCE_RESET, SMSG_INSTANCE_RESET_FAILED and SMSG_SPELL_INSTAKILL_LOG

This commit is contained in:
MitchesD
2015-06-07 17:08:45 +02:00
parent 70fe4e57a0
commit e3ed67732f
9 changed files with 89 additions and 19 deletions
+8 -7
View File
@@ -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());
}
/*********************************************************/
+1 -1
View File
@@ -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())
{
@@ -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;
}
@@ -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;
};
}
}
@@ -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;
}
@@ -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;
};
}
}
+5 -5
View File
@@ -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);
+2 -1
View File
@@ -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
+7 -5
View File
@@ -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);
}