[8011] Send energize packets in correct order to avoid strange client behaviour.

If you send SMSG_SPELLENERGIZELOG after SMSG_POWER_UPDATE client shows mana gain twice.

Signed-off-by: hunuza <hunuza@gmail.com>
This commit is contained in:
nos4r2zod 2009-06-14 12:05:04 +02:00 committed by hunuza
parent dcba023261
commit 82d3e2ae7d
5 changed files with 13 additions and 10 deletions

View file

@ -1447,8 +1447,7 @@ void Aura::TriggerSpell()
if (mana)
{
mana /= 10;
caster->ModifyPower( POWER_MANA, mana );
caster->SendEnergizeSpellLog(caster, 23493, mana, POWER_MANA);
caster->EnergizeBySpell(caster, 23493, mana, POWER_MANA);
}
return;
}

View file

@ -2369,9 +2369,7 @@ void Spell::EffectPowerDrain(uint32 i)
int32 gain = int32(new_damage * manaMultiplier);
m_caster->ModifyPower(POWER_MANA,gain);
//send log
m_caster->SendEnergizeSpellLog(m_caster, m_spellInfo->Id, gain, POWER_MANA);
m_caster->EnergizeBySpell(m_caster, m_spellInfo->Id, gain, POWER_MANA);
}
}
@ -2792,8 +2790,7 @@ void Spell::EffectEnergize(uint32 i)
if(unitTarget->GetMaxPower(power) == 0)
return;
unitTarget->ModifyPower(power,damage);
m_caster->SendEnergizeSpellLog(unitTarget, m_spellInfo->Id, damage, power);
m_caster->EnergizeBySpell(unitTarget, m_spellInfo->Id, damage, power);
// Mad Alchemist's Potion
if (m_spellInfo->Id == 45051)
@ -2855,8 +2852,7 @@ void Spell::EffectEnergisePct(uint32 i)
return;
uint32 gain = damage * maxPower / 100;
unitTarget->ModifyPower(power, gain);
m_caster->SendEnergizeSpellLog(unitTarget, m_spellInfo->Id, gain, power);
m_caster->EnergizeBySpell(unitTarget, m_spellInfo->Id, gain, power);
}
void Spell::SendLoot(uint64 guid, LootType loottype)

View file

@ -7643,6 +7643,13 @@ void Unit::SendEnergizeSpellLog(Unit *pVictim, uint32 SpellID, uint32 Damage, Po
SendMessageToSet(&data, true);
}
void Unit::EnergizeBySpell(Unit *pVictim, uint32 SpellID, uint32 Damage, Powers powertype)
{
SendEnergizeSpellLog(pVictim, SpellID, Damage, powertype);
// needs to be called after sending spell log
ModifyPower(powertype, Damage);
}
uint32 Unit::SpellDamageBonus(Unit *pVictim, SpellEntry const *spellProto, uint32 pdamage, DamageEffectType damagetype, uint32 stack)
{
if(!spellProto || !pVictim || damagetype==DIRECT_DAMAGE )

View file

@ -1119,6 +1119,7 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
void SendHealSpellLog(Unit *pVictim, uint32 SpellID, uint32 Damage, uint32 OverHeal, bool critical = false);
void SendEnergizeSpellLog(Unit *pVictim, uint32 SpellID, uint32 Damage,Powers powertype);
void EnergizeBySpell(Unit *pVictim, uint32 SpellID, uint32 Damage, Powers powertype);
uint32 SpellNonMeleeDamageLog(Unit *pVictim, uint32 spellID, uint32 damage);
void CastSpell(Unit* Victim, uint32 spellId, bool triggered, Item *castItem = NULL, Aura* triggeredByAura = NULL, uint64 originalCaster = 0);
void CastSpell(Unit* Victim,SpellEntry const *spellInfo, bool triggered, Item *castItem= NULL, Aura* triggeredByAura = NULL, uint64 originalCaster = 0);

View file

@ -1,4 +1,4 @@
#ifndef __REVISION_NR_H__
#define __REVISION_NR_H__
#define REVISION_NR "8010"
#define REVISION_NR "8011"
#endif // __REVISION_NR_H__