aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSubv <s.v.h21@hotmail.com>2012-12-25 21:49:48 -0500
committerSubv <s.v.h21@hotmail.com>2012-12-25 21:50:39 -0500
commit9a11b59ba873addb39c9817317f80d43797bf3d5 (patch)
tree6ecc1d981f070dbc32c2563bb0a55e63043c4fa0 /src
parente65da39f23ed4dfad38585ccf09ddcfc3138bbb7 (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.cpp30
-rw-r--r--src/server/game/Entities/Player/Player.h7
-rw-r--r--src/server/game/Handlers/MovementHandler.cpp19
-rw-r--r--src/server/game/Handlers/VehicleHandler.cpp5
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp2
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 );