diff options
author | ModoX <moardox@gmail.com> | 2021-10-02 21:59:22 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-02 21:59:22 +0200 |
commit | a0c4a3071cebf3d755a9bdb8e07d93b17f354db3 (patch) | |
tree | 172b02cc06bb6c73b40ba40daa5dfaa421796f24 /src | |
parent | d54edfeb8bd9e525bac62677b8f9dffbaa5124c3 (diff) |
Core/Auras: Implemented new aura type 487 (SPELL_AURA_COSMETIC_MOUNTED) (#26988)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 1 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 2 | ||||
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuraDefines.h | 2 | ||||
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.cpp | 19 | ||||
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.h | 1 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_paladin.cpp | 19 |
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; } |