diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/game/SpellEffects.cpp | 45 |
1 files changed, 18 insertions, 27 deletions
diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index 2adf074f8a7..44cbc2f04f1 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -6130,51 +6130,42 @@ void Spell::EffectSkinning(uint32 /*i*/) void Spell::EffectCharge(uint32 /*i*/) { - if (!unitTarget) + if(!m_caster) return; - float x, y, z; - unitTarget->GetContactPoint(m_caster, x, y, z); - if (unitTarget->GetTypeId() != TYPEID_PLAYER) - ((Creature *)unitTarget)->StopMoving(); - - // Only send MOVEMENTFLAG_WALK_MODE, client has strange issues with other move flags - m_caster->SendMonsterMove(x, y, z, 0, m_caster->GetTypeId()==TYPEID_PLAYER ? MONSTER_MOVE_WALK : ((Creature*)m_caster)->GetMonsterMoveFlags(), 1); + Unit *target = m_targets.getUnitTarget(); + if(!target) + return; - if (m_caster->GetTypeId() != TYPEID_PLAYER) - m_caster->GetMap()->CreatureRelocation((Creature*)m_caster,x,y,z,m_caster->GetOrientation()); + float x, y, z; + target->GetContactPoint(m_caster, x, y, z); + m_caster->GetMotionMaster()->MoveCharge(x, y, z); // not all charge effects used in negative spells - if (unitTarget != m_caster && !IsPositiveSpell(m_spellInfo->Id)) - m_caster->Attack(unitTarget,true); + if ( !IsPositiveSpell(m_spellInfo->Id) && m_caster->GetTypeId() == TYPEID_PLAYER) + m_caster->Attack(target, true); } void Spell::EffectCharge2(uint32 /*i*/) { float x, y, z; - if (m_targets.m_targetMask & TARGET_FLAG_DEST_LOCATION) + if(m_targets.HasDst()) { x = m_targets.m_destX; y = m_targets.m_destY; z = m_targets.m_destZ; - - if (unitTarget->GetTypeId() != TYPEID_PLAYER) - ((Creature *)unitTarget)->StopMoving(); } - else if (unitTarget && unitTarget != m_caster) - unitTarget->GetContactPoint(m_caster, x, y, z); + else if(Unit *target = m_targets.getUnitTarget()) + { + target->GetContactPoint(m_caster, x, y, z); + // not all charge effects used in negative spells + if ( !IsPositiveSpell(m_spellInfo->Id) && m_caster->GetTypeId() == TYPEID_PLAYER) + m_caster->Attack(target, true); + } else return; - // Only send MOVEMENTFLAG_WALK_MODE, client has strange issues with other move flags - m_caster->SendMonsterMove(x, y, z, 0, m_caster->GetTypeId()==TYPEID_PLAYER ? MONSTER_MOVE_WALK : ((Creature*)m_caster)->GetMonsterMoveFlags(), 1); - - if (m_caster->GetTypeId() != TYPEID_PLAYER) - m_caster->GetMap()->CreatureRelocation((Creature*)m_caster,x,y,z,m_caster->GetOrientation()); - - // not all charge effects used in negative spells - if (unitTarget && unitTarget != m_caster && !IsPositiveSpell(m_spellInfo->Id)) - m_caster->Attack(unitTarget,true); + m_caster->GetMotionMaster()->MoveCharge(x, y, z); } void Spell::EffectKnockBack(uint32 i) |