diff options
author | megamage <none@none> | 2009-08-27 20:14:50 -0500 |
---|---|---|
committer | megamage <none@none> | 2009-08-27 20:14:50 -0500 |
commit | eeb18e51bb7a539116e0a92f1db557f8727042ff (patch) | |
tree | d47780c48748754c624f69508826d1cf24cb4634 | |
parent | 90b55ff7b15bb243fce40ec733630bc605bf04a9 (diff) |
*Correctly process more movement packets. Author: VladimirMangos
--HG--
branch : trunk
-rw-r--r-- | src/game/MovementHandler.cpp | 48 | ||||
-rw-r--r-- | src/game/SharedDefines.h | 2 | ||||
-rw-r--r-- | src/game/Spell.cpp | 2 | ||||
-rw-r--r-- | src/game/Spell.h | 2 | ||||
-rw-r--r-- | src/game/SpellEffects.cpp | 26 | ||||
-rw-r--r-- | src/game/SpellMgr.cpp | 4 |
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; |