aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormegamage <none@none>2009-08-27 20:14:50 -0500
committermegamage <none@none>2009-08-27 20:14:50 -0500
commiteeb18e51bb7a539116e0a92f1db557f8727042ff (patch)
treed47780c48748754c624f69508826d1cf24cb4634 /src
parent90b55ff7b15bb243fce40ec733630bc605bf04a9 (diff)
*Correctly process more movement packets. Author: VladimirMangos
--HG-- branch : trunk
Diffstat (limited to 'src')
-rw-r--r--src/game/MovementHandler.cpp48
-rw-r--r--src/game/SharedDefines.h2
-rw-r--r--src/game/Spell.cpp2
-rw-r--r--src/game/Spell.h2
-rw-r--r--src/game/SpellEffects.cpp26
-rw-r--r--src/game/SpellMgr.cpp4
6 files changed, 33 insertions, 51 deletions
diff --git a/src/game/MovementHandler.cpp b/src/game/MovementHandler.cpp
index 78ae1145a06..48a84a0cded 100644
--- a/src/game/MovementHandler.cpp
+++ b/src/game/MovementHandler.cpp
@@ -577,43 +577,41 @@ void WorldSession::HandleMountSpecialAnimOpcode(WorldPacket& /*recvdata*/)
GetPlayer()->SendMessageToSet(&data, false);
}
-void WorldSession::HandleMoveKnockBackAck( WorldPacket & /*recv_data*/ )
+void WorldSession::HandleMoveKnockBackAck( WorldPacket & recv_data )
{
sLog.outDebug("CMSG_MOVE_KNOCK_BACK_ACK");
- // Currently not used but maybe use later for recheck final player position
- // (must be at call same as into "recv_data >> x >> y >> z >> orientation;"
- /*
- uint32 flags, time;
- float x, y, z, orientation;
- uint64 guid;
- uint32 sequence;
- uint32 ukn1;
- float xdirection,ydirection,hspeed,vspeed;
-
- recv_data >> guid;
- recv_data >> sequence;
- recv_data >> flags >> time;
- recv_data >> x >> y >> z >> orientation;
- recv_data >> ukn1; //unknown
- recv_data >> vspeed >> xdirection >> ydirection >> hspeed;
+ recv_data.read_skip<uint64>(); // guid
+ recv_data.read_skip<uint32>(); // unk
- // skip not personal message;
- if(GetPlayer()->GetGUID()!=guid)
- return;
-
- // check code
- */
+ MovementInfo movementInfo;
+ ReadMovementInfo(recv_data, &movementInfo);
}
-void WorldSession::HandleMoveHoverAck( WorldPacket& /*recv_data*/ )
+void WorldSession::HandleMoveHoverAck( WorldPacket& recv_data )
{
sLog.outDebug("CMSG_MOVE_HOVER_ACK");
+
+ recv_data.read_skip<uint64>(); // guid
+ recv_data.read_skip<uint32>(); // unk
+
+ MovementInfo movementInfo;
+ ReadMovementInfo(recv_data, &movementInfo);
+
+ recv_data.read_skip<uint32>(); // unk2
}
-void WorldSession::HandleMoveWaterWalkAck(WorldPacket& /*recv_data*/)
+void WorldSession::HandleMoveWaterWalkAck(WorldPacket& recv_data)
{
sLog.outDebug("CMSG_MOVE_WATER_WALK_ACK");
+
+ recv_data.read_skip<uint64>(); // guid
+ recv_data.read_skip<uint32>(); // unk
+
+ MovementInfo movementInfo;
+ ReadMovementInfo(recv_data, &movementInfo);
+
+ recv_data.read_skip<uint32>(); // unk2
}
void WorldSession::HandleSummonResponseOpcode(WorldPacket& recv_data)
diff --git a/src/game/SharedDefines.h b/src/game/SharedDefines.h
index e03239332c4..1037b65b624 100644
--- a/src/game/SharedDefines.h
+++ b/src/game/SharedDefines.h
@@ -703,7 +703,7 @@ enum SpellEffects
SPELL_EFFECT_CALL_PET = 135,
SPELL_EFFECT_HEAL_PCT = 136,
SPELL_EFFECT_ENERGIZE_PCT = 137,
- SPELL_EFFECT_138 = 138,
+ SPELL_EFFECT_LEAP_BACK = 138,
SPELL_EFFECT_CLEAR_QUEST = 139,
SPELL_EFFECT_FORCE_CAST = 140,
SPELL_EFFECT_141 = 141,
diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp
index b766f3d75af..e48251347b2 100644
--- a/src/game/Spell.cpp
+++ b/src/game/Spell.cpp
@@ -2944,7 +2944,7 @@ void Spell::cast(bool skipCheck)
case SPELL_EFFECT_CHARGE:
case SPELL_EFFECT_JUMP:
case SPELL_EFFECT_JUMP2:
- case SPELL_EFFECT_138:
+ case SPELL_EFFECT_LEAP_BACK:
HandleEffects(NULL,NULL,NULL,i);
m_effectMask |= (1<<i);
break;
diff --git a/src/game/Spell.h b/src/game/Spell.h
index 93b383bed3d..c9018ee7b53 100644
--- a/src/game/Spell.h
+++ b/src/game/Spell.h
@@ -328,7 +328,7 @@ class Spell
void EffectResurrect(uint32 i);
void EffectParry(uint32 i);
void EffectBlock(uint32 i);
- void EffectMomentMove(uint32 i);
+ void EffectLeapForward(uint32 i);
void EffectTransmitted(uint32 i);
void EffectDisEnchant(uint32 i);
void EffectInebriate(uint32 i);
diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp
index 24a1a5c104a..d8471edcc6d 100644
--- a/src/game/SpellEffects.cpp
+++ b/src/game/SpellEffects.cpp
@@ -93,7 +93,7 @@ pEffect SpellEffects[TOTAL_SPELL_EFFECTS]=
&Spell::EffectUnused, // 26 SPELL_EFFECT_DEFENSE one spell: Defense
&Spell::EffectPersistentAA, // 27 SPELL_EFFECT_PERSISTENT_AREA_AURA
&Spell::EffectSummonType, // 28 SPELL_EFFECT_SUMMON
- &Spell::EffectMomentMove, // 29 SPELL_EFFECT_LEAP
+ &Spell::EffectLeapForward, // 29 SPELL_EFFECT_LEAP
&Spell::EffectEnergize, // 30 SPELL_EFFECT_ENERGIZE
&Spell::EffectWeaponDmg, // 31 SPELL_EFFECT_WEAPON_PERCENT_DAMAGE
&Spell::EffectTriggerMissileSpell, // 32 SPELL_EFFECT_TRIGGER_MISSILE
@@ -202,7 +202,7 @@ pEffect SpellEffects[TOTAL_SPELL_EFFECTS]=
&Spell::EffectNULL, //135 SPELL_EFFECT_CALL_PET
&Spell::EffectHealPct, //136 SPELL_EFFECT_HEAL_PCT
&Spell::EffectEnergizePct, //137 SPELL_EFFECT_ENERGIZE_PCT
- &Spell::EffectJump2, //138 SPELL_EFFECT_138 Leap
+ &Spell::EffectJump2, //138 SPELL_EFFECT_LEAP_BACK Leap back
&Spell::EffectUnused, //139 SPELL_EFFECT_CLEAR_QUEST (misc - is quest ID)
&Spell::EffectForceCast, //140 SPELL_EFFECT_FORCE_CAST
&Spell::EffectNULL, //141 SPELL_EFFECT_141 damage and reduce speed?
@@ -6188,7 +6188,7 @@ void Spell::EffectBlock(uint32 /*i*/)
((Player*)unitTarget)->SetCanBlock(true);
}
-void Spell::EffectMomentMove(uint32 i)
+void Spell::EffectLeapForward(uint32 i)
{
if(unitTarget->isInFlight())
return;
@@ -6444,26 +6444,10 @@ void Spell::EffectSendTaxi(uint32 i)
void Spell::EffectPlayerPull(uint32 i)
{
- if(!unitTarget || !m_caster)
- return;
-
- // Effect only works on players
- if(unitTarget->GetTypeId()!=TYPEID_PLAYER)
+ if(!unitTarget)
return;
- float vsin = sin(unitTarget->GetAngle(m_caster));
- float vcos = cos(unitTarget->GetAngle(m_caster));
-
- WorldPacket data(SMSG_MOVE_KNOCK_BACK, 8+4+4+4+4+4);
- data.append(unitTarget->GetPackGUID());
- data << uint32(0); // Sequence
- data << float(vcos); // x direction
- data << float(vsin); // y direction
- // Horizontal speed
- data << float(damage ? damage : unitTarget->GetDistance2d(m_caster));
- data << float(m_spellInfo->EffectMiscValue[i])/-10; // Z Movement speed
-
- ((Player*)unitTarget)->GetSession()->SendPacket(&data);
+ unitTarget->KnockbackFrom(m_caster->GetPositionX(), m_caster->GetPositionY(), float(damage ? damage : unitTarget->GetDistance2d(m_caster)), float(m_spellInfo->EffectMiscValue[i])/10);
}
void Spell::EffectDispelMechanic(uint32 i)
diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp
index 373459f4015..d34f611b7a7 100644
--- a/src/game/SpellMgr.cpp
+++ b/src/game/SpellMgr.cpp
@@ -84,7 +84,7 @@ SpellMgr::SpellMgr()
case SPELL_EFFECT_CHARGE:
case SPELL_EFFECT_JUMP:
case SPELL_EFFECT_JUMP2:
- case SPELL_EFFECT_138:
+ case SPELL_EFFECT_LEAP_BACK:
EffectTargetType[i] = SPELL_REQUIRE_CASTER;
break;
//case SPELL_EFFECT_WMO_DAMAGE:
@@ -3578,7 +3578,7 @@ void SpellMgr::LoadSpellCustomAttr()
case SPELL_EFFECT_CHARGE:
case SPELL_EFFECT_JUMP:
case SPELL_EFFECT_JUMP2:
- case SPELL_EFFECT_138:
+ case SPELL_EFFECT_LEAP_BACK:
if(!spellInfo->speed && !spellInfo->SpellFamilyName)
spellInfo->speed = SPEED_CHARGE;
mSpellCustomAttr[i] |= SPELL_ATTR_CU_CHARGE;