aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Player/Player.cpp3
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp34
-rw-r--r--src/server/game/Entities/Unit/Unit.h5
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp4
-rw-r--r--src/server/game/Server/Protocol/Opcodes.h4
5 files changed, 49 insertions, 1 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index d18883fab96..7193c459c2b 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -23561,6 +23561,9 @@ void Player::SendAurasForTarget(Unit* target) const
if (target->HasAuraType(SPELL_AURA_HOVER))
target->SetHover(true, true);
+ if (target->HasAura(SPELL_DH_DOUBLE_JUMP))
+ target->SetDoubleJump(true, true);
+
Unit::VisibleAuraContainer const& visibleAuras = target->GetVisibleAuras();
WorldPackets::Spells::AuraUpdate update;
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 7c71c6de367..089b9c50ab1 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -15689,6 +15689,40 @@ bool Unit::SetCanTransitionBetweenSwimAndFly(bool enable)
return true;
}
+bool Unit::SetDoubleJump(bool enable, bool packetOnly /*= false*/)
+{
+ if (!packetOnly)
+ {
+ if (enable == HasExtraUnitMovementFlag(MOVEMENTFLAG2_DOUBLE_JUMP))
+ return false;
+
+ if (enable)
+ AddExtraUnitMovementFlag(MOVEMENTFLAG2_DOUBLE_JUMP);
+ else
+ RemoveExtraUnitMovementFlag(MOVEMENTFLAG2_DOUBLE_JUMP);
+ }
+
+ static OpcodeServer const doubleJumpOpcodeTable[2] =
+ {
+ SMSG_MOVE_DISABLE_DOUBLE_JUMP,
+ SMSG_MOVE_ENABLE_DOUBLE_JUMP
+ };
+
+ if (Player* playerMover = GetPlayerMover())
+ {
+ WorldPackets::Movement::MoveSetFlag packet(doubleJumpOpcodeTable[enable]);
+ packet.MoverGUID = GetGUID();
+ packet.SequenceIndex = m_movementCounter++;
+ playerMover->SendDirectMessage(packet.Write());
+
+ WorldPackets::Movement::MoveUpdate moveUpdate;
+ moveUpdate.movementInfo = &m_movementInfo;
+ SendMessageToSet(moveUpdate.Write(), playerMover);
+ }
+
+ return true;
+}
+
void Unit::SendSetVehicleRecId(uint32 vehicleId)
{
if (Player* player = ToPlayer())
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index a45fb495086..06ca24c6a65 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -32,6 +32,7 @@
#define WORLD_TRIGGER 12999
#define ARTIFACTS_ALL_WEAPONS_GENERAL_WEAPON_EQUIPPED_PASSIVE 197886
+#define SPELL_DH_DOUBLE_JUMP 196055
enum SpellInterruptFlags
{
@@ -865,7 +866,8 @@ enum MovementFlags2
MOVEMENTFLAG2_UNK12 = 0x00001000,
MOVEMENTFLAG2_INTERPOLATED_MOVEMENT = 0x00002000,
MOVEMENTFLAG2_INTERPOLATED_TURNING = 0x00004000,
- MOVEMENTFLAG2_INTERPOLATED_PITCHING = 0x00008000
+ MOVEMENTFLAG2_INTERPOLATED_PITCHING = 0x00008000,
+ MOVEMENTFLAG2_DOUBLE_JUMP = 0x00010000
};
enum UnitTypeMask
@@ -1696,6 +1698,7 @@ class TC_GAME_API Unit : public WorldObject
bool SetHover(bool enable, bool packetOnly = false);
bool SetCollision(bool disable);
bool SetCanTransitionBetweenSwimAndFly(bool enable);
+ bool SetDoubleJump(bool enable, bool packetOnly = false);
void SendSetVehicleRecId(uint32 vehicleId);
void SetInFront(WorldObject const* target);
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index 650ae9fc2ca..e1812ecb971 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -505,6 +505,8 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_MOVE_CHANGE_VEHICLE_SEATS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMoveChangeVehicleSeats);
DEFINE_HANDLER(CMSG_MOVE_CHARM_TELEPORT_CHEAT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_MOVE_DISMISS_VEHICLE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMoveDismissVehicle);
+ DEFINE_HANDLER(CMSG_MOVE_DOUBLE_JUMP, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes);
+ DEFINE_HANDLER(CMSG_MOVE_ENABLE_DOUBLE_JUMP_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementAckMessage);
DEFINE_HANDLER(CMSG_MOVE_ENABLE_SWIM_TO_FLY_TRANS_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementAckMessage);
DEFINE_HANDLER(CMSG_MOVE_FALL_LAND, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes);
DEFINE_HANDLER(CMSG_MOVE_FALL_RESET, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes);
@@ -1349,9 +1351,11 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOUNT_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_APPLY_MOVEMENT_FORCE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_DISABLE_COLLISION, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_DISABLE_DOUBLE_JUMP, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_DISABLE_GRAVITY, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_DISABLE_TRANSITION_BETWEEN_SWIM_AND_FLY, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_ENABLE_COLLISION, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_ENABLE_DOUBLE_JUMP, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_ENABLE_GRAVITY, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_ENABLE_TRANSITION_BETWEEN_SWIM_AND_FLY, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_KNOCK_BACK, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h
index ad20b33ad34..3784413e39b 100644
--- a/src/server/game/Server/Protocol/Opcodes.h
+++ b/src/server/game/Server/Protocol/Opcodes.h
@@ -420,6 +420,8 @@ enum OpcodeClient : uint32
CMSG_MOVE_CHANGE_VEHICLE_SEATS = 0x3A31,
CMSG_MOVE_CHARM_TELEPORT_CHEAT = 0x39F6,
CMSG_MOVE_DISMISS_VEHICLE = 0x3A30,
+ CMSG_MOVE_DOUBLE_JUMP = 0x39EB,
+ CMSG_MOVE_ENABLE_DOUBLE_JUMP_ACK = 0x3A1B,
CMSG_MOVE_ENABLE_SWIM_TO_FLY_TRANS_ACK = 0x3A21,
CMSG_MOVE_FALL_LAND = 0x39F9,
CMSG_MOVE_FALL_RESET = 0x3A16,
@@ -1257,9 +1259,11 @@ enum OpcodeServer : uint32
SMSG_MOUNT_RESULT = 0x257A,
SMSG_MOVE_APPLY_MOVEMENT_FORCE = 0x2DE1,
SMSG_MOVE_DISABLE_COLLISION = 0x2DDD,
+ SMSG_MOVE_DISABLE_DOUBLE_JUMP = 0x2DCB,
SMSG_MOVE_DISABLE_GRAVITY = 0x2DDB,
SMSG_MOVE_DISABLE_TRANSITION_BETWEEN_SWIM_AND_FLY = 0x2DDA,
SMSG_MOVE_ENABLE_COLLISION = 0x2DDE,
+ SMSG_MOVE_ENABLE_DOUBLE_JUMP = 0x2DCA,
SMSG_MOVE_ENABLE_GRAVITY = 0x2DDC,
SMSG_MOVE_ENABLE_TRANSITION_BETWEEN_SWIM_AND_FLY = 0x2DD9,
SMSG_MOVE_KNOCK_BACK = 0x2DD1,