From 9a11b59ba873addb39c9817317f80d43797bf3d5 Mon Sep 17 00:00:00 2001 From: Subv Date: Tue, 25 Dec 2012 21:49:48 -0500 Subject: Core/Vehicles: Fixed riding vehicles and mind control auras. Actually, fixed everything that allows you to control another unit. --- src/server/game/Entities/Player/Player.cpp | 30 ++++++++++++++++++++++++++++ src/server/game/Entities/Player/Player.h | 7 +------ src/server/game/Handlers/MovementHandler.cpp | 19 ++++-------------- src/server/game/Handlers/VehicleHandler.cpp | 5 ----- src/server/game/Server/Protocol/Opcodes.cpp | 2 +- 5 files changed, 36 insertions(+), 27 deletions(-) (limited to 'src') 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 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(); // 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 ); -- cgit v1.2.3