aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp15
-rw-r--r--src/server/game/Server/Packets/CombatLogPackets.cpp27
-rw-r--r--src/server/game/Server/Packets/CombatLogPackets.h28
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp4
-rw-r--r--src/server/game/Spells/Spell.cpp46
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)