diff options
author | Subv <s.v.h21@hotmail.com> | 2012-12-25 21:49:48 -0500 |
---|---|---|
committer | Subv <s.v.h21@hotmail.com> | 2012-12-25 21:50:39 -0500 |
commit | 9a11b59ba873addb39c9817317f80d43797bf3d5 (patch) | |
tree | 6ecc1d981f070dbc32c2563bb0a55e63043c4fa0 /src | |
parent | e65da39f23ed4dfad38585ccf09ddcfc3138bbb7 (diff) |
Core/Vehicles: Fixed riding vehicles and mind control auras.
Actually, fixed everything that allows you to control another unit.
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 30 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 7 | ||||
-rw-r--r-- | src/server/game/Handlers/MovementHandler.cpp | 19 | ||||
-rw-r--r-- | src/server/game/Handlers/VehicleHandler.cpp | 5 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 2 |
5 files changed, 36 insertions, 27 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 676304a7ece..e759759e769 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -23598,6 +23598,36 @@ void Player::SetClientControl(Unit* target, uint8 allowMove) SetMover(this); } +void Player::SetMover(Unit* target) +{ + m_mover->m_movedPlayer = NULL; + m_mover = target; + m_mover->m_movedPlayer = this; + + ObjectGuid guid = target->GetGUID(); + + WorldPacket data(SMSG_MOVE_SET_ACTIVE_MOVER, 9); + data.WriteBit(guid[5]); + data.WriteBit(guid[7]); + data.WriteBit(guid[3]); + data.WriteBit(guid[6]); + data.WriteBit(guid[0]); + data.WriteBit(guid[4]); + data.WriteBit(guid[1]); + data.WriteBit(guid[2]); + + data.WriteByteSeq(guid[6]); + data.WriteByteSeq(guid[2]); + data.WriteByteSeq(guid[3]); + data.WriteByteSeq(guid[0]); + data.WriteByteSeq(guid[5]); + data.WriteByteSeq(guid[7]); + data.WriteByteSeq(guid[1]); + data.WriteByteSeq(guid[4]); + + SendDirectMessage(&data); +} + void Player::UpdateZoneDependentAuras(uint32 newZone) { // Some spells applied at enter into zone (with subzones), aura removed in UpdateAreaDependentAuras that called always at zone->area update diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index d74fd372451..c4f4c109e2b 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -2514,12 +2514,7 @@ class Player : public Unit, public GridObject<Player> void SetClientControl(Unit* target, uint8 allowMove); - void SetMover(Unit* target) - { - m_mover->m_movedPlayer = NULL; - m_mover = target; - m_mover->m_movedPlayer = this; - } + void SetMover(Unit* target); void SetSeer(WorldObject* target) { m_seer = target; } void SetViewpoint(WorldObject* target, bool apply); diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp index 5adaba3f5ec..b3a5c9fac82 100644 --- a/src/server/game/Handlers/MovementHandler.cpp +++ b/src/server/game/Handlers/MovementHandler.cpp @@ -535,14 +535,8 @@ void WorldSession::HandleMoveNotActiveMover(WorldPacket &recvData) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Recvd CMSG_MOVE_NOT_ACTIVE_MOVER"); - uint64 old_mover_guid; - recvData.readPackGUID(old_mover_guid); - MovementInfo mi; ReadMovementInfo(recvData, &mi); - - mi.guid = old_mover_guid; - _player->m_movementInfo = mi; } @@ -558,21 +552,16 @@ void WorldSession::HandleMoveKnockBackAck(WorldPacket& recvData) { sLog->outDebug(LOG_FILTER_NETWORKIO, "CMSG_MOVE_KNOCK_BACK_ACK"); - uint64 guid; - recvData.readPackGUID(guid); - - if (_player->m_mover->GetGUID() != guid) - return; - - recvData.read_skip<uint32>(); // unk - MovementInfo movementInfo; ReadMovementInfo(recvData, &movementInfo); + if (_player->m_mover->GetGUID() != movementInfo.guid) + return; + _player->m_movementInfo = movementInfo; WorldPacket data(SMSG_MOVE_UPDATE_KNOCK_BACK, 66); - data.appendPackGUID(guid); + data.appendPackGUID(movementInfo.guid); _player->BuildMovementPacket(&data); // knockback specific info diff --git a/src/server/game/Handlers/VehicleHandler.cpp b/src/server/game/Handlers/VehicleHandler.cpp index b9603cc7822..6c1a7607e46 100644 --- a/src/server/game/Handlers/VehicleHandler.cpp +++ b/src/server/game/Handlers/VehicleHandler.cpp @@ -35,12 +35,7 @@ void WorldSession::HandleDismissControlledVehicle(WorldPacket &recvData) return; } - uint64 guid; - - recvData.readPackGUID(guid); - MovementInfo mi; - mi.guid = guid; ReadMovementInfo(recvData, &mi); _player->m_movementInfo = mi; diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 0d7f82fa0b1..79c566e08a5 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -994,7 +994,7 @@ void OpcodeTable::Initialize() DEFINE_OPCODE_HANDLER(SMSG_MOVE_LAND_WALK, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_MOVE_NORMAL_FALL, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_MOVE_ROOT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); - DEFINE_OPCODE_HANDLER(SMSG_MOVE_SET_ACTIVE_MOVER, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); + DEFINE_OPCODE_HANDLER(SMSG_MOVE_SET_ACTIVE_MOVER, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_MOVE_SET_CAN_FLY, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_MOVE_SET_CAN_TRANSITION_BETWEEN_SWIM_AND_FLY, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_MOVE_SET_COLLISION_HEIGHT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); |