diff options
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 15 | ||||
-rw-r--r-- | src/server/game/Server/Packets/CombatLogPackets.cpp | 27 | ||||
-rw-r--r-- | src/server/game/Server/Packets/CombatLogPackets.h | 28 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 4 | ||||
-rw-r--r-- | src/server/game/Spells/Spell.cpp | 46 |
5 files changed, 71 insertions, 49 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 490c31e683c..2670f82b72e 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -8129,13 +8129,14 @@ int32 Unit::HealBySpell(Unit* victim, SpellInfo const* spellInfo, uint32 addHeal void Unit::SendEnergizeSpellLog(Unit* victim, uint32 spellId, int32 damage, Powers powerType) { - WorldPacket data(SMSG_SPELL_ENERGIZE_LOG, (8+8+4+4+4+1)); - data << victim->GetPackGUID(); - data << GetPackGUID(); - data << uint32(spellId); - data << uint32(powerType); - data << int32(damage); - SendMessageToSet(&data, true); + WorldPackets::CombatLog::SpellEnergizeLog data; + data.CasterGUID = GetGUID(); + data.TargetGUID = victim->GetGUID(); + data.SpellID = spellId; + data.Type = powerType; + data.Amount = damage; + + SendMessageToSet(data.Write(), true); } void Unit::EnergizeBySpell(Unit* victim, uint32 spellId, int32 damage, Powers powerType) diff --git a/src/server/game/Server/Packets/CombatLogPackets.cpp b/src/server/game/Server/Packets/CombatLogPackets.cpp index 6742e797c54..b8d725e66c6 100644 --- a/src/server/game/Server/Packets/CombatLogPackets.cpp +++ b/src/server/game/Server/Packets/CombatLogPackets.cpp @@ -184,3 +184,30 @@ WorldPacket const* WorldPackets::CombatLog::SpellPeriodicAuraLog::Write() return &_worldPacket; } + +WorldPacket const* WorldPackets::CombatLog::SpellInterruptLog::Write() +{ + _worldPacket << Caster; + _worldPacket << Victim; + _worldPacket << int32(InterruptedSpellID); + _worldPacket << int32(SpellID); + + return &_worldPacket; +} + +WorldPacket const* WorldPackets::CombatLog::SpellEnergizeLog::Write() +{ + _worldPacket << CasterGUID; + _worldPacket << TargetGUID; + + _worldPacket << int32(SpellID); + _worldPacket << int32(Type); + _worldPacket << int32(Amount); + + _worldPacket.WriteBit(LogData.is_initialized()); + _worldPacket.FlushBits(); + if (LogData) + _worldPacket << *LogData; + + return &_worldPacket; +} diff --git a/src/server/game/Server/Packets/CombatLogPackets.h b/src/server/game/Server/Packets/CombatLogPackets.h index a931166ef80..a3b8c32b2e5 100644 --- a/src/server/game/Server/Packets/CombatLogPackets.h +++ b/src/server/game/Server/Packets/CombatLogPackets.h @@ -140,6 +140,34 @@ namespace WorldPackets std::vector<SpellLogEffect> Effects; Optional<Spells::SpellCastLogData> LogData; /// @todo: find the correct way where to use it, in sniff always false }; + + class SpellInterruptLog final : public ServerPacket + { + public: + SpellInterruptLog() : ServerPacket(SMSG_SPELL_INTERRUPT_LOG, 16 + 16 + 4 + 4) { } + + WorldPacket const* Write() override; + + ObjectGuid Caster; + ObjectGuid Victim; + int32 InterruptedSpellID = 0; + int32 SpellID = 0; + }; + + class SpellEnergizeLog final : public ServerPacket + { + public: + SpellEnergizeLog() : ServerPacket(SMSG_SPELL_ENERGIZE_LOG, 16 + 16 + 4 + 4 + 4 + 1) { } + + WorldPacket const* Write() override; + + ObjectGuid CasterGUID; + ObjectGuid TargetGUID; + int32 SpellID = 0; + int32 Type = 0; + int32 Amount = 0; + Optional<Spells::SpellCastLogData> LogData; /// @todo: find the correct way where to use it, in sniff always false + }; } } diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 70a22f0b1bb..7319f5050b2 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -1646,14 +1646,14 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_DAMAGE_SHIELD, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_DELAYED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_DISPELL_LOG, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_ENERGIZE_LOG, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_ENERGIZE_LOG, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_EXECUTE_LOG, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_FAILED_OTHER, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); 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_INTERRUPT_LOG, STATUS_UNHANDLED, 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); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_NON_MELEE_DAMAGE_LOG, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 6f2f761868e..cb0f34c162b 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -4150,47 +4150,13 @@ void Spell::ExecuteLogEffectExtraAttacks(uint8 effIndex, Unit* victim, uint32 nu void Spell::ExecuteLogEffectInterruptCast(uint8 /*effIndex*/, Unit* victim, uint32 spellId) { - ObjectGuid casterGuid = m_caster->GetGUID(); - ObjectGuid targetGuid = victim->GetGUID(); - - WorldPacket data(SMSG_SPELL_INTERRUPT_LOG, 8 + 8 + 4 + 4); - data.WriteBit(targetGuid[4]); - data.WriteBit(casterGuid[5]); - data.WriteBit(casterGuid[6]); - data.WriteBit(casterGuid[1]); - data.WriteBit(casterGuid[3]); - data.WriteBit(casterGuid[0]); - data.WriteBit(targetGuid[3]); - data.WriteBit(targetGuid[5]); - data.WriteBit(targetGuid[1]); - data.WriteBit(casterGuid[4]); - data.WriteBit(casterGuid[7]); - data.WriteBit(targetGuid[7]); - data.WriteBit(targetGuid[6]); - data.WriteBit(targetGuid[2]); - data.WriteBit(casterGuid[2]); - data.WriteBit(targetGuid[0]); - - data.WriteByteSeq(casterGuid[7]); - data.WriteByteSeq(casterGuid[6]); - data.WriteByteSeq(casterGuid[3]); - data.WriteByteSeq(casterGuid[2]); - data.WriteByteSeq(targetGuid[3]); - data.WriteByteSeq(targetGuid[6]); - data.WriteByteSeq(targetGuid[2]); - data.WriteByteSeq(targetGuid[4]); - data.WriteByteSeq(targetGuid[7]); - data.WriteByteSeq(targetGuid[0]); - data.WriteByteSeq(casterGuid[4]); - data << uint32(m_spellInfo->Id); - data.WriteByteSeq(targetGuid[1]); - data.WriteByteSeq(casterGuid[0]); - data.WriteByteSeq(casterGuid[5]); - data.WriteByteSeq(casterGuid[1]); - data << uint32(spellId); - data.WriteByteSeq(targetGuid[5]); + WorldPackets::CombatLog::SpellInterruptLog data; + data.Caster = m_caster->GetGUID(); + data.Victim = victim->GetGUID(); + data.InterruptedSpellID = m_spellInfo->Id; + data.SpellID = spellId; - m_caster->SendMessageToSet(&data, true); + m_caster->SendMessageToSet(data.Write(), true); } void Spell::ExecuteLogEffectDurabilityDamage(uint8 effIndex, Unit* victim, int32 itemId, int32 amount) |