mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-23 18:36:31 +01:00
*Correctly process more movement packets. Author: VladimirMangos
--HG-- branch : trunk
This commit is contained in:
@@ -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.read_skip<uint64>(); // guid
|
||||
recv_data.read_skip<uint32>(); // unk
|
||||
|
||||
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;
|
||||
|
||||
// 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)
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
if(!unitTarget)
|
||||
return;
|
||||
|
||||
// Effect only works on players
|
||||
if(unitTarget->GetTypeId()!=TYPEID_PLAYER)
|
||||
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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user