mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-03-23 07:40:14 +00:00
Fix mount sounds, grey WMO meshes, taxi landing, tree animations, and classic dismount
- Per-family mount sounds (kodo, tallstrider, mechanostrider, etc.) detected from M2 model path - Skip WMO groups with SHOW_SKYBOX flag or all-untextured batches (grey mesh in Orgrimmar) - Freeze physics during taxi landing until terrain loads to prevent falling through void - Disable bone animations on tropical vegetation (palm, bamboo, banana, etc.) to fix wiggling - Snap player to final taxi waypoint on flight completion - Extract mount aura spell ID from classic UNIT_FIELD_AURAS for CMSG_CANCEL_AURA dismount - Increase /unstuck forward nudge to 5 units
This commit is contained in:
parent
bf31da8c13
commit
d27387d744
13 changed files with 525 additions and 217 deletions
|
|
@ -3280,6 +3280,18 @@ void GameHandler::handleUpdateObject(network::Packet& packet) {
|
|||
mountAuraSpellId_ = a.spellId;
|
||||
}
|
||||
}
|
||||
// Classic/vanilla fallback: scan UNIT_FIELD_AURAS from same update block
|
||||
if (mountAuraSpellId_ == 0) {
|
||||
const uint16_t ufAuras = fieldIndex(UF::UNIT_FIELD_AURAS);
|
||||
if (ufAuras != 0xFFFF) {
|
||||
for (const auto& [fk, fv] : block.fields) {
|
||||
if (fk >= ufAuras && fk < ufAuras + 48 && fv != 0) {
|
||||
mountAuraSpellId_ = fv;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
LOG_INFO("Mount detected: displayId=", val, " auraSpellId=", mountAuraSpellId_);
|
||||
}
|
||||
if (old != 0 && val == 0) {
|
||||
|
|
@ -3670,6 +3682,18 @@ void GameHandler::handleUpdateObject(network::Packet& packet) {
|
|||
mountAuraSpellId_ = a.spellId;
|
||||
}
|
||||
}
|
||||
// Classic/vanilla fallback: scan UNIT_FIELD_AURAS from same update block
|
||||
if (mountAuraSpellId_ == 0) {
|
||||
const uint16_t ufAuras = fieldIndex(UF::UNIT_FIELD_AURAS);
|
||||
if (ufAuras != 0xFFFF) {
|
||||
for (const auto& [fk, fv] : block.fields) {
|
||||
if (fk >= ufAuras && fk < ufAuras + 48 && fv != 0) {
|
||||
mountAuraSpellId_ = fv;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
LOG_INFO("Mount detected (values update): displayId=", val, " auraSpellId=", mountAuraSpellId_);
|
||||
}
|
||||
if (old != 0 && val == 0) {
|
||||
|
|
@ -8594,6 +8618,21 @@ void GameHandler::updateClientTaxi(float deltaTime) {
|
|||
auto playerEntity = entityManager.getEntity(playerGuid);
|
||||
|
||||
auto finishTaxiFlight = [&]() {
|
||||
// Snap player to the last waypoint (landing position) before clearing state.
|
||||
// Without this, the player would be left at whatever mid-flight position
|
||||
// they were at when the path completion was detected.
|
||||
if (!taxiClientPath_.empty()) {
|
||||
const auto& landingPos = taxiClientPath_.back();
|
||||
if (playerEntity) {
|
||||
playerEntity->setPosition(landingPos.x, landingPos.y, landingPos.z,
|
||||
movementInfo.orientation);
|
||||
}
|
||||
movementInfo.x = landingPos.x;
|
||||
movementInfo.y = landingPos.y;
|
||||
movementInfo.z = landingPos.z;
|
||||
LOG_INFO("Taxi landing: snapped to final waypoint (",
|
||||
landingPos.x, ", ", landingPos.y, ", ", landingPos.z, ")");
|
||||
}
|
||||
taxiClientActive_ = false;
|
||||
onTaxiFlight_ = false;
|
||||
taxiLandingCooldown_ = 2.0f; // 2 second cooldown to prevent re-entering
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue