From d50611c108a692e0d76c102fdee8175d24d9dfc0 Mon Sep 17 00:00:00 2001 From: Gustavo Date: Thu, 6 Jul 2017 16:32:10 -0300 Subject: Core/Auras: Implement SPELL_AURA_DETECT_AMORE (#19955) Based on https://github.com/mangos/mangos/commit/b58b29c9581327129daaf43b9c368810db850771 (cherry picked from commit a27a3e0457e3f6c2dd6955ce86b51888c5590ffc) --- src/server/game/Spells/Auras/SpellAuraEffects.cpp | 36 ++++++++++++++++++++++- src/server/game/Spells/Auras/SpellAuraEffects.h | 1 + 2 files changed, 36 insertions(+), 1 deletion(-) (limited to 'src/server') diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 6c5c117dcc2..18d68a7f0fe 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -236,7 +236,7 @@ NonDefaultConstructible AuraEffectHandler[TOTAL_AURAS]= &AuraEffect::HandleAuraModRangedAttackPowerPercent, //167 SPELL_AURA_MOD_RANGED_ATTACK_POWER_PCT &AuraEffect::HandleNoImmediateEffect, //168 SPELL_AURA_MOD_DAMAGE_DONE_VERSUS implemented in Unit::SpellDamageBonus, Unit::MeleeDamageBonus &AuraEffect::HandleUnused, //169 Unused (4.3.4) old SPELL_AURA_MOD_CRIT_PERCENT_VERSUS - &AuraEffect::HandleNULL, //170 SPELL_AURA_DETECT_AMORE various spells that change visual of units for aura target (clientside?) + &AuraEffect::HandleDetectAmore, //170 SPELL_AURA_DETECT_AMORE used to detect various spells that change visual of units for aura target &AuraEffect::HandleAuraModIncreaseSpeed, //171 SPELL_AURA_MOD_SPEED_NOT_STACK &AuraEffect::HandleAuraModIncreaseMountedSpeed, //172 SPELL_AURA_MOD_MOUNTED_SPEED_NOT_STACK &AuraEffect::HandleUnused, //173 unused (4.3.4) no spells, old SPELL_AURA_ALLOW_CHAMPION_SPELLS only for Proclaim Champion spell @@ -1582,6 +1582,40 @@ void AuraEffect::HandleModStealthLevel(AuraApplication const* aurApp, uint8 mode target->UpdateObjectVisibility(); } +void AuraEffect::HandleDetectAmore(AuraApplication const* aurApp, uint8 mode, bool apply) const +{ + if (!(mode & AURA_EFFECT_HANDLE_SEND_FOR_CLIENT_MASK)) + return; + + Unit* target = aurApp->GetTarget(); + + if (target->GetTypeId() != TYPEID_PLAYER) + return; + + if (apply) + { + if (Player* playerTarget = target->ToPlayer()) + { + playerTarget->AddAuraVision(PlayerFieldByte2Flags(1 << (GetMiscValue() - 1))); + } + } + else + { + if (target->HasAuraType(SPELL_AURA_DETECT_AMORE)) + { + Unit::AuraEffectList const& amoreAuras = target->GetAuraEffectsByType(SPELL_AURA_DETECT_AMORE); + for (Unit::AuraEffectList::const_iterator i = amoreAuras.begin(); i != amoreAuras.end(); ++i) + { + if (GetMiscValue() == (*i)->GetMiscValue()) + return; + } + } + + if (Player* playerTarget = target->ToPlayer()) + playerTarget->RemoveAuraVision(PlayerFieldByte2Flags(1 << (GetMiscValue() - 1))); + } +} + void AuraEffect::HandleSpiritOfRedemption(AuraApplication const* aurApp, uint8 mode, bool apply) const { if (!(mode & AURA_EFFECT_HANDLE_REAL)) diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.h b/src/server/game/Spells/Auras/SpellAuraEffects.h index 7b74320bdef..a85879111b3 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.h +++ b/src/server/game/Spells/Auras/SpellAuraEffects.h @@ -150,6 +150,7 @@ class TC_GAME_API AuraEffect void HandleModStealth(AuraApplication const* aurApp, uint8 mode, bool apply) const; void HandleModStealthLevel(AuraApplication const* aurApp, uint8 mode, bool apply) const; void HandleModStealthDetect(AuraApplication const* aurApp, uint8 mode, bool apply) const; + void HandleDetectAmore(AuraApplication const* aurApp, uint8 mode, bool apply) const; void HandleSpiritOfRedemption(AuraApplication const* aurApp, uint8 mode, bool apply) const; void HandleAuraGhost(AuraApplication const* aurApp, uint8 mode, bool apply) const; void HandlePhase(AuraApplication const* aurApp, uint8 mode, bool apply) const; -- cgit v1.2.3