aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp1
-rw-r--r--src/server/game/Entities/Unit/Unit.h2
-rw-r--r--src/server/game/Spells/Auras/SpellAuraDefines.h2
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.cpp19
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.h1
-rw-r--r--src/server/scripts/Spells/spell_paladin.cpp19
6 files changed, 40 insertions, 4 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index fd749e40970..6fc02b4f74d 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -7471,6 +7471,7 @@ float Unit::GetPPMProcChance(uint32 WeaponSpeed, float PPM, SpellInfo const* spe
void Unit::Mount(uint32 mount, uint32 VehicleId, uint32 creatureEntry)
{
+ RemoveAurasByType(SPELL_AURA_COSMETIC_MOUNTED);
if (mount)
SetMountDisplayId(mount);
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index d85c51d5ee4..67746b97bc9 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -985,6 +985,8 @@ class TC_GAME_API Unit : public WorldObject
bool IsMounted() const { return HasUnitFlag(UNIT_FLAG_MOUNT); }
uint32 GetMountDisplayId() const { return m_unitData->MountDisplayID; }
void SetMountDisplayId(uint32 mountDisplayId) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::MountDisplayID), mountDisplayId); }
+ uint32 GetCosmeticMountDisplayId() const { return m_unitData->CosmeticMountDisplayID; }
+ void SetCosmeticMountDisplayId(uint32 mountDisplayId) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::CosmeticMountDisplayID), mountDisplayId); }
void Mount(uint32 mount, uint32 vehicleId = 0, uint32 creatureEntry = 0);
void Dismount();
MountCapabilityEntry const* GetMountCapability(uint32 mountType) const;
diff --git a/src/server/game/Spells/Auras/SpellAuraDefines.h b/src/server/game/Spells/Auras/SpellAuraDefines.h
index 60b7475c978..db2ff536a49 100644
--- a/src/server/game/Spells/Auras/SpellAuraDefines.h
+++ b/src/server/game/Spells/Auras/SpellAuraDefines.h
@@ -572,7 +572,7 @@ enum AuraType : uint32
SPELL_AURA_ALLOW_INTERRUPT_SPELL = 484, // NYI
SPELL_AURA_MOD_MOVEMENT_FORCE_MAGNITUDE = 485,
SPELL_AURA_486 = 486,
- SPELL_AURA_487 = 487,
+ SPELL_AURA_COSMETIC_MOUNTED = 487,
SPELL_AURA_488 = 488,
SPELL_AURA_MOD_ALTERNATIVE_DEFAULT_LANGUAGE = 489,
SPELL_AURA_490 = 490,
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
index 056ee76a5d8..e52cd9b5181 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
@@ -555,7 +555,7 @@ NonDefaultConstructible<pAuraEffectHandler> AuraEffectHandler[TOTAL_AURAS]=
&AuraEffect::HandleNULL, //484 SPELL_AURA_ALLOW_INTERRUPT_SPELL
&AuraEffect::HandleModMovementForceMagnitude, //485 SPELL_AURA_MOD_MOVEMENT_FORCE_MAGNITUDE
&AuraEffect::HandleNULL, //486
- &AuraEffect::HandleNULL, //487
+ &AuraEffect::HandleCosmeticMounted, //487 SPELL_AURA_COSMETIC_MOUNTED
&AuraEffect::HandleNULL, //488
&AuraEffect::HandleNULL, //489 SPELL_AURA_MOD_ALTERNATIVE_DEFAULT_LANGUAGE
&AuraEffect::HandleNULL, //490
@@ -6003,6 +6003,23 @@ void AuraEffect::HandleStoreTeleportReturnPoint(AuraApplication const* aurApp, u
playerTarget->RemoveStoredAuraTeleportLocation(GetSpellInfo()->Id);
}
+void AuraEffect::HandleCosmeticMounted(AuraApplication const* aurApp, uint8 mode, bool apply) const
+{
+ if (!(mode & AURA_EFFECT_HANDLE_REAL))
+ return;
+
+ if (apply)
+ aurApp->GetTarget()->SetCosmeticMountDisplayId(GetMiscValue());
+ else
+ aurApp->GetTarget()->SetCosmeticMountDisplayId(0); // set cosmetic mount to 0, even if multiple auras are active; tested with zandalari racial + divine steed
+
+ Player* playerTarget = aurApp->GetTarget()->ToPlayer();
+ if (!playerTarget)
+ return;
+
+ playerTarget->SendMovementSetCollisionHeight(playerTarget->GetCollisionHeight(), WorldPackets::Movement::UpdateCollisionHeightReason::Force);
+}
+
template TC_GAME_API void AuraEffect::GetTargetList(std::list<Unit*>&) const;
template TC_GAME_API void AuraEffect::GetTargetList(std::deque<Unit*>&) const;
template TC_GAME_API void AuraEffect::GetTargetList(std::vector<Unit*>&) const;
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.h b/src/server/game/Spells/Auras/SpellAuraEffects.h
index 2bed9f05d4c..47773ebe139 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.h
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.h
@@ -322,6 +322,7 @@ class TC_GAME_API AuraEffect
void HandleTriggerSpellOnPowerAmount(AuraApplication const* aurApp, uint8 mode, bool apply) const;
void HandleTriggerSpellOnPowerPercent(AuraApplication const* aurApp, uint8 mode, bool apply) const;
void HandleStoreTeleportReturnPoint(AuraApplication const* aurApp, uint8 mode, bool apply) const;
+ void HandleCosmeticMounted(AuraApplication const* aurApp, uint8 mode, bool apply) const;
// aura effect periodic tick handlers
void HandlePeriodicTriggerSpellAuraTick(Unit* target, Unit* caster) const;
diff --git a/src/server/scripts/Spells/spell_paladin.cpp b/src/server/scripts/Spells/spell_paladin.cpp
index 69119d9e3aa..fbcbe3d0db5 100644
--- a/src/server/scripts/Spells/spell_paladin.cpp
+++ b/src/server/scripts/Spells/spell_paladin.cpp
@@ -46,9 +46,12 @@ enum PaladinSpells
SPELL_PALADIN_CONCENTRACTION_AURA = 19746,
SPELL_PALADIN_DIVINE_PURPOSE_PROC = 90174,
SPELL_PALADIN_DIVINE_STEED_HUMAN = 221883,
+ SPELL_PALADIN_DIVINE_STEED_DWARF = 276111,
SPELL_PALADIN_DIVINE_STEED_DRAENEI = 221887,
+ SPELL_PALADIN_DIVINE_STEED_DARK_IRON_DWARF = 276112,
SPELL_PALADIN_DIVINE_STEED_BLOODELF = 221886,
SPELL_PALADIN_DIVINE_STEED_TAUREN = 221885,
+ SPELL_PALADIN_DIVINE_STEED_ZANDALARI_TROLL = 294133,
SPELL_PALADIN_DIVINE_STORM_DAMAGE = 224239,
SPELL_PALADIN_ENDURING_LIGHT = 40471,
SPELL_PALADIN_ENDURING_JUDGEMENT = 40472,
@@ -355,9 +358,12 @@ class spell_pal_divine_steed : public SpellScript
return ValidateSpellInfo(
{
SPELL_PALADIN_DIVINE_STEED_HUMAN,
+ SPELL_PALADIN_DIVINE_STEED_DWARF,
SPELL_PALADIN_DIVINE_STEED_DRAENEI,
+ SPELL_PALADIN_DIVINE_STEED_DARK_IRON_DWARF,
SPELL_PALADIN_DIVINE_STEED_BLOODELF,
- SPELL_PALADIN_DIVINE_STEED_TAUREN
+ SPELL_PALADIN_DIVINE_STEED_TAUREN,
+ SPELL_PALADIN_DIVINE_STEED_ZANDALARI_TROLL
});
}
@@ -369,18 +375,27 @@ class spell_pal_divine_steed : public SpellScript
switch (caster->getRace())
{
case RACE_HUMAN:
- case RACE_DWARF:
spellId = SPELL_PALADIN_DIVINE_STEED_HUMAN;
break;
+ case RACE_DWARF:
+ spellId = SPELL_PALADIN_DIVINE_STEED_DWARF;
+ break;
case RACE_DRAENEI:
+ case RACE_LIGHTFORGED_DRAENEI:
spellId = SPELL_PALADIN_DIVINE_STEED_DRAENEI;
break;
+ case RACE_DARK_IRON_DWARF:
+ spellId = SPELL_PALADIN_DIVINE_STEED_DARK_IRON_DWARF;
+ break;
case RACE_BLOODELF:
spellId = SPELL_PALADIN_DIVINE_STEED_BLOODELF;
break;
case RACE_TAUREN:
spellId = SPELL_PALADIN_DIVINE_STEED_TAUREN;
break;
+ case RACE_ZANDALARI_TROLL:
+ spellId = SPELL_PALADIN_DIVINE_STEED_ZANDALARI_TROLL;
+ break;
default:
break;
}