mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Core/PacketIO: Updated and enabled SMSG_SPELL_HEAL_LOG for WoD
This commit is contained in:
@@ -8108,19 +8108,38 @@ void Unit::UnsummonAllTotems()
|
||||
}
|
||||
}
|
||||
|
||||
void Unit::SendHealSpellLog(Unit* victim, uint32 SpellID, uint32 Damage, uint32 OverHeal, uint32 Absorb, bool critical)
|
||||
void Unit::SendHealSpellLog(Unit* victim, uint32 spellID, uint32 health, uint32 overHeal, uint32 absorbed, bool crit)
|
||||
{
|
||||
// we guess size
|
||||
WorldPacket data(SMSG_SPELL_HEAL_LOG, 8 + 8 + 4 + 4 + 4 + 4 + 1 + 1);
|
||||
data << victim->GetPackGUID();
|
||||
data << GetPackGUID();
|
||||
data << uint32(SpellID);
|
||||
data << uint32(Damage);
|
||||
data << uint32(OverHeal);
|
||||
data << uint32(Absorb); // Absorb amount
|
||||
data << uint8(critical ? 1 : 0);
|
||||
data << uint8(0); // unused
|
||||
SendMessageToSet(&data, true);
|
||||
WorldPackets::CombatLog::SpellHealLog spellHealLog;
|
||||
|
||||
spellHealLog.CasterGUID = GetGUID();
|
||||
spellHealLog.TargetGUID = victim->GetGUID();
|
||||
|
||||
spellHealLog.SpellID = spellID;
|
||||
spellHealLog.Health = health;
|
||||
spellHealLog.OverHeal = overHeal;
|
||||
spellHealLog.Absorbed = absorbed;
|
||||
|
||||
spellHealLog.Crit = crit;
|
||||
|
||||
/// @todo: 6.x Has to be implemented
|
||||
/*
|
||||
packet.ReadBit("Multistrike");
|
||||
|
||||
var hasCritRollMade = packet.ReadBit("HasCritRollMade");
|
||||
var hasCritRollNeeded = packet.ReadBit("HasCritRollNeeded");
|
||||
var hasLogData = packet.ReadBit("HasLogData");
|
||||
|
||||
if (hasCritRollMade)
|
||||
packet.ReadSingle("CritRollMade");
|
||||
|
||||
if (hasCritRollNeeded)
|
||||
packet.ReadSingle("CritRollNeeded");
|
||||
|
||||
if (hasLogData)
|
||||
SpellParsers.ReadSpellCastLogData(packet);
|
||||
*/
|
||||
SendMessageToSet(spellHealLog.Write(), true);
|
||||
}
|
||||
|
||||
int32 Unit::HealBySpell(Unit* victim, SpellInfo const* spellInfo, uint32 addHealth, bool critical)
|
||||
|
||||
@@ -1600,7 +1600,7 @@ class Unit : public WorldObject
|
||||
virtual void UpdateUnderwaterState(Map* m, float x, float y, float z);
|
||||
bool isInAccessiblePlaceFor(Creature const* c) const;
|
||||
|
||||
void SendHealSpellLog(Unit* victim, uint32 SpellID, uint32 Damage, uint32 OverHeal, uint32 Absorb, bool critical = false);
|
||||
void SendHealSpellLog(Unit* victim, uint32 spellID, uint32 health, uint32 overHeal, uint32 absorbed, bool crit = false);
|
||||
int32 HealBySpell(Unit* victim, SpellInfo const* spellInfo, uint32 addHealth, bool critical = false);
|
||||
void SendEnergizeSpellLog(Unit* victim, uint32 spellID, int32 damage, Powers powertype);
|
||||
void EnergizeBySpell(Unit* victim, uint32 SpellID, int32 Damage, Powers powertype);
|
||||
|
||||
@@ -117,3 +117,33 @@ WorldPacket const* WorldPackets::CombatLog::SpellExecuteLog::Write()
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::CombatLog::SpellHealLog::Write()
|
||||
{
|
||||
_worldPacket << CasterGUID;
|
||||
_worldPacket << TargetGUID;
|
||||
|
||||
_worldPacket << SpellID;
|
||||
_worldPacket << Health;
|
||||
_worldPacket << OverHeal;
|
||||
_worldPacket << Absorbed;
|
||||
|
||||
_worldPacket.WriteBit(Crit);
|
||||
_worldPacket.WriteBit(Multistrike);
|
||||
|
||||
_worldPacket.WriteBit(CritRollMade.HasValue);
|
||||
_worldPacket.WriteBit(CritRollNeeded.HasValue);
|
||||
_worldPacket.WriteBit(LogData.HasValue);
|
||||
_worldPacket.FlushBits();
|
||||
|
||||
if (CritRollMade.HasValue)
|
||||
_worldPacket << CritRollMade.Value;
|
||||
|
||||
if (CritRollNeeded.HasValue)
|
||||
_worldPacket << CritRollNeeded.Value;
|
||||
|
||||
if (LogData.HasValue)
|
||||
_worldPacket << LogData.Value;
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
@@ -87,6 +87,27 @@ namespace WorldPackets
|
||||
std::vector<SpellLogEffect> Effects;
|
||||
Optional<Spells::SpellCastLogData> LogData; /// @todo: find the correct way where to use it, in sniff always false
|
||||
};
|
||||
|
||||
class SpellHealLog final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
|
||||
SpellHealLog() : ServerPacket(SMSG_SPELL_HEAL_LOG, 16 + 16 + 4 * 4 + 1) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
ObjectGuid CasterGUID;
|
||||
ObjectGuid TargetGUID;
|
||||
int32 SpellID = 0;
|
||||
int32 Health = 0;
|
||||
int32 OverHeal = 0;
|
||||
int32 Absorbed = 0;
|
||||
bool Crit = false;
|
||||
bool Multistrike = false;
|
||||
Optional<float> CritRollMade;
|
||||
Optional<float> CritRollNeeded;
|
||||
Optional<Spells::SpellCastLogData> LogData; /// @todo: find the correct way where to use it, in sniff always false
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -174,4 +174,4 @@ WorldPacket const* WorldPackets::NPC::SpiritHealerConfirm::Write()
|
||||
_worldPacket << Unit;
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1647,7 +1647,7 @@ void OpcodeTable::Initialize()
|
||||
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_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
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_MISS_LOG, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
|
||||
Reference in New Issue
Block a user