From 87f092ed3d2f2bde9608509b59c9336eb3bdd88b Mon Sep 17 00:00:00 2001 From: Yaki Khadafi Date: Tue, 3 Feb 2015 05:40:52 +0000 Subject: [PATCH] Implement CAST_FLAG_HEAL_PREDICTION --- src/game/WorldHandlers/Spell.cpp | 31 +++++++++++++++++++++++++------ src/game/WorldHandlers/Spell.h | 2 +- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/src/game/WorldHandlers/Spell.cpp b/src/game/WorldHandlers/Spell.cpp index 1da398c6d..057a09959 100644 --- a/src/game/WorldHandlers/Spell.cpp +++ b/src/game/WorldHandlers/Spell.cpp @@ -4031,7 +4031,7 @@ void Spell::SendSpellStart() DEBUG_FILTER_LOG(LOG_FILTER_SPELL_CAST, "Sending SMSG_SPELL_START id=%u", m_spellInfo->Id); - uint32 castFlags = CAST_FLAG_UNKNOWN2; + uint32 castFlags = CAST_FLAG_HAS_TRAJECTORY; if (m_spellInfo->runeCostID) castFlags |= CAST_FLAG_UNKNOWN19; @@ -4040,6 +4040,12 @@ void Spell::SendSpellStart() m_spellInfo->powerType != POWER_HEALTH) castFlags |= CAST_FLAG_PREDICTED_POWER; + if (m_casttime && (IsSpellHaveEffect(m_spellInfo, SPELL_EFFECT_HEAL) || IsSpellHaveEffect(m_spellInfo, SPELL_EFFECT_HEAL_PCT)) || + IsSpellHaveAura(m_spellInfo, SPELL_AURA_PERIODIC_HEAL)) + { + castFlags |= CAST_FLAG_HEAL_PREDICTION; + } + WorldPacket data(SMSG_SPELL_START, (8 + 8 + 4 + 4 + 2)); if (m_CastItem) data << m_CastItem->GetPackGUID(); @@ -4089,11 +4095,24 @@ void Spell::SendSpellStart() if (castFlags & CAST_FLAG_HEAL_PREDICTION) { - uint8 unk = 0; - data << uint32(0); - data << uint8(unk); - if (unk == 2) - data << ObjectGuid().WriteAsPacked(); + uint8 type = DOT; + int32 amt = 0; + for (int i = 0; i < MAX_EFFECT_INDEX; ++i) + { + if (m_spellInfo->GetSpellEffectIdByIndex(SpellEffectIndex(i)) == SPELL_EFFECT_HEAL || m_spellInfo->GetSpellEffectIdByIndex(SpellEffectIndex(i)) == SPELL_EFFECT_HEAL_PCT) + { + type = 0; + Unit* target = m_targets.getUnitTarget() ? m_targets.getUnitTarget() : m_caster; + amt = CalculateDamage(SpellEffectIndex(i), target); + amt = m_caster->SpellHealingBonusDone(target, m_spellInfo, amt, HEAL); + break; + } + } + + data << uint32(amt); + data << uint8(type); + if (type == DOT) + data << m_caster->GetPackGUID(); } m_caster->SendMessageToSet(&data, true); diff --git a/src/game/WorldHandlers/Spell.h b/src/game/WorldHandlers/Spell.h index a34045799..ef7f0aa82 100644 --- a/src/game/WorldHandlers/Spell.h +++ b/src/game/WorldHandlers/Spell.h @@ -46,7 +46,7 @@ enum SpellCastFlags { CAST_FLAG_NONE = 0x00000000, CAST_FLAG_HIDDEN_COMBATLOG = 0x00000001, // hide in combat log? - CAST_FLAG_UNKNOWN2 = 0x00000002, + CAST_FLAG_HAS_TRAJECTORY = 0x00000002, CAST_FLAG_UNKNOWN3 = 0x00000004, CAST_FLAG_UNKNOWN4 = 0x00000008, CAST_FLAG_UNKNOWN5 = 0x00000010,