From 2eedb78a99a152cab6491dee38eae05073b307ea Mon Sep 17 00:00:00 2001 From: Olion Date: Mon, 10 Jul 2017 01:09:13 +0300 Subject: [PATCH] SMSG_PET_CAST_FAILED: packet structure fix --- src/game/Object/Unit.cpp | 25 +++++++++++++++++++++++-- src/game/Server/Opcodes.cpp | 6 +++--- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/src/game/Object/Unit.cpp b/src/game/Object/Unit.cpp index 9f2eb35e..dea0e412 100644 --- a/src/game/Object/Unit.cpp +++ b/src/game/Object/Unit.cpp @@ -8493,10 +8493,31 @@ void Unit::SendPetCastFail(uint32 spellid, SpellCastResult msg) if (!owner || owner->GetTypeId() != TYPEID_PLAYER) { return; } - WorldPacket data(SMSG_PET_CAST_FAILED, 4 + 1); + WorldPacket data(SMSG_PET_CAST_FAILED, 4 + 1 + 1); data << uint32(spellid); + data << uint8(0); // unknown, maybe unused data << uint8(msg); - ((Player*)owner)->GetSession()->SendPacket(&data); + switch (msg) + { + case SPELL_FAILED_EQUIPPED_ITEM_CLASS: + case SPELL_FAILED_EQUIPPED_ITEM_CLASS_MAINHAND: + case SPELL_FAILED_EQUIPPED_ITEM_CLASS_OFFHAND: + data << int32(0); // required and actual item class? + data << int32(0); + break; + case SPELL_FAILED_REQUIRES_SPELL_FOCUS: + data << int32(0); // required spellfocus id? + break; + case SPELL_FAILED_REQUIRES_AREA: + data << int32(GetAreaId()); // untested + break; + case SPELL_FAILED_PREVENTED_BY_MECHANIC: + data << int32(0); // mechanic id? + break; + default: + break; + } + owner->ToPlayer()->SendDirectMessage(&data); } void Unit::SendPetActionFeedback(uint8 msg) diff --git a/src/game/Server/Opcodes.cpp b/src/game/Server/Opcodes.cpp index 0fab50e3..e65c8b48 100644 --- a/src/game/Server/Opcodes.cpp +++ b/src/game/Server/Opcodes.cpp @@ -369,10 +369,10 @@ void Opcodes::BuildOpcodeList() /*0x132*/ StoreOpcode(SMSG_SPELL_GO, "SMSG_SPELL_GO", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide); /*0x133*/ StoreOpcode(SMSG_SPELL_FAILURE, "SMSG_SPELL_FAILURE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide); /*0x134*/ StoreOpcode(SMSG_SPELL_COOLDOWN, "SMSG_SPELL_COOLDOWN", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide); - /*[-ZERO] Need check */ /*0x135*/ StoreOpcode(SMSG_COOLDOWN_EVENT, "SMSG_COOLDOWN_EVENT", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide); + /*0x135*/ StoreOpcode(SMSG_COOLDOWN_EVENT, "SMSG_COOLDOWN_EVENT", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide); /*[-ZERO] Need check */ /*0x136*/ StoreOpcode(CMSG_CANCEL_AURA, "CMSG_CANCEL_AURA", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCancelAuraOpcode); - /*[-ZERO] Need check */ /*0x137*/ StoreOpcode(SMSG_UPDATE_AURA_DURATION, "SMSG_UPDATE_AURA_DURATION", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide); - /*[-ZERO] Need check */ /*0x138*/ StoreOpcode(SMSG_PET_CAST_FAILED, "SMSG_PET_CAST_FAILED", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide); + /*0x137*/ StoreOpcode(SMSG_UPDATE_AURA_DURATION, "SMSG_UPDATE_AURA_DURATION", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide); + /*0x138*/ StoreOpcode(SMSG_PET_CAST_FAILED, "SMSG_PET_CAST_FAILED", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide); /*0x139*/ StoreOpcode(MSG_CHANNEL_START, "MSG_CHANNEL_START", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL); /*0x13A*/ StoreOpcode(MSG_CHANNEL_UPDATE, "MSG_CHANNEL_UPDATE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL); /*[-ZERO] Need check */ /*0x13B*/ StoreOpcode(CMSG_CANCEL_CHANNELLING, "CMSG_CANCEL_CHANNELLING", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCancelChanneling);