aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorariel- <ariel-@users.noreply.github.com>2018-02-12 18:34:22 -0300
committerariel- <ariel-@users.noreply.github.com>2018-02-12 18:35:06 -0300
commit404240fb6820ab997b65740b234305c4c654c543 (patch)
tree6317d3cca5c14b08134289207185e3de16517ec9 /src
parent57553ed96a0a191d12ea30eaefffedd37fa51ca1 (diff)
Core/Scripts: remove Tenacity hack, implemented with proper aura
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp4
-rw-r--r--src/server/scripts/Northrend/zone_wintergrasp.cpp31
2 files changed, 29 insertions, 6 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index aa21f7d633c..af1c4f0e04b 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -7904,10 +7904,6 @@ uint32 Unit::SpellHealingBonusTaken(Unit* caster, SpellInfo const* spellProto, u
if (maxval)
AddPct(TakenTotalMod, maxval);
- // Tenacity increase healing % taken
- if (AuraEffect const* Tenacity = GetAuraEffect(58549, 0))
- AddPct(TakenTotalMod, Tenacity->GetAmount());
-
// Nourish cast
if (spellProto->SpellFamilyName == SPELLFAMILY_DRUID && spellProto->SpellFamilyFlags[1] & 0x2000000)
{
diff --git a/src/server/scripts/Northrend/zone_wintergrasp.cpp b/src/server/scripts/Northrend/zone_wintergrasp.cpp
index 045fe331275..fbbfd750aad 100644
--- a/src/server/scripts/Northrend/zone_wintergrasp.cpp
+++ b/src/server/scripts/Northrend/zone_wintergrasp.cpp
@@ -29,6 +29,7 @@
#include "ScriptedGossip.h"
#include "ScriptSystem.h"
#include "SpellAuras.h"
+#include "SpellAuraEffects.h"
#include "SpellScript.h"
#include "Vehicle.h"
#include "WorldSession.h"
@@ -587,14 +588,40 @@ class spell_wintergrasp_tenacity_refresh : public AuraScript
{
PrepareAuraScript(spell_wintergrasp_tenacity_refresh);
- void Refresh(AuraEffect* /*aurEff*/)
+ bool Validate(SpellInfo const* spellInfo) override
{
- GetAura()->RefreshDuration();
+ uint32 triggeredSpellId = spellInfo->Effects[EFFECT_2].CalcValue();
+ return !triggeredSpellId || ValidateSpellInfo({ triggeredSpellId });
+ }
+
+ void Refresh(AuraEffect* aurEff)
+ {
+ if (uint32 triggeredSpellId = aurEff->GetAmount())
+ {
+ int32 bp = 0;
+ if (AuraEffect const* healEffect = GetEffect(EFFECT_0))
+ bp = healEffect->GetAmount();
+
+ CastSpellExtraArgs args(aurEff);
+ args
+ .AddSpellMod(SPELLVALUE_BASE_POINT0, bp)
+ .AddSpellMod(SPELLVALUE_BASE_POINT1, bp);
+ GetTarget()->CastSpell(nullptr, triggeredSpellId, args);
+ }
+
+ RefreshDuration();
+ }
+
+ void OnRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
+ {
+ if (uint32 triggeredSpellId = aurEff->GetAmount())
+ GetTarget()->RemoveAurasDueToSpell(triggeredSpellId);
}
void Register() override
{
OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_wintergrasp_tenacity_refresh::Refresh, EFFECT_2, SPELL_AURA_PERIODIC_DUMMY);
+ AfterEffectRemove += AuraEffectRemoveFn(spell_wintergrasp_tenacity_refresh::OnRemove, EFFECT_2, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};