diff options
| -rw-r--r-- | src/server/game/DataStores/DB2Structure.h | 2 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 1 | ||||
| -rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.cpp | 27 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_generic.cpp | 6 |
4 files changed, 22 insertions, 14 deletions
diff --git a/src/server/game/DataStores/DB2Structure.h b/src/server/game/DataStores/DB2Structure.h index 9148ab9070d..19274a61b06 100644 --- a/src/server/game/DataStores/DB2Structure.h +++ b/src/server/game/DataStores/DB2Structure.h @@ -1882,6 +1882,8 @@ struct MountEntry uint32 ID; uint32 PlayerConditionId; int32 UiModelSceneID; + + bool IsSelfMount() const { return (Flags & MOUNT_FLAG_SELF_MOUNT) != 0; } }; struct MountCapabilityEntry diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index c099161dfe3..ef8fb3d97a9 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -37,6 +37,7 @@ #define WORLD_TRIGGER 12999 #define ARTIFACTS_ALL_WEAPONS_GENERAL_WEAPON_EQUIPPED_PASSIVE 197886 #define SPELL_DH_DOUBLE_JUMP 196055 +#define DISPLAYID_HIDDEN_MOUNT 73200 enum SpellModOp : uint8 { diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 01bf86a3421..971e2b41ffb 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -2543,18 +2543,25 @@ void AuraEffect::HandleAuraMounted(AuraApplication const* aurApp, uint8 mode, bo { if (DB2Manager::MountXDisplayContainer const* mountDisplays = sDB2Manager.GetMountDisplays(mountEntry->ID)) { - DB2Manager::MountXDisplayContainer usableDisplays; - std::copy_if(mountDisplays->begin(), mountDisplays->end(), std::back_inserter(usableDisplays), [target](MountXDisplayEntry const* mountDisplay) + if (mountEntry->IsSelfMount()) { - if (Player* playerTarget = target->ToPlayer()) - if (PlayerConditionEntry const* playerCondition = sPlayerConditionStore.LookupEntry(mountDisplay->PlayerConditionID)) - return sConditionMgr->IsPlayerMeetingCondition(playerTarget, playerCondition); + displayId = DISPLAYID_HIDDEN_MOUNT; + } + else + { + DB2Manager::MountXDisplayContainer usableDisplays; + std::copy_if(mountDisplays->begin(), mountDisplays->end(), std::back_inserter(usableDisplays), [target](MountXDisplayEntry const* mountDisplay) + { + if (Player* playerTarget = target->ToPlayer()) + if (PlayerConditionEntry const* playerCondition = sPlayerConditionStore.LookupEntry(mountDisplay->PlayerConditionID)) + return sConditionMgr->IsPlayerMeetingCondition(playerTarget, playerCondition); - return true; - }); + return true; + }); - if (!usableDisplays.empty()) - displayId = Trinity::Containers::SelectRandomContainerElement(usableDisplays)->DisplayID; + if (!usableDisplays.empty()) + displayId = Trinity::Containers::SelectRandomContainerElement(usableDisplays)->DisplayID; + } } // TODO: CREATE TABLE mount_vehicle (mountId, vehicleCreatureId) for future mounts that are vehicles (new mounts no longer have proper data in MiscValue) //if (MountVehicle const* mountVehicle = sObjectMgr->GetMountVehicle(mountEntry->Id)) @@ -2565,7 +2572,7 @@ void AuraEffect::HandleAuraMounted(AuraApplication const* aurApp, uint8 mode, bo { vehicleId = creatureInfo->VehicleId; - if (!displayId || vehicleId) + if (!displayId) { displayId = ObjectMgr::ChooseDisplayId(creatureInfo); sObjectMgr->GetCreatureModelRandomGender(&displayId); diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index 9aae5a665fb..c046c97d023 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -2892,10 +2892,8 @@ class spell_gen_replenishment : public SpellScriptLoader } }; - enum RunningWildMountIds { - RUNNING_WILD_MODEL = 73200, SPELL_ALTERED_FORM = 97709 }; @@ -2910,7 +2908,7 @@ class spell_gen_running_wild : public SpellScriptLoader bool Validate(SpellInfo const* /*spell*/) override { - if (!sCreatureDisplayInfoStore.LookupEntry(RUNNING_WILD_MODEL)) + if (!sCreatureDisplayInfoStore.LookupEntry(DISPLAYID_HIDDEN_MOUNT)) return false; return true; } @@ -2920,7 +2918,7 @@ class spell_gen_running_wild : public SpellScriptLoader Unit* target = GetTarget(); PreventDefaultAction(); - target->Mount(RUNNING_WILD_MODEL, 0, 0); + target->Mount(DISPLAYID_HIDDEN_MOUNT, 0, 0); // cast speed aura if (MountCapabilityEntry const* mountCapability = sMountCapabilityStore.LookupEntry(aurEff->GetAmount())) |
