SMSG_SPELL_FAILURE: a more correct usage

This commit is contained in:
Olion 2017-07-09 23:46:19 +03:00 committed by Antz
parent 901bdcad53
commit 351b6f2349
3 changed files with 25 additions and 18 deletions

View File

@ -349,7 +349,7 @@ void Opcodes::BuildOpcodeList()
/*[-ZERO] Need check */ /*0x11E*/ StoreOpcode(CMSG_CLEAR_TRADE_ITEM, "CMSG_CLEAR_TRADE_ITEM", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleClearTradeItemOpcode);
/*[-ZERO] Need check */ /*0x11F*/ StoreOpcode(CMSG_SET_TRADE_GOLD, "CMSG_SET_TRADE_GOLD", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetTradeGoldOpcode);
/*0x120*/ StoreOpcode(SMSG_TRADE_STATUS, "SMSG_TRADE_STATUS", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide);
/*[-ZERO] Need check */ /*0x121*/ StoreOpcode(SMSG_TRADE_STATUS_EXTENDED, "SMSG_TRADE_STATUS_EXTENDED", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide);
/*0x121*/ StoreOpcode(SMSG_TRADE_STATUS_EXTENDED, "SMSG_TRADE_STATUS_EXTENDED", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide);
/*0x122*/ StoreOpcode(SMSG_INITIALIZE_FACTIONS, "SMSG_INITIALIZE_FACTIONS", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide);
/*0x123*/ StoreOpcode(SMSG_SET_FACTION_VISIBLE, "SMSG_SET_FACTION_VISIBLE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide);
/*0x124*/ StoreOpcode(SMSG_SET_FACTION_STANDING, "SMSG_SET_FACTION_STANDING", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide);
@ -367,7 +367,7 @@ void Opcodes::BuildOpcodeList()
/*[-ZERO] Need check */ /*0x130*/ StoreOpcode(SMSG_CAST_FAILED, "SMSG_CAST_FAILED", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide);
/*0x131*/ StoreOpcode(SMSG_SPELL_START, "SMSG_SPELL_START", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide);
/*0x132*/ StoreOpcode(SMSG_SPELL_GO, "SMSG_SPELL_GO", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide);
/*[-ZERO] Need check */ /*0x133*/ StoreOpcode(SMSG_SPELL_FAILURE, "SMSG_SPELL_FAILURE", 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);
/*[-ZERO] Need check */ /*0x136*/ StoreOpcode(CMSG_CANCEL_AURA, "CMSG_CANCEL_AURA", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCancelAuraOpcode);
@ -736,7 +736,7 @@ void Opcodes::BuildOpcodeList()
/*[-ZERO] Need check */ /*0x2A3*/ StoreOpcode(CMSG_LOOT_MASTER_GIVE, "CMSG_LOOT_MASTER_GIVE", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleLootMasterGiveOpcode);
/*[-ZERO] Need check */ /*0x2A4*/ StoreOpcode(SMSG_LOOT_MASTER_LIST, "SMSG_LOOT_MASTER_LIST", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide);
/*[-ZERO] Need check */ /*0x2A5*/ StoreOpcode(SMSG_SET_FORCED_REACTIONS, "SMSG_SET_FORCED_REACTIONS", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide);
/*[-ZERO] Need check */ /*0x2A6*/ StoreOpcode(SMSG_SPELL_FAILED_OTHER, "SMSG_SPELL_FAILED_OTHER", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide);
/*0x2A6*/ StoreOpcode(SMSG_SPELL_FAILED_OTHER, "SMSG_SPELL_FAILED_OTHER", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide);
/*[-ZERO] Need check */ /*0x2A7*/ StoreOpcode(SMSG_GAMEOBJECT_RESET_STATE, "SMSG_GAMEOBJECT_RESET_STATE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide);
/*[-ZERO] Need check */ /*0x2A8*/ StoreOpcode(CMSG_REPAIR_ITEM, "CMSG_REPAIR_ITEM", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRepairItemOpcode);
/*[-ZERO] Need check */ /*0x2A9*/ StoreOpcode(SMSG_CHAT_PLAYER_NOT_FOUND, "SMSG_CHAT_PLAYER_NOT_FOUND", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide);

View File

@ -2632,7 +2632,7 @@ void Spell::cancel()
//(no break)
case SPELL_STATE_DELAYED:
{
SendInterrupted(0);
SendInterrupted(SPELL_FAILED_INTERRUPTED);
if (sendInterrupt)
{ SendCastResult(SPELL_FAILED_INTERRUPTED); }
@ -2651,7 +2651,7 @@ void Spell::cancel()
}
SendChannelUpdate(0);
SendInterrupted(0);
SendInterrupted(SPELL_FAILED_INTERRUPTED);
if (sendInterrupt)
{ SendCastResult(SPELL_FAILED_INTERRUPTED); }
@ -3274,10 +3274,9 @@ void Spell::SendCastResult(SpellCastResult result)
// Reseting emote state for case not handled by the client.
if (result == SPELL_FAILED_CHEST_IN_USE)
{
SendInterrupted(0);
SendInterrupted(result);
}
SendCastResult((Player*)m_caster, m_spellInfo, result);
}
@ -3587,17 +3586,25 @@ void Spell::SendLogExecute()
m_caster->SendMessageToSet(&data, true);
}
void Spell::SendInterrupted(uint8 result)
void Spell::SendInterrupted(SpellCastResult result)
{
Player *casterPlayer = m_caster->ToPlayer();
if (casterPlayer)
{
WorldPacket data(SMSG_SPELL_FAILURE, (8 + 4 + 1));
data << m_caster->GetPackGUID();
data << m_spellInfo->Id;
data << result;
m_caster->SendMessageToSet(&data, true);
data.Initialize(SMSG_SPELL_FAILED_OTHER, (8 + 4));
data << m_caster->GetObjectGuid();
data << m_spellInfo->Id;
data << uint8(result);
casterPlayer->SendDirectMessage(&data);
}
WorldPacket data(SMSG_SPELL_FAILED_OTHER, (8 + 4));
data << m_caster->GetObjectGuid();
data << m_spellInfo->Id;
if (casterPlayer)
casterPlayer->SendMessageToSetExcept(&data, casterPlayer);
else
m_caster->SendMessageToSet(&data, true);
}
@ -4458,14 +4465,14 @@ SpellCastResult Spell::CheckCast(bool strict)
// Must be behind the target.
if (m_spellInfo->AttributesEx2 == SPELL_ATTR_EX2_UNK20 && m_spellInfo->HasAttribute(SPELL_ATTR_EX_UNK9) && target->HasInArc(M_PI_F, m_caster))
{
SendInterrupted(2);
SendInterrupted(SPELL_FAILED_NOT_BEHIND);
return SPELL_FAILED_NOT_BEHIND;
}
// Target must be facing you.
if ((m_spellInfo->Attributes == (SPELL_ATTR_UNK4 | SPELL_ATTR_NOT_SHAPESHIFT | SPELL_ATTR_UNK18 | SPELL_ATTR_STOP_ATTACK_TARGET)) && !target->HasInArc(M_PI_F, m_caster))
{
SendInterrupted(2);
SendInterrupted(SPELL_FAILED_NOT_INFRONT);
return SPELL_FAILED_NOT_INFRONT;
}

View File

@ -367,7 +367,7 @@ class Spell
void SendSpellGo();
void SendSpellCooldown();
void SendLogExecute();
void SendInterrupted(uint8 result);
void SendInterrupted(SpellCastResult result);
void SendChannelUpdate(uint32 time);
void SendChannelStart(uint32 duration);
void SendResurrectRequest(Player* target);