aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/game/SpellEffects.cpp45
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)