aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp23
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp51
-rw-r--r--src/server/scripts/Spells/spell_warrior.cpp90
3 files changed, 141 insertions, 23 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index df871820bc2..5c4e415d5d2 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -5528,29 +5528,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
triggered_spell_id = 22858;
break;
}
- // Second Wind
- if (dummySpell->SpellIconID == 1697)
- {
- // only for spells and hit/crit (trigger start always) and not start from self casted spells (5530 Mace Stun Effect for example)
- if (procSpell == 0 || !(procEx & (PROC_EX_NORMAL_HIT|PROC_EX_CRITICAL_HIT)) || this == victim)
- return false;
- // Need stun or root mechanic
- if (!(procSpell->GetAllEffectsMechanicMask() & ((1<<MECHANIC_ROOT)|(1<<MECHANIC_STUN))))
- return false;
-
- switch (dummySpell->Id)
- {
- case 29838: triggered_spell_id=29842; break;
- case 29834: triggered_spell_id=29841; break;
- case 42770: triggered_spell_id=42771; break;
- default:
- TC_LOG_ERROR(LOG_FILTER_UNITS, "Unit::HandleDummyAuraProc: non handled spell id: %u (SW)", dummySpell->Id);
- return false;
- }
-
- target = this;
- break;
- }
// Glyph of Sunder Armor
if (dummySpell->Id == 58387)
{
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp
index 9c086d8bd81..1cd0fde4107 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp
@@ -21,6 +21,11 @@
#include "SpellScript.h"
#include "SpellAuraEffects.h"
+enum Spells
+{
+ SPELL_UK_SECOUND_WIND_TRIGGER = 42771
+};
+
uint32 entry_search[3] =
{
186609,
@@ -337,10 +342,56 @@ public:
}
};
+class spell_uk_second_wind_proc : public SpellScriptLoader
+{
+ public:
+ spell_uk_second_wind_proc() : SpellScriptLoader("spell_uk_second_wind_proc") { }
+
+ class spell_uk_second_wind_proc_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_uk_second_wind_proc_AuraScript);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_UK_SECOUND_WIND_TRIGGER))
+ return false;
+ return true;
+ }
+
+ bool CheckProc(ProcEventInfo& eventInfo)
+ {
+ if (eventInfo.GetProcTarget() == GetTarget())
+ return false;
+ if (!(eventInfo.GetDamageInfo() || eventInfo.GetDamageInfo()->GetSpellInfo()->GetAllEffectsMechanicMask() & ((1 << MECHANIC_ROOT) | (1 << MECHANIC_STUN))))
+ return false;
+ return true;
+ }
+
+ void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
+ {
+ PreventDefaultAction();
+ GetTarget()->CastCustomSpell(SPELL_UK_SECOUND_WIND_TRIGGER, SPELLVALUE_BASE_POINT0, 5, GetTarget(), true, NULL, aurEff);
+ }
+
+ void Register() OVERRIDE
+ {
+ DoCheckProc += AuraCheckProcFn(spell_uk_second_wind_proc_AuraScript::CheckProc);
+ OnEffectProc += AuraEffectProcFn(spell_uk_second_wind_proc_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
+ }
+
+ };
+
+ AuraScript* GetAuraScript() const OVERRIDE
+ {
+ return new spell_uk_second_wind_proc_AuraScript();
+ }
+};
+
void AddSC_utgarde_keep()
{
new npc_dragonflayer_forge_master();
new npc_enslaved_proto_drake();
new spell_ticking_time_bomb();
new spell_fixate();
+ new spell_uk_second_wind_proc();
}
diff --git a/src/server/scripts/Spells/spell_warrior.cpp b/src/server/scripts/Spells/spell_warrior.cpp
index ad1decb02a8..691264015a1 100644
--- a/src/server/scripts/Spells/spell_warrior.cpp
+++ b/src/server/scripts/Spells/spell_warrior.cpp
@@ -42,6 +42,10 @@ enum WarriorSpells
SPELL_WARRIOR_JUGGERNAUT_CRIT_BONUS_TALENT = 64976,
SPELL_WARRIOR_LAST_STAND_TRIGGERED = 12976,
SPELL_WARRIOR_RALLYING_CRY = 97463,
+ SPELL_WARRIOR_SECOUND_WIND_PROC_RANK_1 = 29834,
+ SPELL_WARRIOR_SECOUND_WIND_PROC_RANK_2 = 29838,
+ SPELL_WARRIOR_SECOUND_WIND_TRIGGER_RANK_1 = 29841,
+ SPELL_WARRIOR_SECOUND_WIND_TRIGGER_RANK_2 = 29842,
SPELL_WARRIOR_SLAM = 50782,
SPELL_WARRIOR_SWEEPING_STRIKES_EXTRA_ATTACK = 26654,
SPELL_WARRIOR_TAUNT = 355,
@@ -590,6 +594,90 @@ class spell_warr_slam : public SpellScriptLoader
}
};
+class spell_warr_second_wind_proc : public SpellScriptLoader
+{
+ public:
+ spell_warr_second_wind_proc() : SpellScriptLoader("spell_warr_second_wind_proc") { }
+
+ class spell_warr_second_wind_proc_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_warr_second_wind_proc_AuraScript);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_WARRIOR_SECOUND_WIND_PROC_RANK_1) ||
+ !sSpellMgr->GetSpellInfo(SPELL_WARRIOR_SECOUND_WIND_PROC_RANK_2) ||
+ !sSpellMgr->GetSpellInfo(SPELL_WARRIOR_SECOUND_WIND_TRIGGER_RANK_1) ||
+ !sSpellMgr->GetSpellInfo(SPELL_WARRIOR_SECOUND_WIND_TRIGGER_RANK_2))
+ return false;
+ return true;
+ }
+
+ bool CheckProc(ProcEventInfo& eventInfo)
+ {
+ if (eventInfo.GetProcTarget() == GetTarget())
+ return false;
+ if (!(eventInfo.GetDamageInfo() || eventInfo.GetDamageInfo()->GetSpellInfo()->GetAllEffectsMechanicMask() & ((1 << MECHANIC_ROOT) | (1 << MECHANIC_STUN))))
+ return false;
+ return true;
+ }
+
+ void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
+ {
+ PreventDefaultAction();
+ uint32 spellId = 0;
+
+ if (GetSpellInfo()->Id == SPELL_WARRIOR_SECOUND_WIND_PROC_RANK_1)
+ spellId = SPELL_WARRIOR_SECOUND_WIND_TRIGGER_RANK_1;
+ else if (GetSpellInfo()->Id == SPELL_WARRIOR_SECOUND_WIND_PROC_RANK_2)
+ spellId = SPELL_WARRIOR_SECOUND_WIND_TRIGGER_RANK_2;
+ if (!spellId)
+ return;
+
+ GetTarget()->CastSpell(GetTarget(), spellId, true, NULL, aurEff);
+
+ }
+
+ void Register() OVERRIDE
+ {
+ DoCheckProc += AuraCheckProcFn(spell_warr_second_wind_proc_AuraScript::CheckProc);
+ OnEffectProc += AuraEffectProcFn(spell_warr_second_wind_proc_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
+ }
+
+ };
+
+ AuraScript* GetAuraScript() const OVERRIDE
+ {
+ return new spell_warr_second_wind_proc_AuraScript();
+ }
+};
+
+class spell_warr_second_wind_trigger : public SpellScriptLoader
+{
+ public:
+ spell_warr_second_wind_trigger() : SpellScriptLoader("spell_warr_second_wind_trigger") { }
+
+ class spell_warr_second_wind_trigger_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_warr_second_wind_trigger_AuraScript);
+
+ void CalculateAmount(AuraEffect const* aurEff, int32& amount, bool& /*canBeRecalculated*/)
+ {
+ amount = int32(GetUnitOwner()->CountPctFromMaxHealth(amount));
+ }
+
+ void Register() OVERRIDE
+ {
+ DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warr_second_wind_trigger_AuraScript::CalculateAmount, EFFECT_1, SPELL_AURA_PERIODIC_HEAL);
+ }
+ };
+
+ AuraScript* GetAuraScript() const OVERRIDE
+ {
+ return new spell_warr_second_wind_trigger_AuraScript();
+ }
+};
+
// 12328, 18765, 35429 - Sweeping Strikes
class spell_warr_sweeping_strikes : public SpellScriptLoader
{
@@ -780,6 +868,8 @@ void AddSC_warrior_spell_scripts()
new spell_warr_overpower();
new spell_warr_rallying_cry();
new spell_warr_rend();
+ new spell_warr_second_wind_proc();
+ new spell_warr_second_wind_trigger();
new spell_warr_shattering_throw();
new spell_warr_slam();
new spell_warr_sweeping_strikes();