Core/Auras: Implemented new aura type 487 (SPELL_AURA_COSMETIC_MOUNTED) (#26988)

This commit is contained in:
ModoX
2021-10-02 21:59:22 +02:00
committed by GitHub
parent d54edfeb8b
commit a0c4a3071c
6 changed files with 40 additions and 4 deletions

View File

@@ -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);

View File

@@ -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;

View File

@@ -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,

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;
}