aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorVincent-Michael <Vincent_Michael@gmx.de>2015-04-19 00:59:27 +0200
committerVincent-Michael <Vincent_Michael@gmx.de>2015-04-19 00:59:27 +0200
commit3499b77d5fa0b56a8a749982ef984ccbd30dc1fc (patch)
treea4261ac41deb673dbdc2b1e20e58277e1bdd6a46 /src
parent8bde737d3ac282c470208b1fccd9f17c4a3de057 (diff)
Core/PacketIO: Updated and enabled SMSG_SPELL_HEAL_LOG for WoD
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp43
-rw-r--r--src/server/game/Entities/Unit/Unit.h2
-rw-r--r--src/server/game/Server/Packets/CombatLogPackets.cpp30
-rw-r--r--src/server/game/Server/Packets/CombatLogPackets.h21
-rw-r--r--src/server/game/Server/Packets/NPCPackets.cpp2
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp2
6 files changed, 85 insertions, 15 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 0394911d9fe..8d6e36631bb 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -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)
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index e6f6ff13f37..79d402c3695 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -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);
diff --git a/src/server/game/Server/Packets/CombatLogPackets.cpp b/src/server/game/Server/Packets/CombatLogPackets.cpp
index ac65bc09fe3..80499f8c130 100644
--- a/src/server/game/Server/Packets/CombatLogPackets.cpp
+++ b/src/server/game/Server/Packets/CombatLogPackets.cpp
@@ -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;
+}
diff --git a/src/server/game/Server/Packets/CombatLogPackets.h b/src/server/game/Server/Packets/CombatLogPackets.h
index ad727579376..c74e8112698 100644
--- a/src/server/game/Server/Packets/CombatLogPackets.h
+++ b/src/server/game/Server/Packets/CombatLogPackets.h
@@ -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
+ };
}
}
diff --git a/src/server/game/Server/Packets/NPCPackets.cpp b/src/server/game/Server/Packets/NPCPackets.cpp
index 02186b58a91..4e44f07fd01 100644
--- a/src/server/game/Server/Packets/NPCPackets.cpp
+++ b/src/server/game/Server/Packets/NPCPackets.cpp
@@ -174,4 +174,4 @@ WorldPacket const* WorldPackets::NPC::SpiritHealerConfirm::Write()
_worldPacket << Unit;
return &_worldPacket;
-} \ No newline at end of file
+}
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index 258fd4a15bb..a9cc63e4eb5 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -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);