aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/DataStores/DB2Structure.h2
-rw-r--r--src/server/game/Entities/Unit/Unit.h1
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.cpp27
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp6
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()))