Core/Unit: fix nasty, ugly, silly, idiotic SPIN bug with advFlying

- who knew that looking at DB2 files you could still miss important info - db2 holds degrees but they need converted to radians
- restore cvars to their default values
This commit is contained in:
stevebone
2026-09-28 23:02:36 +02:00
parent 2918713090
commit d67bc73766
2 changed files with 11 additions and 7 deletions
+5 -3
View File
@@ -9350,16 +9350,18 @@ void Unit::UpdateAdvFlyingSpeed(AdvFlyingRateTypeRange speedType, bool clientUpd
if (!flightCapabilityEntry)
flightCapabilityEntry = sFlightCapabilityStore.AssertEntry(1);
// FlightCapability.db2 stores banking/pitching rates in degrees, but the client expects
// radians on the wire (retail sniffs: 1.5708 = 90deg, 2.4435 = 140deg, 6.2832 = 360deg).
auto [opcode, min, max, rateAura] = [&]
{
switch (speedType)
{
case ADV_FLYING_BANKING_RATE:
return std::tuple(SMSG_MOVE_SET_ADV_FLYING_BANKING_RATE, flightCapabilityEntry->BankingRateMin, flightCapabilityEntry->BankingRateMax, SPELL_AURA_MOD_ADV_FLYING_BANKING_RATE);
return std::tuple(SMSG_MOVE_SET_ADV_FLYING_BANKING_RATE, G3D::toRadians(flightCapabilityEntry->BankingRateMin), G3D::toRadians(flightCapabilityEntry->BankingRateMax), SPELL_AURA_MOD_ADV_FLYING_BANKING_RATE);
case ADV_FLYING_PITCHING_RATE_DOWN:
return std::tuple(SMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_DOWN, flightCapabilityEntry->PitchingRateDownMin, flightCapabilityEntry->PitchingRateDownMax, SPELL_AURA_MOD_ADV_FLYING_PITCHING_RATE_DOWN);
return std::tuple(SMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_DOWN, G3D::toRadians(flightCapabilityEntry->PitchingRateDownMin), G3D::toRadians(flightCapabilityEntry->PitchingRateDownMax), SPELL_AURA_MOD_ADV_FLYING_PITCHING_RATE_DOWN);
case ADV_FLYING_PITCHING_RATE_UP:
return std::tuple(SMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_UP, flightCapabilityEntry->PitchingRateUpMin, flightCapabilityEntry->PitchingRateUpMax, SPELL_AURA_MOD_ADV_FLYING_PITCHING_RATE_UP);
return std::tuple(SMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_UP, G3D::toRadians(flightCapabilityEntry->PitchingRateUpMin), G3D::toRadians(flightCapabilityEntry->PitchingRateUpMax), SPELL_AURA_MOD_ADV_FLYING_PITCHING_RATE_UP);
case ADV_FLYING_TURN_VELOCITY_THRESHOLD:
return std::tuple(SMSG_MOVE_SET_ADV_FLYING_TURN_VELOCITY_THRESHOLD, flightCapabilityEntry->TurnVelocityThresholdMin, flightCapabilityEntry->TurnVelocityThresholdMax, SPELL_AURA_NONE);
default:
+6 -4
View File
@@ -203,10 +203,12 @@ void WorldSession::SendFeatureSystemStatusGlueScreen()
{ "housingEnableMoveHouse"sv, "1"sv },
{ "housingEnableCreateCharterNeighborhood"sv, "0"sv },
{ "housingEnableCreateGuildNeighborhood"sv, "0"sv },
// Advanced flying keyboard turn factors - client defaults (5.0/8.0) multiply the
// banking turn rate and make A/D snap-turn during skyriding; 1.0 is the sane base.
{ "advFlyKeyboardMinTurnFactor"sv, "1"sv },
{ "advFlyKeyboardMaxTurnFactor"sv, "1"sv },
// Advanced flying keyboard factors - retail sends no advFly MirrorVars and uses these
// client defaults; pushed explicitly to undo previously synced non-default values.
{ "advFlyKeyboardMinTurnFactor"sv, "5"sv },
{ "advFlyKeyboardMaxTurnFactor"sv, "8"sv },
{ "advFlyKeyboardMinPitchFactor"sv, "2.5"sv },
{ "advFlyKeyboardMaxPitchFactor"sv, "5"sv },
};
// shop2 endpoint advertisement. The client reaches the modern store over HTTPS at whatever host