diff options
author | Shauren <shauren.trinity@gmail.com> | 2024-10-07 16:08:13 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2024-10-07 16:08:13 +0200 |
commit | 43c7965d6b97a919ddd7e97a1f6e3f5750553f09 (patch) | |
tree | 0d32a61c3b2a79766e8885a0c957b21bff30080e /src | |
parent | 9c6a5947de5e27755ec81f530882d6d1171fb97b (diff) |
Core/Movement: Store adv flying speeds instead of hardcoding them in SMSG_UPDATE_OBJECT and enable packets modifying them
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Object/Object.cpp | 34 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 117 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 9 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/UnitDefines.h | 23 | ||||
-rw-r--r-- | src/server/game/Handlers/MovementHandler.cpp | 10 | ||||
-rw-r--r-- | src/server/game/Server/Packets/MovementPackets.cpp | 24 | ||||
-rw-r--r-- | src/server/game/Server/Packets/MovementPackets.h | 37 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 52 | ||||
-rw-r--r-- | src/server/game/Server/WorldSession.h | 3 |
9 files changed, 266 insertions, 43 deletions
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 069db552f3f..1cc56f3969f 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -372,23 +372,23 @@ void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags, Playe *data << float(1.0f); // MovementForcesModMagnitude } - *data << float(2.0f); // advFlyingAirFriction - *data << float(65.0f); // advFlyingMaxVel - *data << float(1.0f); // advFlyingLiftCoefficient - *data << float(3.0f); // advFlyingDoubleJumpVelMod - *data << float(10.0f); // advFlyingGlideStartMinHeight - *data << float(100.0f); // advFlyingAddImpulseMaxSpeed - *data << float(90.0f); // advFlyingMinBankingRate - *data << float(140.0f); // advFlyingMaxBankingRate - *data << float(180.0f); // advFlyingMinPitchingRateDown - *data << float(360.0f); // advFlyingMaxPitchingRateDown - *data << float(90.0f); // advFlyingMinPitchingRateUp - *data << float(270.0f); // advFlyingMaxPitchingRateUp - *data << float(30.0f); // advFlyingMinTurnVelocityThreshold - *data << float(80.0f); // advFlyingMaxTurnVelocityThreshold - *data << float(2.75f); // advFlyingSurfaceFriction - *data << float(7.0f); // advFlyingOverMaxDeceleration - *data << float(0.4f); // advFlyingLaunchSpeedCoefficient + *data << float(unit->GetAdvFlyingSpeed(ADV_FLYING_AIR_FRICTION)); + *data << float(unit->GetAdvFlyingSpeed(ADV_FLYING_MAX_VEL)); + *data << float(unit->GetAdvFlyingSpeed(ADV_FLYING_LIFT_COEFFICIENT)); + *data << float(unit->GetAdvFlyingSpeed(ADV_FLYING_DOUBLE_JUMP_VEL_MOD)); + *data << float(unit->GetAdvFlyingSpeed(ADV_FLYING_GLIDE_START_MIN_HEIGHT)); + *data << float(unit->GetAdvFlyingSpeed(ADV_FLYING_ADD_IMPULSE_MAX_SPEED)); + *data << float(unit->GetAdvFlyingSpeedMin(ADV_FLYING_BANKING_RATE)); + *data << float(unit->GetAdvFlyingSpeedMax(ADV_FLYING_BANKING_RATE)); + *data << float(unit->GetAdvFlyingSpeedMin(ADV_FLYING_PITCHING_RATE_DOWN)); + *data << float(unit->GetAdvFlyingSpeedMax(ADV_FLYING_PITCHING_RATE_DOWN)); + *data << float(unit->GetAdvFlyingSpeedMin(ADV_FLYING_PITCHING_RATE_UP)); + *data << float(unit->GetAdvFlyingSpeedMax(ADV_FLYING_PITCHING_RATE_UP)); + *data << float(unit->GetAdvFlyingSpeedMin(ADV_FLYING_TURN_VELOCITY_THRESHOLD)); + *data << float(unit->GetAdvFlyingSpeedMax(ADV_FLYING_TURN_VELOCITY_THRESHOLD)); + *data << float(unit->GetAdvFlyingSpeed(ADV_FLYING_SURFACE_FRICTION)); + *data << float(unit->GetAdvFlyingSpeed(ADV_FLYING_OVER_MAX_DECELERATION)); + *data << float(unit->GetAdvFlyingSpeed(ADV_FLYING_LAUNCH_SPEED_COEFFICIENT)); data->WriteBit(HasSpline); data->FlushBits(); diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 1d003ecc2b1..965568f819f 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -365,6 +365,7 @@ Unit::Unit(bool isWorldObject) : m_baseSpellCritChance = 5.0f; m_speed_rate.fill(1.0f); + SetFlightCapabilityID(0, false); // remove aurastates allowing special moves m_reactiveTimer = { }; @@ -8738,6 +8739,122 @@ void Unit::SetSpeedRate(UnitMoveType mtype, float rate) } } +void Unit::SetFlightCapabilityID(int32 flightCapabilityId, bool clientUpdate) +{ + if (flightCapabilityId && !sFlightCapabilityStore.HasRecord(flightCapabilityId)) + return; + + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::FlightCapabilityID), flightCapabilityId); + + UpdateAdvFlyingSpeed(ADV_FLYING_AIR_FRICTION, clientUpdate); + UpdateAdvFlyingSpeed(ADV_FLYING_MAX_VEL, clientUpdate); + UpdateAdvFlyingSpeed(ADV_FLYING_LIFT_COEFFICIENT, clientUpdate); + UpdateAdvFlyingSpeed(ADV_FLYING_DOUBLE_JUMP_VEL_MOD, clientUpdate); + UpdateAdvFlyingSpeed(ADV_FLYING_GLIDE_START_MIN_HEIGHT, clientUpdate); + UpdateAdvFlyingSpeed(ADV_FLYING_ADD_IMPULSE_MAX_SPEED, clientUpdate); + UpdateAdvFlyingSpeed(ADV_FLYING_BANKING_RATE, clientUpdate); + UpdateAdvFlyingSpeed(ADV_FLYING_PITCHING_RATE_DOWN, clientUpdate); + UpdateAdvFlyingSpeed(ADV_FLYING_PITCHING_RATE_UP, clientUpdate); + UpdateAdvFlyingSpeed(ADV_FLYING_TURN_VELOCITY_THRESHOLD, clientUpdate); + UpdateAdvFlyingSpeed(ADV_FLYING_SURFACE_FRICTION, clientUpdate); + UpdateAdvFlyingSpeed(ADV_FLYING_OVER_MAX_DECELERATION, clientUpdate); + UpdateAdvFlyingSpeed(ADV_FLYING_LAUNCH_SPEED_COEFFICIENT, clientUpdate); +} + +void Unit::UpdateAdvFlyingSpeed(AdvFlyingRateTypeSingle speedType, bool clientUpdate) +{ + FlightCapabilityEntry const* flightCapabilityEntry = sFlightCapabilityStore.LookupEntry(GetFlightCapabilityID()); + if (!flightCapabilityEntry) + flightCapabilityEntry = sFlightCapabilityStore.AssertEntry(1); + + auto [opcode, newValue] = [&] + { + switch (speedType) + { + case ADV_FLYING_AIR_FRICTION: + return std::pair(SMSG_MOVE_SET_ADV_FLYING_AIR_FRICTION, flightCapabilityEntry->AirFriction); + case ADV_FLYING_MAX_VEL: + return std::pair(SMSG_MOVE_SET_ADV_FLYING_MAX_VEL, flightCapabilityEntry->MaxVel); + case ADV_FLYING_LIFT_COEFFICIENT: + return std::pair(SMSG_MOVE_SET_ADV_FLYING_LIFT_COEFFICIENT, flightCapabilityEntry->LiftCoefficient); + case ADV_FLYING_DOUBLE_JUMP_VEL_MOD: + return std::pair(SMSG_MOVE_SET_ADV_FLYING_DOUBLE_JUMP_VEL_MOD, flightCapabilityEntry->DoubleJumpVelMod); + case ADV_FLYING_GLIDE_START_MIN_HEIGHT: + return std::pair(SMSG_MOVE_SET_ADV_FLYING_GLIDE_START_MIN_HEIGHT, flightCapabilityEntry->GlideStartMinHeight); + case ADV_FLYING_ADD_IMPULSE_MAX_SPEED: + return std::pair(SMSG_MOVE_SET_ADV_FLYING_ADD_IMPULSE_MAX_SPEED, flightCapabilityEntry->AddImpulseMaxSpeed); + case ADV_FLYING_SURFACE_FRICTION: + return std::pair(SMSG_MOVE_SET_ADV_FLYING_SURFACE_FRICTION, flightCapabilityEntry->SurfaceFriction); + case ADV_FLYING_OVER_MAX_DECELERATION: + return std::pair(SMSG_MOVE_SET_ADV_FLYING_OVER_MAX_DECELERATION, flightCapabilityEntry->OverMaxDeceleration); + case ADV_FLYING_LAUNCH_SPEED_COEFFICIENT: + return std::pair(SMSG_MOVE_SET_ADV_FLYING_LAUNCH_SPEED_COEFFICIENT, flightCapabilityEntry->LaunchSpeedCoefficient); + default: + return std::pair<OpcodeServer, float>(); + } + }(); + + if (m_advFlyingSpeed[speedType] == newValue) + return; + + m_advFlyingSpeed[speedType] = newValue; + + if (!clientUpdate) + return; + + if (Player* playerMover = Unit::ToPlayer(GetUnitBeingMoved())) + { + WorldPackets::Movement::SetAdvFlyingSpeed selfpacket(opcode); + selfpacket.MoverGUID = GetGUID(); + selfpacket.SequenceIndex = m_movementCounter++; + selfpacket.Speed = newValue; + playerMover->GetSession()->SendPacket(selfpacket.Write()); + } +} + +void Unit::UpdateAdvFlyingSpeed(AdvFlyingRateTypeRange speedType, bool clientUpdate) +{ + FlightCapabilityEntry const* flightCapabilityEntry = sFlightCapabilityStore.LookupEntry(GetFlightCapabilityID()); + if (!flightCapabilityEntry) + flightCapabilityEntry = sFlightCapabilityStore.AssertEntry(1); + + auto [opcode, min, max] = [&] + { + switch (speedType) + { + case ADV_FLYING_BANKING_RATE: + return std::tuple(SMSG_MOVE_SET_ADV_FLYING_BANKING_RATE, flightCapabilityEntry->BankingRateMin, flightCapabilityEntry->BankingRateMax); + case ADV_FLYING_PITCHING_RATE_DOWN: + return std::tuple(SMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_DOWN, flightCapabilityEntry->PitchingRateDownMin, flightCapabilityEntry->PitchingRateDownMax); + case ADV_FLYING_PITCHING_RATE_UP: + return std::tuple(SMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_UP, flightCapabilityEntry->PitchingRateUpMin, flightCapabilityEntry->PitchingRateUpMax); + case ADV_FLYING_TURN_VELOCITY_THRESHOLD: + return std::tuple(SMSG_MOVE_SET_ADV_FLYING_TURN_VELOCITY_THRESHOLD, flightCapabilityEntry->TurnVelocityThresholdMin, flightCapabilityEntry->TurnVelocityThresholdMax); + default: + return std::tuple<OpcodeServer, float, float>(); + } + }(); + + if (m_advFlyingSpeed[speedType] == min && m_advFlyingSpeed[speedType + 1] == max) + return; + + m_advFlyingSpeed[speedType] = min; + m_advFlyingSpeed[speedType + 1] = max; + + if (!clientUpdate) + return; + + if (Player* playerMover = Unit::ToPlayer(GetUnitBeingMoved())) + { + WorldPackets::Movement::SetAdvFlyingSpeedRange selfpacket(opcode); + selfpacket.MoverGUID = GetGUID(); + selfpacket.SequenceIndex = m_movementCounter++; + selfpacket.SpeedMin = min; + selfpacket.SpeedMax = max; + playerMover->GetSession()->SendPacket(selfpacket.Write()); + } +} + void Unit::RemoveAllFollowers() { while (!m_followingMe.empty()) diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index ba418567d3f..03564f43315 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1662,6 +1662,14 @@ class TC_GAME_API Unit : public WorldObject void SetSpeed(UnitMoveType mtype, float newValue); void SetSpeedRate(UnitMoveType mtype, float rate); + int32 GetFlightCapabilityID() const { return m_unitData->FlightCapabilityID; } + void SetFlightCapabilityID(int32 flightCapabilityId, bool clientUpdate); + float GetAdvFlyingSpeed(AdvFlyingRateTypeSingle speedType) const { return m_advFlyingSpeed[speedType]; } + float GetAdvFlyingSpeedMin(AdvFlyingRateTypeRange speedType) const { return m_advFlyingSpeed[speedType]; } + float GetAdvFlyingSpeedMax(AdvFlyingRateTypeRange speedType) const { return m_advFlyingSpeed[speedType + 1]; } + void UpdateAdvFlyingSpeed(AdvFlyingRateTypeSingle speedType, bool clientUpdate); + void UpdateAdvFlyingSpeed(AdvFlyingRateTypeRange speedType, bool clientUpdate); + void FollowerAdded(AbstractFollower* f) { m_followingMe.insert(f); } void FollowerRemoved(AbstractFollower* f) { m_followingMe.erase(f); } void RemoveAllFollowers(); @@ -1911,6 +1919,7 @@ class TC_GAME_API Unit : public WorldObject Trinity::Containers::FlatSet<AuraApplication*, VisibleAuraSlotCompare> m_visibleAurasToUpdate; std::array<float, MAX_MOVE_TYPE> m_speed_rate; + std::array<float, ADV_FLYING_MAX_SPEED_TYPE> m_advFlyingSpeed; Unit* m_unitMovedByMe; // only ever set for players, and only for direct client control Player* m_playerMovingMe; // only set for direct client control (possess effects, vehicles and similar) diff --git a/src/server/game/Entities/Unit/UnitDefines.h b/src/server/game/Entities/Unit/UnitDefines.h index 2225e0f14a7..0c2c314e167 100644 --- a/src/server/game/Entities/Unit/UnitDefines.h +++ b/src/server/game/Entities/Unit/UnitDefines.h @@ -127,6 +127,29 @@ enum UnitMoveType : uint8 #define MAX_MOVE_TYPE 9 +enum AdvFlyingRateTypeSingle : uint8 +{ + ADV_FLYING_AIR_FRICTION = 0, + ADV_FLYING_MAX_VEL = 1, + ADV_FLYING_LIFT_COEFFICIENT = 2, + ADV_FLYING_DOUBLE_JUMP_VEL_MOD = 3, + ADV_FLYING_GLIDE_START_MIN_HEIGHT = 4, + ADV_FLYING_ADD_IMPULSE_MAX_SPEED = 5, + ADV_FLYING_SURFACE_FRICTION = 14, + ADV_FLYING_OVER_MAX_DECELERATION = 15, + ADV_FLYING_LAUNCH_SPEED_COEFFICIENT = 16 +}; + +enum AdvFlyingRateTypeRange : uint8 +{ + ADV_FLYING_BANKING_RATE = 6, + ADV_FLYING_PITCHING_RATE_DOWN = 8, + ADV_FLYING_PITCHING_RATE_UP = 10, + ADV_FLYING_TURN_VELOCITY_THRESHOLD = 12 +}; + +#define ADV_FLYING_MAX_SPEED_TYPE 17 + enum DamageEffectType : uint8 { DIRECT_DAMAGE = 0, // used for normal weapon damage (not for class abilities or spells) diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp index 49878841752..15fd14491a2 100644 --- a/src/server/game/Handlers/MovementHandler.cpp +++ b/src/server/game/Handlers/MovementHandler.cpp @@ -584,6 +584,16 @@ void WorldSession::HandleForceSpeedChangeAck(WorldPackets::Movement::MovementSpe } } +void WorldSession::HandleSetAdvFlyingSpeedAck(WorldPackets::Movement::MovementSpeedAck& speedAck) +{ + GetPlayer()->ValidateMovementInfo(&speedAck.Ack.Status); +} + +void WorldSession::HandleSetAdvFlyingSpeedRangeAck(WorldPackets::Movement::MovementSpeedRangeAck& speedRangeAck) +{ + GetPlayer()->ValidateMovementInfo(&speedRangeAck.Ack.Status); +} + void WorldSession::HandleSetActiveMoverOpcode(WorldPackets::Movement::SetActiveMover& packet) { if (GetPlayer()->IsInWorld()) diff --git a/src/server/game/Server/Packets/MovementPackets.cpp b/src/server/game/Server/Packets/MovementPackets.cpp index 242a0c0594b..b28ce65e032 100644 --- a/src/server/game/Server/Packets/MovementPackets.cpp +++ b/src/server/game/Server/Packets/MovementPackets.cpp @@ -626,6 +626,23 @@ WorldPacket const* WorldPackets::Movement::MoveUpdateSpeed::Write() return &_worldPacket; } +WorldPacket const* WorldPackets::Movement::SetAdvFlyingSpeed::Write() +{ + _worldPacket << MoverGUID; + _worldPacket << uint32(SequenceIndex); + _worldPacket << float(Speed); + return &_worldPacket; +} + +WorldPacket const* WorldPackets::Movement::SetAdvFlyingSpeedRange::Write() +{ + _worldPacket << MoverGUID; + _worldPacket << uint32(SequenceIndex); + _worldPacket << float(SpeedMin); + _worldPacket << float(SpeedMax); + return &_worldPacket; +} + WorldPacket const* WorldPackets::Movement::MoveSplineSetFlag::Write() { _worldPacket << MoverGUID; @@ -815,6 +832,13 @@ void WorldPackets::Movement::MovementSpeedAck::Read() _worldPacket >> Speed; } +void WorldPackets::Movement::MovementSpeedRangeAck::Read() +{ + _worldPacket >> Ack; + _worldPacket >> SpeedMin; + _worldPacket >> SpeedMax; +} + void WorldPackets::Movement::SetActiveMover::Read() { _worldPacket >> ActiveMover; diff --git a/src/server/game/Server/Packets/MovementPackets.h b/src/server/game/Server/Packets/MovementPackets.h index ed05e244c19..48c5c2aab38 100644 --- a/src/server/game/Server/Packets/MovementPackets.h +++ b/src/server/game/Server/Packets/MovementPackets.h @@ -212,6 +212,31 @@ namespace WorldPackets float Speed = 1.0f; }; + class SetAdvFlyingSpeed final : public ServerPacket + { + public: + explicit SetAdvFlyingSpeed(OpcodeServer opcode) : ServerPacket(opcode, 16 + 4 + 4) { } + + WorldPacket const* Write() override; + + ObjectGuid MoverGUID; + uint32 SequenceIndex = 0; + float Speed = 1.0f; + }; + + class SetAdvFlyingSpeedRange final : public ServerPacket + { + public: + explicit SetAdvFlyingSpeedRange(OpcodeServer opcode) : ServerPacket(opcode, 16 + 4 + 4 + 4) { } + + WorldPacket const* Write() override; + + ObjectGuid MoverGUID; + uint32 SequenceIndex = 0; + float SpeedMin = 1.0f; + float SpeedMax = 1.0f; + }; + class MoveSplineSetFlag final : public ServerPacket { public: @@ -438,6 +463,18 @@ namespace WorldPackets float Speed = 0.0f; }; + class MovementSpeedRangeAck final : public ClientPacket + { + public: + MovementSpeedRangeAck(WorldPacket&& packet) : ClientPacket(std::move(packet)) { } + + void Read() override; + + MovementAck Ack; + float SpeedMin = 1.0f; + float SpeedMax = 1.0f; + }; + class SetActiveMover final : public ClientPacket { public: diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 00a82e02720..a75b439fedb 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -652,19 +652,19 @@ void OpcodeTable::InitializeClientOpcodes() DEFINE_HANDLER(CMSG_MOVE_REMOVE_MOVEMENT_FORCES, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_MOVE_REMOVE_MOVEMENT_FORCE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveRemoveMovementForceAck); DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLY, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes); - DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLYING_ADD_IMPULSE_MAX_SPEED_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); - DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLYING_AIR_FRICTION_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); - DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLYING_BANKING_RATE_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); - DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLYING_DOUBLE_JUMP_VEL_MOD_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); - DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLYING_GLIDE_START_MIN_HEIGHT_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); - DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLYING_LAUNCH_SPEED_COEFFICIENT_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); - DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLYING_LIFT_COEFFICIENT_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); - DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLYING_MAX_VEL_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); - DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLYING_OVER_MAX_DECELERATION_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); - DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_DOWN_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); - DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_UP_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); - DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLYING_SURFACE_FRICTION_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); - DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLYING_TURN_VELOCITY_THRESHOLD_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLYING_ADD_IMPULSE_MAX_SPEED_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleSetAdvFlyingSpeedAck); + DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLYING_AIR_FRICTION_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleSetAdvFlyingSpeedAck); + DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLYING_BANKING_RATE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleSetAdvFlyingSpeedRangeAck); + DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLYING_DOUBLE_JUMP_VEL_MOD_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleSetAdvFlyingSpeedAck); + DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLYING_GLIDE_START_MIN_HEIGHT_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleSetAdvFlyingSpeedAck); + DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLYING_LAUNCH_SPEED_COEFFICIENT_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleSetAdvFlyingSpeedAck); + DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLYING_LIFT_COEFFICIENT_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleSetAdvFlyingSpeedAck); + DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLYING_MAX_VEL_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleSetAdvFlyingSpeedAck); + DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLYING_OVER_MAX_DECELERATION_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleSetAdvFlyingSpeedAck); + DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_DOWN_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleSetAdvFlyingSpeedRangeAck); + DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_UP_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleSetAdvFlyingSpeedRangeAck); + DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLYING_SURFACE_FRICTION_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleSetAdvFlyingSpeedAck); + DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLYING_TURN_VELOCITY_THRESHOLD_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleSetAdvFlyingSpeedRangeAck); DEFINE_HANDLER(CMSG_MOVE_SET_CAN_ADV_FLY_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementAckMessage); DEFINE_HANDLER(CMSG_MOVE_SET_CAN_FLY_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementAckMessage); DEFINE_HANDLER(CMSG_MOVE_SET_CAN_TURN_WHILE_FALLING_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementAckMessage); @@ -1698,19 +1698,19 @@ void OpcodeTable::InitializeServerOpcodes() DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_REMOVE_MOVEMENT_FORCE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_ROOT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_ACTIVE_MOVER, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_ADV_FLYING_ADD_IMPULSE_MAX_SPEED, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_ADV_FLYING_AIR_FRICTION, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_ADV_FLYING_BANKING_RATE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_ADV_FLYING_DOUBLE_JUMP_VEL_MOD, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_ADV_FLYING_GLIDE_START_MIN_HEIGHT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_ADV_FLYING_LAUNCH_SPEED_COEFFICIENT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_ADV_FLYING_LIFT_COEFFICIENT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_ADV_FLYING_MAX_VEL, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_ADV_FLYING_OVER_MAX_DECELERATION, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_DOWN, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_UP, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_ADV_FLYING_SURFACE_FRICTION, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_ADV_FLYING_TURN_VELOCITY_THRESHOLD, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_ADV_FLYING_ADD_IMPULSE_MAX_SPEED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_ADV_FLYING_AIR_FRICTION, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_ADV_FLYING_BANKING_RATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_ADV_FLYING_DOUBLE_JUMP_VEL_MOD, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_ADV_FLYING_GLIDE_START_MIN_HEIGHT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_ADV_FLYING_LAUNCH_SPEED_COEFFICIENT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_ADV_FLYING_LIFT_COEFFICIENT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_ADV_FLYING_MAX_VEL, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_ADV_FLYING_OVER_MAX_DECELERATION, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_DOWN, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_UP, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_ADV_FLYING_SURFACE_FRICTION, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_ADV_FLYING_TURN_VELOCITY_THRESHOLD, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_CANT_SWIM, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_CAN_ADV_FLY, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_CAN_FLY, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 1c3052a3f8a..6d9534fa625 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -543,6 +543,7 @@ namespace WorldPackets class MoveTeleportAck; class MovementAckMessage; class MovementSpeedAck; + class MovementSpeedRangeAck; class MoveKnockBackAck; class SetActiveMover; class MoveSetCollisionHeightAck; @@ -1259,6 +1260,8 @@ class TC_GAME_API WorldSession void HandleMoveTeleportAck(WorldPackets::Movement::MoveTeleportAck& packet); void HandleForceSpeedChangeAck(WorldPackets::Movement::MovementSpeedAck& packet); + void HandleSetAdvFlyingSpeedAck(WorldPackets::Movement::MovementSpeedAck& speedAck); + void HandleSetAdvFlyingSpeedRangeAck(WorldPackets::Movement::MovementSpeedRangeAck& speedRangeAck); void HandleSetCollisionHeightAck(WorldPackets::Movement::MoveSetCollisionHeightAck& setCollisionHeightAck); // Movement forces |