Core/Spell: convert more spells to SpellScripts
This commit is contained in:
1 parent
017ff298dd
commit
af50ce6223
21 files changed
+1795
-801
No files matched your search
@@ -0,0 +1,77 @@
|
||||
DELETE FROM `spell_script_names` WHERE `spell_id` IN (
|
||||
70871, -- spell_blood_queen_essence_of_the_blood_queen
|
||||
69383, -- spell_the_lich_king_dark_hunger
|
||||
50453, -- spell_dk_blood_gorged
|
||||
-48496, -- spell_dru_living_seed
|
||||
48504, -- spell_dru_living_seed_proc
|
||||
28764, -- spell_gen_adaptive_warding
|
||||
27539, -- spell_gen_obsidian_armor
|
||||
34074, -- spell_hun_ascpect_of_the_viper
|
||||
64411, -- spell_item_blessing_of_ancient_kings
|
||||
71875, -- spell_item_necrotic_touch
|
||||
71877, -- spell_item_necrotic_touch
|
||||
71169, -- spell_item_shadows_fate
|
||||
71903, -- spell_item_shadowmourne
|
||||
71905, -- spell_item_shadowmourne_soul_fragment
|
||||
-44449, -- spell_mage_burnout
|
||||
54646, -- spell_mage_focus_magic
|
||||
-11119, -- spell_mage_ignite
|
||||
-29074, -- spell_mage_master_of_elements
|
||||
-9799, -- spell_pal_eye_for_an_eye
|
||||
20154, -- spell_pal_seal_of_righteousness
|
||||
21084 -- spell_pal_seal_of_righteousness
|
||||
-47509, -- spell_pri_divine_aegis
|
||||
55680, -- spell_pri_glyph_of_prayer_of_healing
|
||||
28305, -- spell_pri_mana_leech
|
||||
13877, -- spell_rog_blade_flurry
|
||||
33735, -- spell_rog_blade_flurry
|
||||
51211, -- spell_rog_blade_flurry
|
||||
65956, -- spell_rog_blade_flurry
|
||||
57934, -- spell_rog_tricks_of_the_trade
|
||||
59628, -- spell_rog_tricks_of_the_trade_proc
|
||||
-974, -- spell_sha_earth_shield
|
||||
-47230, -- spell_warl_fel_synergy
|
||||
63108, -- spell_warl_siphon_life
|
||||
-58872, -- spell_warr_damage_shield
|
||||
12328, -- spell_warr_sweeping_strikes
|
||||
18765, -- spell_warr_sweeping_strikes
|
||||
35429 -- spell_warr_sweeping_strikes
|
||||
);
|
||||
INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
|
||||
(70871, 'spell_blood_queen_essence_of_the_blood_queen'),
|
||||
(69383, 'spell_the_lich_king_dark_hunger'),
|
||||
(50453, 'spell_dk_blood_gorged'),
|
||||
(-48496, 'spell_dru_living_seed'),
|
||||
(48504, 'spell_dru_living_seed_proc'),
|
||||
(28764, 'spell_gen_adaptive_warding'),
|
||||
(27539, 'spell_gen_obsidian_armor'),
|
||||
(34074, 'spell_hun_ascpect_of_the_viper'),
|
||||
(64411, 'spell_item_blessing_of_ancient_kings'),
|
||||
(71875, 'spell_item_necrotic_touch'),
|
||||
(71877, 'spell_item_necrotic_touch'),
|
||||
(71169, 'spell_item_shadows_fate'),
|
||||
(71903, 'spell_item_shadowmourne'),
|
||||
(71905, 'spell_item_shadowmourne_soul_fragment'),
|
||||
(-44449, 'spell_mage_burnout'),
|
||||
(54646, 'spell_mage_focus_magic'),
|
||||
(-11119, 'spell_mage_ignite'),
|
||||
(-29074, 'spell_mage_master_of_elements'),
|
||||
(-9799, 'spell_pal_eye_for_an_eye'),
|
||||
(20154, 'spell_pal_seal_of_righteousness'),
|
||||
(21084, 'spell_pal_seal_of_righteousness'),
|
||||
(-47509, 'spell_pri_divine_aegis'),
|
||||
(55680, 'spell_pri_glyph_of_prayer_of_healing'),
|
||||
(28305, 'spell_pri_mana_leech'),
|
||||
(13877, 'spell_rog_blade_flurry'),
|
||||
(33735, 'spell_rog_blade_flurry'),
|
||||
(51211, 'spell_rog_blade_flurry'),
|
||||
(65956, 'spell_rog_blade_flurry'),
|
||||
(57934, 'spell_rog_tricks_of_the_trade'),
|
||||
(59628, 'spell_rog_tricks_of_the_trade_proc'),
|
||||
(-974, 'spell_sha_earth_shield'),
|
||||
(-47230, 'spell_warl_fel_synergy'),
|
||||
(63108, 'spell_warl_siphon_life'),
|
||||
(-58872, 'spell_warr_damage_shield'),
|
||||
(12328, 'spell_warr_sweeping_strikes'),
|
||||
(18765, 'spell_warr_sweeping_strikes'),
|
||||
(35429, 'spell_warr_sweeping_strikes');
|
||||
@@ -416,20 +416,17 @@ void ThreatManager::addThreat(Unit* victim, float threat, SpellSchoolMask school
|
||||
|
||||
void ThreatManager::doAddThreat(Unit* victim, float threat)
|
||||
{
|
||||
uint32 reducedThreadPercent = victim->GetReducedThreatPercent();
|
||||
uint32 redirectThreadPct = victim->GetRedirectThreatPercent();
|
||||
|
||||
// must check > 0.0f, otherwise dead loop
|
||||
if (threat > 0.0f && reducedThreadPercent)
|
||||
if (threat > 0.0f && redirectThreadPct)
|
||||
{
|
||||
Unit* redirectTarget = victim->GetMisdirectionTarget();
|
||||
if (redirectTarget)
|
||||
if (Aura* glyphAura = redirectTarget->GetAura(63326)) // Glyph of Vigilance
|
||||
reducedThreadPercent += glyphAura->GetSpellInfo()->Effects[0].CalcValue();
|
||||
|
||||
float reducedThreat = threat * reducedThreadPercent / 100.0f;
|
||||
threat -= reducedThreat;
|
||||
if (redirectTarget)
|
||||
_addThreat(redirectTarget, reducedThreat);
|
||||
if (Unit* redirectTarget = victim->GetRedirectThreatTarget())
|
||||
{
|
||||
float redirectThreat = CalculatePct(threat, redirectThreadPct);
|
||||
threat -= redirectThreat;
|
||||
_addThreat(redirectTarget, redirectThreat);
|
||||
}
|
||||
}
|
||||
|
||||
_addThreat(victim, threat);
|
||||
|
||||
@@ -256,8 +256,8 @@ Unit::Unit(bool isWorldObject): WorldObject(isWorldObject)
|
||||
m_speed_rate[i] = 1.0f;
|
||||
|
||||
m_charmInfo = NULL;
|
||||
m_reducedThreatPercent = 0;
|
||||
m_misdirectionTargetGUID = 0;
|
||||
|
||||
_redirectThreadInfo = RedirectThreatInfo();
|
||||
|
||||
// remove aurastates allowing special moves
|
||||
for (uint8 i = 0; i < MAX_REACTIVE; ++i)
|
||||
@@ -4984,127 +4984,6 @@ void Unit::SendAttackStateUpdate(uint32 HitInfo, Unit* target, uint8 /*SwingType
|
||||
SendAttackStateUpdate(&dmgInfo);
|
||||
}
|
||||
|
||||
bool Unit::HandleHasteAuraProc(Unit* victim, uint32 damage, AuraEffect* triggeredByAura, SpellInfo const* /*procSpell*/, uint32 /*procFlag*/, uint32 /*procEx*/, uint32 cooldown)
|
||||
{
|
||||
SpellInfo const* hasteSpell = triggeredByAura->GetSpellInfo();
|
||||
|
||||
Item* castItem = triggeredByAura->GetBase()->GetCastItemGUID() && GetTypeId() == TYPEID_PLAYER
|
||||
? ToPlayer()->GetItemByGuid(triggeredByAura->GetBase()->GetCastItemGUID()) : NULL;
|
||||
|
||||
uint32 triggered_spell_id = 0;
|
||||
Unit* target = victim;
|
||||
int32 basepoints0 = 0;
|
||||
|
||||
switch (hasteSpell->SpellFamilyName)
|
||||
{
|
||||
case SPELLFAMILY_ROGUE:
|
||||
{
|
||||
switch (hasteSpell->Id)
|
||||
{
|
||||
// Blade Flurry
|
||||
case 13877:
|
||||
case 33735:
|
||||
{
|
||||
target = SelectNearbyTarget(victim);
|
||||
if (!target)
|
||||
return false;
|
||||
basepoints0 = damage;
|
||||
triggered_spell_id = 22482;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// processed charge only counting case
|
||||
if (!triggered_spell_id)
|
||||
return true;
|
||||
|
||||
SpellInfo const* triggerEntry = sSpellMgr->GetSpellInfo(triggered_spell_id);
|
||||
|
||||
if (!triggerEntry)
|
||||
{
|
||||
sLog->outError(LOG_FILTER_UNITS, "Unit::HandleHasteAuraProc: Spell %u has non-existing triggered spell %u", hasteSpell->Id, triggered_spell_id);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (cooldown && GetTypeId() == TYPEID_PLAYER && ToPlayer()->HasSpellCooldown(triggered_spell_id))
|
||||
return false;
|
||||
|
||||
if (basepoints0)
|
||||
CastCustomSpell(target, triggered_spell_id, &basepoints0, NULL, NULL, true, castItem, triggeredByAura);
|
||||
else
|
||||
CastSpell(target, triggered_spell_id, true, castItem, triggeredByAura);
|
||||
|
||||
if (cooldown && GetTypeId() == TYPEID_PLAYER)
|
||||
ToPlayer()->AddSpellCooldown(triggered_spell_id, 0, time(NULL) + cooldown);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Unit::HandleSpellCritChanceAuraProc(Unit* victim, uint32 /*damage*/, AuraEffect* triggeredByAura, SpellInfo const* /*procSpell*/, uint32 /*procFlag*/, uint32 /*procEx*/, uint32 cooldown)
|
||||
{
|
||||
SpellInfo const* triggeredByAuraSpell = triggeredByAura->GetSpellInfo();
|
||||
|
||||
Item* castItem = triggeredByAura->GetBase()->GetCastItemGUID() && GetTypeId() == TYPEID_PLAYER
|
||||
? ToPlayer()->GetItemByGuid(triggeredByAura->GetBase()->GetCastItemGUID()) : NULL;
|
||||
|
||||
uint32 triggered_spell_id = 0;
|
||||
Unit* target = victim;
|
||||
int32 basepoints0 = 0;
|
||||
|
||||
switch (triggeredByAuraSpell->SpellFamilyName)
|
||||
{
|
||||
case SPELLFAMILY_MAGE:
|
||||
{
|
||||
switch (triggeredByAuraSpell->Id)
|
||||
{
|
||||
// Focus Magic
|
||||
case 54646:
|
||||
{
|
||||
Unit* caster = triggeredByAura->GetCaster();
|
||||
if (!caster)
|
||||
return false;
|
||||
|
||||
triggered_spell_id = 54648;
|
||||
target = caster;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// processed charge only counting case
|
||||
if (!triggered_spell_id)
|
||||
return true;
|
||||
|
||||
SpellInfo const* triggerEntry = sSpellMgr->GetSpellInfo(triggered_spell_id);
|
||||
|
||||
if (!triggerEntry)
|
||||
{
|
||||
sLog->outError(LOG_FILTER_UNITS, "Unit::HandleHasteAuraProc: Spell %u has non-existing triggered spell %u", triggeredByAuraSpell->Id, triggered_spell_id);
|
||||
return false;
|
||||
}
|
||||
|
||||
// default case
|
||||
if (!target || (target != this && !target->isAlive()))
|
||||
return false;
|
||||
|
||||
if (cooldown && GetTypeId() == TYPEID_PLAYER && ToPlayer()->HasSpellCooldown(triggered_spell_id))
|
||||
return false;
|
||||
|
||||
if (basepoints0)
|
||||
CastCustomSpell(target, triggered_spell_id, &basepoints0, NULL, NULL, true, castItem, triggeredByAura);
|
||||
else
|
||||
CastSpell(target, triggered_spell_id, true, castItem, triggeredByAura);
|
||||
|
||||
if (cooldown && GetTypeId() == TYPEID_PLAYER)
|
||||
ToPlayer()->AddSpellCooldown(triggered_spell_id, 0, time(NULL) + cooldown);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//victim may be NULL
|
||||
bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggeredByAura, SpellInfo const* procSpell, uint32 procFlag, uint32 procEx, uint32 cooldown)
|
||||
{
|
||||
@@ -5128,38 +5007,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
|
||||
{
|
||||
switch (dummySpell->Id)
|
||||
{
|
||||
// Bloodworms Health Leech
|
||||
case 50453:
|
||||
{
|
||||
if (Unit* owner = GetOwner())
|
||||
{
|
||||
basepoints0 = int32(damage * 1.50f);
|
||||
target = owner;
|
||||
triggered_spell_id = 50454;
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
// Eye for an Eye
|
||||
case 9799:
|
||||
case 25988:
|
||||
{
|
||||
// return damage % to attacker but < 50% own total health
|
||||
basepoints0 = int32(std::min(CalculatePct(damage, triggerAmount), CountPctFromMaxHealth(50)));
|
||||
triggered_spell_id = 25997;
|
||||
break;
|
||||
}
|
||||
// Sweeping Strikes
|
||||
case 18765:
|
||||
case 35429:
|
||||
{
|
||||
target = SelectNearbyTarget(victim);
|
||||
if (!target)
|
||||
return false;
|
||||
|
||||
triggered_spell_id = 26654;
|
||||
break;
|
||||
}
|
||||
// Unstable Power
|
||||
case 24658:
|
||||
{
|
||||
@@ -5176,67 +5023,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
|
||||
RemoveAuraFromStack(24662);
|
||||
return true;
|
||||
}
|
||||
// Adaptive Warding (Frostfire Regalia set)
|
||||
case 28764:
|
||||
{
|
||||
if (!procSpell)
|
||||
return false;
|
||||
|
||||
// find Mage Armor
|
||||
if (!GetAuraEffect(SPELL_AURA_MOD_MANA_REGEN_INTERRUPT, SPELLFAMILY_MAGE, 0x10000000, 0, 0))
|
||||
return false;
|
||||
|
||||
switch (GetFirstSchoolInMask(procSpell->GetSchoolMask()))
|
||||
{
|
||||
case SPELL_SCHOOL_NORMAL:
|
||||
case SPELL_SCHOOL_HOLY:
|
||||
return false; // ignored
|
||||
case SPELL_SCHOOL_FIRE: triggered_spell_id = 28765; break;
|
||||
case SPELL_SCHOOL_NATURE: triggered_spell_id = 28768; break;
|
||||
case SPELL_SCHOOL_FROST: triggered_spell_id = 28766; break;
|
||||
case SPELL_SCHOOL_SHADOW: triggered_spell_id = 28769; break;
|
||||
case SPELL_SCHOOL_ARCANE: triggered_spell_id = 28770; break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
target = this;
|
||||
break;
|
||||
}
|
||||
// Obsidian Armor (Justice Bearer`s Pauldrons shoulder)
|
||||
case 27539:
|
||||
{
|
||||
if (!procSpell)
|
||||
return false;
|
||||
|
||||
switch (GetFirstSchoolInMask(procSpell->GetSchoolMask()))
|
||||
{
|
||||
case SPELL_SCHOOL_NORMAL:
|
||||
return false; // ignore
|
||||
case SPELL_SCHOOL_HOLY: triggered_spell_id = 27536; break;
|
||||
case SPELL_SCHOOL_FIRE: triggered_spell_id = 27533; break;
|
||||
case SPELL_SCHOOL_NATURE: triggered_spell_id = 27538; break;
|
||||
case SPELL_SCHOOL_FROST: triggered_spell_id = 27534; break;
|
||||
case SPELL_SCHOOL_SHADOW: triggered_spell_id = 27535; break;
|
||||
case SPELL_SCHOOL_ARCANE: triggered_spell_id = 27540; break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
target = this;
|
||||
break;
|
||||
}
|
||||
// Mana Leech (Passive) (Priest Pet Aura)
|
||||
case 28305:
|
||||
{
|
||||
// Cast on owner
|
||||
target = GetOwner();
|
||||
if (!target)
|
||||
return false;
|
||||
|
||||
triggered_spell_id = 34650;
|
||||
break;
|
||||
}
|
||||
// Mark of Malice
|
||||
case 33493:
|
||||
{
|
||||
@@ -5427,14 +5213,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
|
||||
}
|
||||
return false;
|
||||
}
|
||||
// Living Seed
|
||||
case 48504:
|
||||
{
|
||||
triggered_spell_id = 48503;
|
||||
basepoints0 = triggerAmount;
|
||||
target = this;
|
||||
break;
|
||||
}
|
||||
// Kill command
|
||||
case 58914:
|
||||
{
|
||||
@@ -5594,50 +5372,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 71875: // Item - Black Bruise: Necrotic Touch Proc
|
||||
case 71877:
|
||||
{
|
||||
basepoints0 = CalculatePct(int32(damage), triggerAmount);
|
||||
triggered_spell_id = 71879;
|
||||
break;
|
||||
}
|
||||
// Item - Shadowmourne Legendary
|
||||
case 71903:
|
||||
{
|
||||
if (!victim || !victim->isAlive() || HasAura(73422)) // cant collect shards while under effect of Chaos Bane buff
|
||||
return false;
|
||||
|
||||
CastSpell(this, 71905, true, NULL, triggeredByAura);
|
||||
|
||||
// this can't be handled in AuraScript because we need to know victim
|
||||
Aura const* dummy = GetAura(71905);
|
||||
if (!dummy || dummy->GetStackAmount() < 10)
|
||||
return false;
|
||||
|
||||
RemoveAurasDueToSpell(71905);
|
||||
triggered_spell_id = 71904;
|
||||
target = victim;
|
||||
break;
|
||||
}
|
||||
// Shadow's Fate (Shadowmourne questline)
|
||||
case 71169:
|
||||
{
|
||||
Unit* caster = triggeredByAura->GetCaster();
|
||||
if (caster && caster->GetTypeId() == TYPEID_PLAYER && caster->ToPlayer()->GetQuestStatus(24547) == QUEST_STATUS_INCOMPLETE)
|
||||
{
|
||||
CastSpell(caster, 71203, true);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
return false;
|
||||
}
|
||||
// Essence of the Blood Queen
|
||||
case 70871:
|
||||
{
|
||||
basepoints0 = CalculatePct(int32(damage), triggerAmount);
|
||||
CastCustomSpell(70872, SPELLVALUE_BASE_POINT0, basepoints0, this);
|
||||
return true;
|
||||
}
|
||||
case 65032: // Boom aura (321 Boombot)
|
||||
{
|
||||
if (victim->GetEntry() != 33343) // Scrapbot
|
||||
@@ -5650,13 +5384,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
|
||||
instance->DoCastSpellOnPlayers(65037); // Achievement criteria marker
|
||||
break;
|
||||
}
|
||||
// Dark Hunger (The Lich King encounter)
|
||||
case 69383:
|
||||
{
|
||||
basepoints0 = CalculatePct(int32(damage), 50);
|
||||
triggered_spell_id = 69384;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -5674,22 +5401,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
|
||||
triggered_spell_id = 29442;
|
||||
break;
|
||||
}
|
||||
// Master of Elements
|
||||
if (dummySpell->SpellIconID == 1920)
|
||||
{
|
||||
if (!procSpell)
|
||||
return false;
|
||||
|
||||
// mana cost save
|
||||
int32 cost = int32(procSpell->ManaCost + CalculatePct(GetCreateMana(), procSpell->ManaCostPercentage));
|
||||
basepoints0 = CalculatePct(cost, triggerAmount);
|
||||
if (basepoints0 <= 0)
|
||||
return false;
|
||||
|
||||
target = this;
|
||||
triggered_spell_id = 29077;
|
||||
break;
|
||||
}
|
||||
// Arcane Potency
|
||||
if (dummySpell->SpellIconID == 2120)
|
||||
{
|
||||
@@ -5707,7 +5418,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// Hot Streak
|
||||
if (dummySpell->SpellIconID == 2999)
|
||||
{
|
||||
@@ -5730,20 +5440,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
|
||||
counter->SetAmount(25);
|
||||
return true;
|
||||
}
|
||||
// Burnout
|
||||
if (dummySpell->SpellIconID == 2998)
|
||||
{
|
||||
if (!procSpell)
|
||||
return false;
|
||||
|
||||
int32 cost = int32(procSpell->ManaCost + CalculatePct(GetCreateMana(), procSpell->ManaCostPercentage));
|
||||
basepoints0 = CalculatePct(cost, triggerAmount);
|
||||
if (basepoints0 <= 0)
|
||||
return false;
|
||||
triggered_spell_id = 44450;
|
||||
target = this;
|
||||
break;
|
||||
}
|
||||
// Incanter's Regalia set (add trigger chance to Mana Shield)
|
||||
if (dummySpell->SpellFamilyFlags[0] & 0x8000)
|
||||
{
|
||||
@@ -5773,29 +5469,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
|
||||
RemoveAurasByType(SPELL_AURA_MOD_DECREASE_SPEED);
|
||||
return true;
|
||||
}
|
||||
// Ignite
|
||||
case 11119:
|
||||
case 11120:
|
||||
case 12846:
|
||||
case 12847:
|
||||
case 12848:
|
||||
{
|
||||
switch (dummySpell->Id)
|
||||
{
|
||||
case 11119: basepoints0 = int32(0.04f * damage); break;
|
||||
case 11120: basepoints0 = int32(0.08f * damage); break;
|
||||
case 12846: basepoints0 = int32(0.12f * damage); break;
|
||||
case 12847: basepoints0 = int32(0.16f * damage); break;
|
||||
case 12848: basepoints0 = int32(0.20f * damage); break;
|
||||
default:
|
||||
sLog->outError(LOG_FILTER_UNITS, "Unit::HandleDummyAuraProc: non handled spell id: %u (IG)", dummySpell->Id);
|
||||
return false;
|
||||
}
|
||||
|
||||
triggered_spell_id = 12654;
|
||||
basepoints0 += victim->GetRemainingPeriodicAmount(GetGUID(), triggered_spell_id, SPELL_AURA_PERIODIC_DAMAGE);
|
||||
break;
|
||||
}
|
||||
// Glyph of Ice Block
|
||||
case 56372:
|
||||
{
|
||||
@@ -5815,25 +5488,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
|
||||
}
|
||||
break;
|
||||
}
|
||||
// Blessing of Ancient Kings (Val'anyr, Hammer of Ancient Kings)
|
||||
case 64411:
|
||||
{
|
||||
if (!victim)
|
||||
return false;
|
||||
basepoints0 = int32(CalculatePct(damage, 15));
|
||||
if (AuraEffect* aurEff = victim->GetAuraEffect(64413, 0, GetGUID()))
|
||||
{
|
||||
// The shield can grow to a maximum size of 20, 000 damage absorbtion
|
||||
aurEff->SetAmount(std::min<int32>(aurEff->GetAmount() + basepoints0, 20000));
|
||||
|
||||
// Refresh and return to prevent replacing the aura
|
||||
aurEff->GetBase()->RefreshDuration();
|
||||
return true;
|
||||
}
|
||||
target = victim;
|
||||
triggered_spell_id = 64413;
|
||||
break;
|
||||
}
|
||||
case 47020: // Enter vehicle XT-002 (Scrapbot)
|
||||
{
|
||||
if (GetTypeId() != TYPEID_UNIT)
|
||||
@@ -5854,16 +5508,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
|
||||
{
|
||||
switch (dummySpell->Id)
|
||||
{
|
||||
// Sweeping Strikes
|
||||
case 12328:
|
||||
{
|
||||
target = SelectNearbyTarget(victim);
|
||||
if (!target)
|
||||
return false;
|
||||
|
||||
triggered_spell_id = 26654;
|
||||
break;
|
||||
}
|
||||
// Victorious
|
||||
case 32216:
|
||||
{
|
||||
@@ -5913,14 +5557,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
|
||||
target = this;
|
||||
break;
|
||||
}
|
||||
// Damage Shield
|
||||
if (dummySpell->SpellIconID == 3214)
|
||||
{
|
||||
triggered_spell_id = 59653;
|
||||
// % of amount blocked
|
||||
basepoints0 = CalculatePct(int32(GetShieldBlockValue()), triggerAmount);
|
||||
break;
|
||||
}
|
||||
// Glyph of Blocking
|
||||
if (dummySpell->Id == 58375)
|
||||
{
|
||||
@@ -5991,31 +5627,8 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
|
||||
triggeredByAura->SetAmount(triggeredByAura->GetAmount() - damage);
|
||||
return true;
|
||||
}
|
||||
// Fel Synergy
|
||||
if (dummySpell->SpellIconID == 3222)
|
||||
{
|
||||
target = GetGuardianPet();
|
||||
if (!target)
|
||||
return false;
|
||||
basepoints0 = CalculatePct(int32(damage), triggerAmount);
|
||||
triggered_spell_id = 54181;
|
||||
break;
|
||||
}
|
||||
switch (dummySpell->Id)
|
||||
{
|
||||
// Siphon Life
|
||||
case 63108:
|
||||
{
|
||||
if (!damage)
|
||||
break;
|
||||
// Glyph of Siphon Life
|
||||
if (HasAura(56216))
|
||||
triggerAmount += triggerAmount / 4;
|
||||
triggered_spell_id = 63106;
|
||||
target = this;
|
||||
basepoints0 = CalculatePct(int32(damage), triggerAmount);
|
||||
break;
|
||||
}
|
||||
// Glyph of Shadowflame
|
||||
case 63310:
|
||||
{
|
||||
@@ -6126,24 +5739,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
|
||||
victim->CastSpell(victim, 57669, true, castItem, triggeredByAura);
|
||||
return true; // no hidden cooldown
|
||||
}
|
||||
// Divine Aegis
|
||||
if (dummySpell->SpellIconID == 2820)
|
||||
{
|
||||
if (!target)
|
||||
return false;
|
||||
|
||||
// Multiple effects stack, so let's try to find this aura.
|
||||
int32 bonus = 0;
|
||||
if (AuraEffect const* aurEff = target->GetAuraEffect(47753, 0))
|
||||
bonus = aurEff->GetAmount();
|
||||
|
||||
basepoints0 = CalculatePct(int32(damage), triggerAmount) + bonus;
|
||||
if (basepoints0 > target->getLevel() * 125)
|
||||
basepoints0 = target->getLevel() * 125;
|
||||
|
||||
triggered_spell_id = 47753;
|
||||
break;
|
||||
}
|
||||
// Body and Soul
|
||||
if (dummySpell->SpellIconID == 2218)
|
||||
{
|
||||
@@ -6184,31 +5779,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
|
||||
target = this;
|
||||
break;
|
||||
}
|
||||
// Glyph of Prayer of Healing
|
||||
case 55680:
|
||||
{
|
||||
triggered_spell_id = 56161;
|
||||
|
||||
SpellInfo const* GoPoH = sSpellMgr->GetSpellInfo(triggered_spell_id);
|
||||
if (!GoPoH)
|
||||
return false;
|
||||
|
||||
int EffIndex = 0;
|
||||
for (uint8 i = 0; i < MAX_SPELL_EFFECTS; i++)
|
||||
{
|
||||
if (GoPoH->Effects[i].Effect == SPELL_EFFECT_APPLY_AURA)
|
||||
{
|
||||
EffIndex = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
int32 tickcount = GoPoH->GetMaxDuration() / GoPoH->Effects[EffIndex].Amplitude;
|
||||
if (!tickcount)
|
||||
return false;
|
||||
|
||||
basepoints0 = CalculatePct(int32(damage), triggerAmount) / tickcount;
|
||||
break;
|
||||
}
|
||||
// Improved Shadowform
|
||||
case 47570:
|
||||
case 47569:
|
||||
@@ -6481,13 +6051,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
|
||||
triggered_spell_id = isWrathSpell ? 48518 : 48517;
|
||||
break;
|
||||
}
|
||||
// Living Seed
|
||||
else if (dummySpell->SpellIconID == 2860)
|
||||
{
|
||||
triggered_spell_id = 48504;
|
||||
basepoints0 = CalculatePct(int32(damage), triggerAmount);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SPELLFAMILY_ROGUE:
|
||||
@@ -6508,16 +6071,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
|
||||
triggered_spell_id = 32747;
|
||||
break;
|
||||
}
|
||||
case 57934: // Tricks of the Trade
|
||||
{
|
||||
Unit* redirectTarget = GetMisdirectionTarget();
|
||||
RemoveAura(57934);
|
||||
if (!redirectTarget)
|
||||
break;
|
||||
CastSpell(this, 59628, true);
|
||||
CastSpell(redirectTarget, 57933, true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
switch (dummySpell->SpellIconID)
|
||||
@@ -6636,14 +6189,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
|
||||
|
||||
switch (dummySpell->Id)
|
||||
{
|
||||
case 34477: // Misdirection
|
||||
{
|
||||
if (!GetMisdirectionTarget())
|
||||
return false;
|
||||
triggered_spell_id = 35079; // 4 sec buff on self
|
||||
target = this;
|
||||
break;
|
||||
}
|
||||
case 57870: // Glyph of Mend Pet
|
||||
{
|
||||
victim->CastSpell(victim, 57894, true, NULL, NULL, GetGUID());
|
||||
@@ -6654,18 +6199,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
|
||||
}
|
||||
case SPELLFAMILY_PALADIN:
|
||||
{
|
||||
// Seal of Righteousness - melee proc dummy (addition ${$MWS*(0.022*$AP+0.044*$SPH)} damage)
|
||||
if (dummySpell->SpellFamilyFlags[0] & 0x8000000)
|
||||
{
|
||||
if (effIndex != 0)
|
||||
return false;
|
||||
triggered_spell_id = 25742;
|
||||
float ap = GetTotalAttackPowerValue(BASE_ATTACK);
|
||||
int32 holy = SpellBaseDamageBonusDone(SPELL_SCHOOL_MASK_HOLY) +
|
||||
victim->SpellBaseDamageBonusTaken(SPELL_SCHOOL_MASK_HOLY);
|
||||
basepoints0 = (int32)GetAttackTime(BASE_ATTACK) * int32(ap * 0.022f + 0.044f * holy) / 1000;
|
||||
break;
|
||||
}
|
||||
// Light's Beacon - Beacon of Light
|
||||
if (dummySpell->Id == 53651)
|
||||
{
|
||||
@@ -6832,20 +6365,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 25899: // Greater Blessing of Sanctuary
|
||||
case 20911: // Blessing of Sanctuary
|
||||
{
|
||||
target = this;
|
||||
switch (target->getPowerType())
|
||||
{
|
||||
case POWER_MANA:
|
||||
triggered_spell_id = 57319;
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
// Seal of Vengeance (damage calc on apply aura)
|
||||
case 31801:
|
||||
{
|
||||
@@ -7348,20 +6867,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
|
||||
target = this;
|
||||
break;
|
||||
}
|
||||
// Earth Shield
|
||||
if (dummySpell->SpellFamilyFlags[1] & 0x00000400)
|
||||
{
|
||||
// 3.0.8: Now correctly uses the Shaman's own spell critical strike chance to determine the chance of a critical heal.
|
||||
originalCaster = triggeredByAura->GetCasterGUID();
|
||||
target = this;
|
||||
basepoints0 = triggerAmount;
|
||||
|
||||
// Glyph of Earth Shield
|
||||
if (AuraEffect* aur = GetAuraEffect(63279, 0))
|
||||
AddPct(basepoints0, aur->GetAmount());
|
||||
triggered_spell_id = 379;
|
||||
break;
|
||||
}
|
||||
// Flametongue Weapon (Passive)
|
||||
if (dummySpell->SpellFamilyFlags[0] & 0x200000)
|
||||
{
|
||||
@@ -7813,114 +7318,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
|
||||
|
||||
return true;
|
||||
}
|
||||
bool Unit::HandleObsModEnergyAuraProc(Unit* victim, uint32 /*damage*/, AuraEffect* triggeredByAura, SpellInfo const* /*procSpell*/, uint32 /*procFlag*/, uint32 /*procEx*/, uint32 cooldown)
|
||||
{
|
||||
SpellInfo const* dummySpell = triggeredByAura->GetSpellInfo();
|
||||
//uint32 effIndex = triggeredByAura->GetEffIndex();
|
||||
//int32 triggerAmount = triggeredByAura->GetAmount();
|
||||
|
||||
Item* castItem = triggeredByAura->GetBase()->GetCastItemGUID() && GetTypeId() == TYPEID_PLAYER
|
||||
? ToPlayer()->GetItemByGuid(triggeredByAura->GetBase()->GetCastItemGUID()) : NULL;
|
||||
|
||||
uint32 triggered_spell_id = 0;
|
||||
Unit* target = victim;
|
||||
int32 basepoints0 = 0;
|
||||
|
||||
switch (dummySpell->SpellFamilyName)
|
||||
{
|
||||
case SPELLFAMILY_HUNTER:
|
||||
{
|
||||
// Aspect of the Viper
|
||||
if (dummySpell->SpellFamilyFlags[1] & 0x40000)
|
||||
{
|
||||
uint32 maxmana = GetMaxPower(POWER_MANA);
|
||||
basepoints0 = CalculatePct(maxmana, GetAttackTime(RANGED_ATTACK) / 1000.0f);
|
||||
target = this;
|
||||
triggered_spell_id = 34075;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
// processed charge only counting case
|
||||
if (!triggered_spell_id)
|
||||
return true;
|
||||
|
||||
SpellInfo const* triggerEntry = sSpellMgr->GetSpellInfo(triggered_spell_id);
|
||||
|
||||
// Try handle unknown trigger spells
|
||||
if (!triggerEntry)
|
||||
{
|
||||
sLog->outError(LOG_FILTER_UNITS, "Unit::HandleObsModEnergyAuraProc: Spell %u has non-existing triggered spell %u", dummySpell->Id, triggered_spell_id);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (cooldown && GetTypeId() == TYPEID_PLAYER && ToPlayer()->HasSpellCooldown(triggered_spell_id))
|
||||
return false;
|
||||
if (basepoints0)
|
||||
CastCustomSpell(target, triggered_spell_id, &basepoints0, NULL, NULL, true, castItem, triggeredByAura);
|
||||
else
|
||||
CastSpell(target, triggered_spell_id, true, castItem, triggeredByAura);
|
||||
|
||||
if (cooldown && GetTypeId() == TYPEID_PLAYER)
|
||||
ToPlayer()->AddSpellCooldown(triggered_spell_id, 0, time(NULL) + cooldown);
|
||||
return true;
|
||||
}
|
||||
bool Unit::HandleModDamagePctTakenAuraProc(Unit* victim, uint32 /*damage*/, AuraEffect* triggeredByAura, SpellInfo const* /*procSpell*/, uint32 /*procFlag*/, uint32 /*procEx*/, uint32 cooldown)
|
||||
{
|
||||
SpellInfo const* dummySpell = triggeredByAura->GetSpellInfo();
|
||||
//uint32 effIndex = triggeredByAura->GetEffIndex();
|
||||
//int32 triggerAmount = triggeredByAura->GetAmount();
|
||||
|
||||
Item* castItem = triggeredByAura->GetBase()->GetCastItemGUID() && GetTypeId() == TYPEID_PLAYER
|
||||
? ToPlayer()->GetItemByGuid(triggeredByAura->GetBase()->GetCastItemGUID()) : NULL;
|
||||
|
||||
uint32 triggered_spell_id = 0;
|
||||
Unit* target = victim;
|
||||
int32 basepoints0 = 0;
|
||||
|
||||
switch (dummySpell->SpellFamilyName)
|
||||
{
|
||||
case SPELLFAMILY_PALADIN:
|
||||
{
|
||||
// Blessing of Sanctuary
|
||||
if (dummySpell->SpellFamilyFlags[0] & 0x10000000)
|
||||
{
|
||||
switch (getPowerType())
|
||||
{
|
||||
case POWER_MANA: triggered_spell_id = 57319; break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
// processed charge only counting case
|
||||
if (!triggered_spell_id)
|
||||
return true;
|
||||
|
||||
SpellInfo const* triggerEntry = sSpellMgr->GetSpellInfo(triggered_spell_id);
|
||||
|
||||
if (!triggerEntry)
|
||||
{
|
||||
sLog->outError(LOG_FILTER_UNITS, "Unit::HandleModDamagePctTakenAuraProc: Spell %u has non-existing triggered spell %u", dummySpell->Id, triggered_spell_id);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (cooldown && GetTypeId() == TYPEID_PLAYER && ToPlayer()->HasSpellCooldown(triggered_spell_id))
|
||||
return false;
|
||||
|
||||
if (basepoints0)
|
||||
CastCustomSpell(target, triggered_spell_id, &basepoints0, NULL, NULL, true, castItem, triggeredByAura);
|
||||
else
|
||||
CastSpell(target, triggered_spell_id, true, castItem, triggeredByAura);
|
||||
|
||||
if (cooldown && GetTypeId() == TYPEID_PLAYER)
|
||||
ToPlayer()->AddSpellCooldown(triggered_spell_id, 0, time(NULL) + cooldown);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// Used in case when access to whole aura is needed
|
||||
// All procs should be handled like this...
|
||||
@@ -8303,12 +7700,6 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg
|
||||
RemoveAuraFromStack(auraSpellInfo->Id);
|
||||
return false;
|
||||
}
|
||||
if (auraSpellInfo->Id == 50720)
|
||||
{
|
||||
target = triggeredByAura->GetCaster();
|
||||
if (!target)
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case SPELLFAMILY_WARLOCK:
|
||||
{
|
||||
@@ -14536,7 +13927,7 @@ void Unit::ProcDamageAndSpellFor(bool isVictim, Unit* target, uint32 procFlag, u
|
||||
SpellInfo const* spellInfo = i->aura->GetSpellInfo();
|
||||
uint32 Id = i->aura->GetId();
|
||||
|
||||
AuraApplication const* aurApp = i->aura->GetApplicationOfTarget(GetGUID());
|
||||
AuraApplication* aurApp = i->aura->GetApplicationOfTarget(GetGUID());
|
||||
|
||||
bool prepare = i->aura->CallScriptPrepareProcHandlers(aurApp, eventInfo);
|
||||
|
||||
@@ -14589,17 +13980,10 @@ void Unit::ProcDamageAndSpellFor(bool isVictim, Unit* target, uint32 procFlag, u
|
||||
case SPELL_AURA_PROC_TRIGGER_DAMAGE:
|
||||
{
|
||||
// target has to be valid
|
||||
if (!target)
|
||||
if (!eventInfo.GetProcTarget())
|
||||
break;
|
||||
|
||||
sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "ProcDamageAndSpell: doing %u damage from spell id %u (triggered by %s aura of spell %u)", triggeredByAura->GetAmount(), spellInfo->Id, (isVictim?"a victim's":"an attacker's"), triggeredByAura->GetId());
|
||||
SpellNonMeleeDamage damageInfo(this, target, spellInfo->Id, spellInfo->SchoolMask);
|
||||
uint32 newDamage = SpellDamageBonusDone(target, spellInfo, triggeredByAura->GetAmount(), SPELL_DIRECT_DAMAGE);
|
||||
newDamage = target->SpellDamageBonusTaken(this, spellInfo, newDamage, SPELL_DIRECT_DAMAGE);
|
||||
CalculateSpellDamageTaken(&damageInfo, newDamage, spellInfo);
|
||||
DealDamageMods(damageInfo.target, damageInfo.damage, &damageInfo.absorb);
|
||||
SendSpellNonMeleeDamageLog(&damageInfo);
|
||||
DealSpellDamage(&damageInfo, true);
|
||||
triggeredByAura->HandleProcTriggerDamageAuraProc(aurApp, eventInfo); // this function is part of the new proc system
|
||||
takeCharges = true;
|
||||
break;
|
||||
}
|
||||
@@ -14612,22 +13996,12 @@ void Unit::ProcDamageAndSpellFor(bool isVictim, Unit* target, uint32 procFlag, u
|
||||
break;
|
||||
}
|
||||
case SPELL_AURA_OBS_MOD_POWER:
|
||||
sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "ProcDamageAndSpell: casting spell id %u (triggered by %s aura of spell %u)", spellInfo->Id, (isVictim?"a victim's":"an attacker's"), triggeredByAura->GetId());
|
||||
if (HandleObsModEnergyAuraProc(target, damage, triggeredByAura, procSpell, procFlag, procExtra, cooldown))
|
||||
takeCharges = true;
|
||||
break;
|
||||
case SPELL_AURA_MOD_SPELL_CRIT_CHANCE:
|
||||
case SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN:
|
||||
sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "ProcDamageAndSpell: casting spell id %u (triggered by %s aura of spell %u)", spellInfo->Id, (isVictim?"a victim's":"an attacker's"), triggeredByAura->GetId());
|
||||
if (HandleModDamagePctTakenAuraProc(target, damage, triggeredByAura, procSpell, procFlag, procExtra, cooldown))
|
||||
takeCharges = true;
|
||||
break;
|
||||
case SPELL_AURA_MOD_MELEE_HASTE:
|
||||
{
|
||||
sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "ProcDamageAndSpell: casting spell id %u (triggered by %s haste aura of spell %u)", spellInfo->Id, (isVictim?"a victim's":"an attacker's"), triggeredByAura->GetId());
|
||||
if (HandleHasteAuraProc(target, damage, triggeredByAura, procSpell, procFlag, procExtra, cooldown))
|
||||
takeCharges = true;
|
||||
sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "ProcDamageAndSpell: casting spell id %u (triggered by %s aura of spell %u)", spellInfo->Id, isVictim ? "a victim's" : "an attacker's", triggeredByAura->GetId());
|
||||
takeCharges = true;
|
||||
break;
|
||||
}
|
||||
case SPELL_AURA_OVERRIDE_CLASS_SCRIPTS:
|
||||
{
|
||||
sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "ProcDamageAndSpell: casting spell id %u (triggered by %s aura of spell %u)", spellInfo->Id, (isVictim?"a victim's":"an attacker's"), triggeredByAura->GetId());
|
||||
@@ -14699,11 +14073,6 @@ void Unit::ProcDamageAndSpellFor(bool isVictim, Unit* target, uint32 procFlag, u
|
||||
if (triggeredByAura->GetCasterGUID() == target->GetGUID())
|
||||
takeCharges = true;
|
||||
break;
|
||||
case SPELL_AURA_MOD_SPELL_CRIT_CHANCE:
|
||||
sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "ProcDamageAndSpell: casting spell id %u (triggered by %s spell crit chance aura of spell %u)", spellInfo->Id, (isVictim?"a victim's":"an attacker's"), triggeredByAura->GetId());
|
||||
if (procSpell && HandleSpellCritChanceAuraProc(target, damage, triggeredByAura, procSpell, procFlag, procExtra, cooldown))
|
||||
takeCharges = true;
|
||||
break;
|
||||
// CC Auras which use their amount amount to drop
|
||||
// Are there any more auras which need this?
|
||||
case SPELL_AURA_MOD_CONFUSE:
|
||||
|
||||
@@ -965,6 +965,28 @@ struct SpellPeriodicAuraLogInfo
|
||||
|
||||
uint32 createProcExtendMask(SpellNonMeleeDamage* damageInfo, SpellMissInfo missCondition);
|
||||
|
||||
struct RedirectThreatInfo
|
||||
{
|
||||
RedirectThreatInfo() : _targetGUID(0), _threatPct(0) { }
|
||||
uint64 _targetGUID;
|
||||
uint32 _threatPct;
|
||||
|
||||
uint64 GetTargetGUID() { return _targetGUID; }
|
||||
uint32 GetThreatPct() { return _threatPct; }
|
||||
|
||||
void Set(uint64 guid, uint32 pct)
|
||||
{
|
||||
_targetGUID = guid;
|
||||
_threatPct = pct;
|
||||
}
|
||||
|
||||
void ModifyThreatPct(int32 amount)
|
||||
{
|
||||
amount += _threatPct;
|
||||
_threatPct = uint32(std::max(0, amount));
|
||||
}
|
||||
};
|
||||
|
||||
#define MAX_DECLINED_NAME_CASES 5
|
||||
|
||||
struct DeclinedName
|
||||
@@ -2153,13 +2175,12 @@ class Unit : public WorldObject
|
||||
uint32 GetModelForForm(ShapeshiftForm form) const;
|
||||
uint32 GetModelForTotem(PlayerTotemType totemType);
|
||||
|
||||
void SetReducedThreatPercent(uint32 pct, uint64 guid)
|
||||
{
|
||||
m_reducedThreatPercent = pct;
|
||||
m_misdirectionTargetGUID = guid;
|
||||
}
|
||||
uint32 GetReducedThreatPercent() { return m_reducedThreatPercent; }
|
||||
Unit* GetMisdirectionTarget() { return m_misdirectionTargetGUID ? GetUnit(*this, m_misdirectionTargetGUID) : NULL; }
|
||||
// Redirect Threat
|
||||
void SetRedirectThreat(uint64 guid, uint32 pct) { _redirectThreadInfo.Set(guid, pct); }
|
||||
void ResetRedirectThreat() { SetRedirectThreat(0, 0); }
|
||||
void ModifyRedirectThreat(int32 amount) { _redirectThreadInfo.ModifyThreatPct(amount); }
|
||||
uint32 GetRedirectThreatPercent() { return _redirectThreadInfo.GetThreatPct(); }
|
||||
Unit* GetRedirectThreatTarget() { return _redirectThreadInfo.GetTargetGUID() ? GetUnit(*this, _redirectThreadInfo.GetTargetGUID()) : NULL; }
|
||||
|
||||
bool IsAIEnabled, NeedChangeAI;
|
||||
bool CreateVehicleKit(uint32 id, uint32 creatureEntry);
|
||||
@@ -2305,10 +2326,6 @@ class Unit : public WorldObject
|
||||
private:
|
||||
bool IsTriggeredAtSpellProcEvent(Unit* victim, Aura* aura, SpellInfo const* procSpell, uint32 procFlag, uint32 procExtra, WeaponAttackType attType, bool isVictim, bool active, SpellProcEventEntry const* & spellProcEvent);
|
||||
bool HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggeredByAura, SpellInfo const* procSpell, uint32 procFlag, uint32 procEx, uint32 cooldown);
|
||||
bool HandleHasteAuraProc(Unit* victim, uint32 damage, AuraEffect* triggeredByAura, SpellInfo const* procSpell, uint32 procFlag, uint32 procEx, uint32 cooldown);
|
||||
bool HandleSpellCritChanceAuraProc(Unit* victim, uint32 damage, AuraEffect* triggredByAura, SpellInfo const* procSpell, uint32 procFlag, uint32 procEx, uint32 cooldown);
|
||||
bool HandleObsModEnergyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggeredByAura, SpellInfo const* procSpell, uint32 procFlag, uint32 procEx, uint32 cooldown);
|
||||
bool HandleModDamagePctTakenAuraProc(Unit* victim, uint32 damage, AuraEffect* triggeredByAura, SpellInfo const* procSpell, uint32 procFlag, uint32 procEx, uint32 cooldown);
|
||||
bool HandleAuraProc(Unit* victim, uint32 damage, Aura* triggeredByAura, SpellInfo const* procSpell, uint32 procFlag, uint32 procEx, uint32 cooldown, bool * handled);
|
||||
bool HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* triggeredByAura, SpellInfo const* procSpell, uint32 procFlag, uint32 procEx, uint32 cooldown);
|
||||
bool HandleOverrideClassScriptAuraProc(Unit* victim, uint32 damage, AuraEffect* triggeredByAura, SpellInfo const* procSpell, uint32 cooldown);
|
||||
@@ -2341,8 +2358,7 @@ class Unit : public WorldObject
|
||||
|
||||
ComboPointHolderSet m_ComboPointHolders;
|
||||
|
||||
uint32 m_reducedThreatPercent;
|
||||
uint64 m_misdirectionTargetGUID;
|
||||
RedirectThreatInfo _redirectThreadInfo;
|
||||
|
||||
bool m_cleanupDone; // lock made to not add stuff after cleanup before delete
|
||||
bool m_duringRemoveFromWorld; // lock made to not add stuff after begining removing from world
|
||||
|
||||
@@ -484,16 +484,6 @@ int32 AuraEffect::CalculateAmount(Unit* caster)
|
||||
case SPELL_AURA_MANA_SHIELD:
|
||||
m_canBeRecalculated = false;
|
||||
break;
|
||||
case SPELL_AURA_DUMMY:
|
||||
if (!caster)
|
||||
break;
|
||||
// Earth Shield
|
||||
if (GetSpellInfo()->SpellFamilyName == SPELLFAMILY_SHAMAN && m_spellInfo->SpellFamilyFlags[1] & 0x400)
|
||||
{
|
||||
amount = caster->SpellHealingBonusDone(GetBase()->GetUnitOwner(), GetSpellInfo(), amount, SPELL_DIRECT_DAMAGE);
|
||||
amount = GetBase()->GetUnitOwner()->SpellHealingBonusTaken(caster, GetSpellInfo(), amount, SPELL_DIRECT_DAMAGE);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -4694,10 +4684,6 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool
|
||||
if (Aura* newAura = target->AddAura(71564, target))
|
||||
newAura->SetStackAmount(newAura->GetSpellInfo()->StackAmount);
|
||||
break;
|
||||
case 59628: // Tricks of the Trade
|
||||
if (caster && caster->GetMisdirectionTarget())
|
||||
target->SetReducedThreatPercent(100, caster->GetMisdirectionTarget()->GetGUID());
|
||||
break;
|
||||
}
|
||||
}
|
||||
// AT REMOVE
|
||||
@@ -4793,20 +4779,6 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool
|
||||
if (GetId() == 61777)
|
||||
target->CastSpell(target, GetAmount(), true);
|
||||
break;
|
||||
case SPELLFAMILY_ROGUE:
|
||||
// Tricks of the trade
|
||||
switch (GetId())
|
||||
{
|
||||
case 59628: //Tricks of the trade buff on rogue (6sec duration)
|
||||
target->SetReducedThreatPercent(0, 0);
|
||||
break;
|
||||
case 57934: //Tricks of the trade buff on rogue (30sec duration)
|
||||
if (aurApp->GetRemoveMode() == AURA_REMOVE_BY_EXPIRE || !caster->GetMisdirectionTarget())
|
||||
target->SetReducedThreatPercent(0, 0);
|
||||
else
|
||||
target->SetReducedThreatPercent(0, caster->GetMisdirectionTarget()->GetGUID());
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1537,17 +1537,6 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b
|
||||
// mods at aura apply or remove
|
||||
switch (GetSpellInfo()->SpellFamilyName)
|
||||
{
|
||||
case SPELLFAMILY_GENERIC:
|
||||
switch (GetId())
|
||||
{
|
||||
case 50720: // Vigilance
|
||||
if (apply)
|
||||
target->CastSpell(caster, 59665, true, 0, 0, caster->GetGUID());
|
||||
else
|
||||
target->SetReducedThreatPercent(0, 0);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case SPELLFAMILY_DRUID:
|
||||
// Enrage
|
||||
if ((GetSpellInfo()->SpellFamilyFlags[0] & 0x80000) && GetSpellInfo()->SpellIconID == 961)
|
||||
|
||||
@@ -5791,7 +5791,7 @@ void Spell::EffectRedirectThreat(SpellEffIndex /*effIndex*/)
|
||||
return;
|
||||
|
||||
if (unitTarget)
|
||||
m_caster->SetReducedThreatPercent((uint32)damage, unitTarget->GetGUID());
|
||||
m_caster->SetRedirectThreat(unitTarget->GetGUID(), uint32(damage));
|
||||
}
|
||||
|
||||
void Spell::EffectGameObjectDamage(SpellEffIndex /*effIndex*/)
|
||||
|
||||
@@ -46,6 +46,7 @@ enum Spells
|
||||
SPELL_FRENZIED_BLOODTHIRST_VISUAL = 71949,
|
||||
SPELL_VAMPIRIC_BITE = 71726,
|
||||
SPELL_ESSENCE_OF_THE_BLOOD_QUEEN_PLR = 70879,
|
||||
SPELL_ESSENCE_OF_THE_BLOOD_QUEEN_HEAL = 70872,
|
||||
SPELL_FRENZIED_BLOODTHIRST = 70877,
|
||||
SPELL_UNCONTROLLABLE_FRENZY = 70923,
|
||||
SPELL_PRESENCE_OF_THE_DARKFALLEN = 71952,
|
||||
@@ -698,6 +699,42 @@ class spell_blood_queen_bloodbolt : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
// 70871 - Essence of the Blood Queen
|
||||
class spell_blood_queen_essence_of_the_blood_queen : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_blood_queen_essence_of_the_blood_queen() : SpellScriptLoader("spell_blood_queen_essence_of_the_blood_queen") { }
|
||||
|
||||
class spell_blood_queen_essence_of_the_blood_queen_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_blood_queen_essence_of_the_blood_queen_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/)
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_ESSENCE_OF_THE_BLOOD_QUEEN_HEAL))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void OnProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
int32 heal = CalculatePct(int32(eventInfo.GetDamageInfo()->GetDamage()), aurEff->GetAmount());
|
||||
GetTarget()->CastCustomSpell(SPELL_ESSENCE_OF_THE_BLOOD_QUEEN_HEAL, SPELLVALUE_BASE_POINT0, heal, GetTarget());
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
OnEffectProc += AuraEffectProcFn(spell_blood_queen_essence_of_the_blood_queen_AuraScript::OnProc, EFFECT_1, SPELL_AURA_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const
|
||||
{
|
||||
return new spell_blood_queen_essence_of_the_blood_queen_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
class spell_blood_queen_pact_of_the_darkfallen : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
@@ -849,6 +886,7 @@ void AddSC_boss_blood_queen_lana_thel()
|
||||
new spell_blood_queen_vampiric_bite();
|
||||
new spell_blood_queen_frenzied_bloodthirst();
|
||||
new spell_blood_queen_bloodbolt();
|
||||
new spell_blood_queen_essence_of_the_blood_queen();
|
||||
new spell_blood_queen_pact_of_the_darkfallen();
|
||||
new spell_blood_queen_pact_of_the_darkfallen_dmg();
|
||||
new spell_blood_queen_pact_of_the_darkfallen_dmg_target();
|
||||
|
||||
@@ -145,6 +145,7 @@ enum Spells
|
||||
SPELL_RESTORE_SOUL = 72595,
|
||||
SPELL_RESTORE_SOULS = 73650, // Heroic
|
||||
SPELL_DARK_HUNGER = 69383, // Passive proc healing
|
||||
SPELL_DARK_HUNGER_HEAL = 69384,
|
||||
SPELL_DESTROY_SOUL = 74086, // Used when Terenas Menethil dies
|
||||
SPELL_SOUL_RIP = 69397, // Deals increasing damage
|
||||
SPELL_SOUL_RIP_DAMAGE = 69398,
|
||||
@@ -3008,6 +3009,41 @@ class spell_the_lich_king_restore_soul : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
class spell_the_lich_king_dark_hunger : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_the_lich_king_dark_hunger() : SpellScriptLoader("spell_the_lich_king_dark_hunger") { }
|
||||
|
||||
class spell_the_lich_king_dark_hunger_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_the_lich_king_dark_hunger_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/)
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_DARK_HUNGER_HEAL))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
int32 heal = int32(eventInfo.GetDamageInfo()->GetDamage() / 2);
|
||||
GetTarget()->CastCustomSpell(SPELL_DARK_HUNGER_HEAL, SPELLVALUE_BASE_POINT0, heal, GetTarget(), true, NULL, aurEff);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
OnEffectProc += AuraEffectProcFn(spell_the_lich_king_dark_hunger_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const
|
||||
{
|
||||
return new spell_the_lich_king_dark_hunger_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
class spell_the_lich_king_in_frostmourne_room : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
@@ -3253,6 +3289,7 @@ void AddSC_boss_the_lich_king()
|
||||
new spell_the_lich_king_lights_favor();
|
||||
new spell_the_lich_king_soul_rip();
|
||||
new spell_the_lich_king_restore_soul();
|
||||
new spell_the_lich_king_dark_hunger();
|
||||
new spell_the_lich_king_in_frostmourne_room();
|
||||
new spell_the_lich_king_summon_spirit_bomb();
|
||||
new spell_the_lich_king_trigger_vile_spirit();
|
||||
|
||||
@@ -31,6 +31,7 @@ enum DeathKnightSpells
|
||||
SPELL_DK_ANTI_MAGIC_SHELL_TALENT = 51052,
|
||||
SPELL_DK_BLACK_ICE_R1 = 49140,
|
||||
SPELL_DK_BLOOD_BOIL_TRIGGERED = 65658,
|
||||
SPELL_DK_BLOOD_GORGED_HEAL = 50454,
|
||||
SPELL_DK_CORPSE_EXPLOSION_TRIGGERED = 43999,
|
||||
SPELL_DK_CORPSE_EXPLOSION_VISUAL = 51270,
|
||||
SPELL_DK_DEATH_COIL_DAMAGE = 47632,
|
||||
@@ -252,6 +253,58 @@ class spell_dk_blood_boil : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
// 50453 - Bloodworms Health Leech
|
||||
class spell_dk_blood_gorged : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_dk_blood_gorged() : SpellScriptLoader("spell_dk_blood_gorged") { }
|
||||
|
||||
class spell_dk_blood_gorged_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_dk_blood_gorged_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/)
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_DK_BLOOD_GORGED_HEAL))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Load()
|
||||
{
|
||||
_procTarget = NULL;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CheckProc(ProcEventInfo& /*eventInfo*/)
|
||||
{
|
||||
_procTarget = GetTarget()->GetOwner();
|
||||
return _procTarget;
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
int32 bp = int32(eventInfo.GetDamageInfo()->GetDamage() * 1.5f);
|
||||
GetTarget()->CastCustomSpell(SPELL_DK_BLOOD_GORGED_HEAL, SPELLVALUE_BASE_POINT0, bp, _procTarget, true, NULL, aurEff);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
DoCheckProc += AuraCheckProcFn(spell_dk_blood_gorged_AuraScript::CheckProc);
|
||||
OnEffectProc += AuraEffectProcFn(spell_dk_blood_gorged_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
|
||||
}
|
||||
|
||||
private:
|
||||
Unit* _procTarget;
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const
|
||||
{
|
||||
return new spell_dk_blood_gorged_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// 49158 - Corpse Explosion (51325, 51326, 51327, 51328)
|
||||
class spell_dk_corpse_explosion : public SpellScriptLoader
|
||||
{
|
||||
@@ -958,6 +1011,7 @@ void AddSC_deathknight_spell_scripts()
|
||||
new spell_dk_anti_magic_shell_self();
|
||||
new spell_dk_anti_magic_zone();
|
||||
new spell_dk_blood_boil();
|
||||
new spell_dk_blood_gorged();
|
||||
new spell_dk_corpse_explosion();
|
||||
new spell_dk_death_coil();
|
||||
new spell_dk_death_gate();
|
||||
|
||||
@@ -37,6 +37,8 @@ enum DruidSpells
|
||||
SPELL_DRUID_KING_OF_THE_JUNGLE = 48492,
|
||||
SPELL_DRUID_LIFEBLOOM_ENERGIZE = 64372,
|
||||
SPELL_DRUID_LIFEBLOOM_FINAL_HEAL = 33778,
|
||||
SPELL_DRUID_LIVING_SEED_HEAL = 48503,
|
||||
SPELL_DRUID_LIVING_SEED_PROC = 48504,
|
||||
SPELL_DRUID_NATURES_SPLENDOR = 57865,
|
||||
SPELL_DRUID_SURVIVAL_INSTINCTS = 50322,
|
||||
SPELL_DRUID_SAVAGE_ROAR = 62071,
|
||||
@@ -327,6 +329,77 @@ class spell_dru_lifebloom : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
// -48496 - Living Seed
|
||||
class spell_dru_living_seed : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_dru_living_seed() : SpellScriptLoader("spell_dru_living_seed") { }
|
||||
|
||||
class spell_dru_living_seed_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_dru_living_seed_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/)
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_LIVING_SEED_PROC))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
int32 amount = CalculatePct(eventInfo.GetHealInfo()->GetHeal(), aurEff->GetAmount());
|
||||
GetTarget()->CastCustomSpell(SPELL_DRUID_LIVING_SEED_PROC, SPELLVALUE_BASE_POINT0, amount, eventInfo.GetProcTarget(), true, NULL, aurEff);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
OnEffectProc += AuraEffectProcFn(spell_dru_living_seed_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const
|
||||
{
|
||||
return new spell_dru_living_seed_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// 48504 - Living Seed (Proc)
|
||||
class spell_dru_living_seed_proc : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_dru_living_seed_proc() : SpellScriptLoader("spell_dru_living_seed_proc") { }
|
||||
|
||||
class spell_dru_living_seed_proc_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_dru_living_seed_proc_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/)
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_LIVING_SEED_HEAL))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
GetTarget()->CastCustomSpell(SPELL_DRUID_LIVING_SEED_HEAL, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetTarget(), true, NULL, aurEff);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
OnEffectProc += AuraEffectProcFn(spell_dru_living_seed_proc_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const
|
||||
{
|
||||
return new spell_dru_living_seed_proc_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// 69366 - Moonkin Form passive
|
||||
class spell_dru_moonkin_form_passive : public SpellScriptLoader
|
||||
{
|
||||
@@ -921,6 +994,8 @@ void AddSC_druid_spell_scripts()
|
||||
new spell_dru_innervate();
|
||||
new spell_dru_insect_swarm();
|
||||
new spell_dru_lifebloom();
|
||||
new spell_dru_living_seed();
|
||||
new spell_dru_living_seed_proc();
|
||||
new spell_dru_moonkin_form_passive();
|
||||
new spell_dru_owlkin_frenzy();
|
||||
new spell_dru_predatory_strikes();
|
||||
|
||||
@@ -72,6 +72,97 @@ class spell_gen_absorb0_hitlimit1 : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
// 28764 - Adaptive Warding (Frostfire Regalia Set)
|
||||
enum AdaptiveWarding
|
||||
{
|
||||
SPELL_GEN_ADAPTIVE_WARDING_FIRE = 28765,
|
||||
SPELL_GEN_ADAPTIVE_WARDING_NATURE = 28768,
|
||||
SPELL_GEN_ADAPTIVE_WARDING_FROST = 28766,
|
||||
SPELL_GEN_ADAPTIVE_WARDING_SHADOW = 28769,
|
||||
SPELL_GEN_ADAPTIVE_WARDING_ARCANE = 28770
|
||||
};
|
||||
|
||||
class spell_gen_adaptive_warding : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_gen_adaptive_warding() : SpellScriptLoader("spell_gen_adaptive_warding") { }
|
||||
|
||||
class spell_gen_adaptive_warding_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_gen_adaptive_warding_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/)
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_GEN_ADAPTIVE_WARDING_FIRE) ||
|
||||
!sSpellMgr->GetSpellInfo(SPELL_GEN_ADAPTIVE_WARDING_NATURE) ||
|
||||
!sSpellMgr->GetSpellInfo(SPELL_GEN_ADAPTIVE_WARDING_FROST) ||
|
||||
!sSpellMgr->GetSpellInfo(SPELL_GEN_ADAPTIVE_WARDING_SHADOW) ||
|
||||
!sSpellMgr->GetSpellInfo(SPELL_GEN_ADAPTIVE_WARDING_ARCANE))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CheckProc(ProcEventInfo& eventInfo)
|
||||
{
|
||||
if (eventInfo.GetDamageInfo()->GetSpellInfo()) // eventInfo.GetSpellInfo()
|
||||
return false;
|
||||
|
||||
// find Mage Armor
|
||||
if (!GetTarget()->GetAuraEffect(SPELL_AURA_MOD_MANA_REGEN_INTERRUPT, SPELLFAMILY_MAGE, 0x10000000, 0x0, 0x0))
|
||||
return false;
|
||||
|
||||
switch (GetFirstSchoolInMask(eventInfo.GetSchoolMask()))
|
||||
{
|
||||
case SPELL_SCHOOL_NORMAL:
|
||||
case SPELL_SCHOOL_HOLY:
|
||||
return false;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
|
||||
uint32 spellId = 0;
|
||||
switch (GetFirstSchoolInMask(eventInfo.GetSchoolMask()))
|
||||
{
|
||||
case SPELL_SCHOOL_FIRE:
|
||||
spellId = SPELL_GEN_ADAPTIVE_WARDING_FIRE;
|
||||
break;
|
||||
case SPELL_SCHOOL_NATURE:
|
||||
spellId = SPELL_GEN_ADAPTIVE_WARDING_NATURE;
|
||||
break;
|
||||
case SPELL_SCHOOL_FROST:
|
||||
spellId = SPELL_GEN_ADAPTIVE_WARDING_FROST;
|
||||
break;
|
||||
case SPELL_SCHOOL_SHADOW:
|
||||
spellId = SPELL_GEN_ADAPTIVE_WARDING_SHADOW;
|
||||
break;
|
||||
case SPELL_SCHOOL_ARCANE:
|
||||
spellId = SPELL_GEN_ADAPTIVE_WARDING_ARCANE;
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
GetTarget()->CastSpell(GetTarget(), spellId, true, NULL, aurEff);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
DoCheckProc += AuraCheckProcFn(spell_gen_adaptive_warding_AuraScript::CheckProc);
|
||||
OnEffectProc += AuraEffectProcFn(spell_gen_adaptive_warding_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const
|
||||
{
|
||||
return new spell_gen_adaptive_warding_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// 41337 Aura of Anger
|
||||
class spell_gen_aura_of_anger : public SpellScriptLoader
|
||||
{
|
||||
@@ -378,6 +469,93 @@ class spell_gen_nightmare_vine : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
// 27539 - Obsidian Armor
|
||||
enum ObsidianArmor
|
||||
{
|
||||
SPELL_GEN_OBSIDIAN_ARMOR_HOLY = 27536,
|
||||
SPELL_GEN_OBSIDIAN_ARMOR_FIRE = 27533,
|
||||
SPELL_GEN_OBSIDIAN_ARMOR_NATURE = 27538,
|
||||
SPELL_GEN_OBSIDIAN_ARMOR_FROST = 27534,
|
||||
SPELL_GEN_OBSIDIAN_ARMOR_SHADOW = 27535,
|
||||
SPELL_GEN_OBSIDIAN_ARMOR_ARCANE = 27540
|
||||
};
|
||||
|
||||
class spell_gen_obsidian_armor : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_gen_obsidian_armor() : SpellScriptLoader("spell_gen_obsidian_armor") { }
|
||||
|
||||
class spell_gen_obsidian_armor_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_gen_obsidian_armor_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/)
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_GEN_OBSIDIAN_ARMOR_HOLY) ||
|
||||
!sSpellMgr->GetSpellInfo(SPELL_GEN_OBSIDIAN_ARMOR_FIRE) ||
|
||||
!sSpellMgr->GetSpellInfo(SPELL_GEN_OBSIDIAN_ARMOR_NATURE) ||
|
||||
!sSpellMgr->GetSpellInfo(SPELL_GEN_OBSIDIAN_ARMOR_FROST) ||
|
||||
!sSpellMgr->GetSpellInfo(SPELL_GEN_OBSIDIAN_ARMOR_SHADOW) ||
|
||||
!sSpellMgr->GetSpellInfo(SPELL_GEN_OBSIDIAN_ARMOR_ARCANE))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CheckProc(ProcEventInfo& eventInfo)
|
||||
{
|
||||
if (eventInfo.GetDamageInfo()->GetSpellInfo()) // eventInfo.GetSpellInfo()
|
||||
return false;
|
||||
|
||||
if (GetFirstSchoolInMask(eventInfo.GetSchoolMask()) == SPELL_SCHOOL_NORMAL)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void OnProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
|
||||
uint32 spellId = 0;
|
||||
switch (GetFirstSchoolInMask(eventInfo.GetSchoolMask()))
|
||||
{
|
||||
case SPELL_SCHOOL_HOLY:
|
||||
spellId = SPELL_GEN_OBSIDIAN_ARMOR_HOLY;
|
||||
break;
|
||||
case SPELL_SCHOOL_FIRE:
|
||||
spellId = SPELL_GEN_OBSIDIAN_ARMOR_FIRE;
|
||||
break;
|
||||
case SPELL_SCHOOL_NATURE:
|
||||
spellId = SPELL_GEN_OBSIDIAN_ARMOR_NATURE;
|
||||
break;
|
||||
case SPELL_SCHOOL_FROST:
|
||||
spellId = SPELL_GEN_OBSIDIAN_ARMOR_FROST;
|
||||
break;
|
||||
case SPELL_SCHOOL_SHADOW:
|
||||
spellId = SPELL_GEN_OBSIDIAN_ARMOR_SHADOW;
|
||||
break;
|
||||
case SPELL_SCHOOL_ARCANE:
|
||||
spellId = SPELL_GEN_OBSIDIAN_ARMOR_ARCANE;
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
GetTarget()->CastSpell(GetTarget(), spellId, true, NULL, aurEff);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
DoCheckProc += AuraCheckProcFn(spell_gen_obsidian_armor_AuraScript::CheckProc);
|
||||
OnEffectProc += AuraEffectProcFn(spell_gen_obsidian_armor_AuraScript::OnProc, EFFECT_0, SPELL_AURA_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const
|
||||
{
|
||||
return new spell_gen_obsidian_armor_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// 45472 Parachute
|
||||
enum ParachuteSpells
|
||||
{
|
||||
@@ -3343,6 +3521,7 @@ class spell_gen_replenishment : public SpellScriptLoader
|
||||
void AddSC_generic_spell_scripts()
|
||||
{
|
||||
new spell_gen_absorb0_hitlimit1();
|
||||
new spell_gen_adaptive_warding();
|
||||
new spell_gen_aura_of_anger();
|
||||
new spell_gen_av_drekthar_presence();
|
||||
new spell_gen_burn_brutallus();
|
||||
@@ -3350,6 +3529,7 @@ void AddSC_generic_spell_scripts()
|
||||
new spell_gen_create_lance();
|
||||
new spell_gen_netherbloom();
|
||||
new spell_gen_nightmare_vine();
|
||||
new spell_gen_obsidian_armor();
|
||||
new spell_gen_parachute();
|
||||
new spell_gen_pet_summoned();
|
||||
new spell_gen_remove_flight_auras();
|
||||
|
||||
@@ -33,12 +33,15 @@
|
||||
enum HunterSpells
|
||||
{
|
||||
SPELL_HUNTER_ASPECT_OF_THE_BEAST_PET = 61669,
|
||||
SPELL_HUNTER_ASPECT_OF_THE_VIPER_ENERGIZE = 34075,
|
||||
SPELL_HUNTER_BESTIAL_WRATH = 19574,
|
||||
SPELL_HUNTER_CHIMERA_SHOT_SERPENT = 53353,
|
||||
SPELL_HUNTER_CHIMERA_SHOT_VIPER = 53358,
|
||||
SPELL_HUNTER_CHIMERA_SHOT_SCORPID = 53359,
|
||||
SPELL_HUNTER_GLYPHE_OF_ASPECT_OF_THE_VIPER = 56851,
|
||||
SPELL_HUNTER_INVIGORATION_TRIGGERED = 53398,
|
||||
SPELL_HUNTER_MASTERS_CALL_TRIGGERED = 62305,
|
||||
SPELL_HUNTER_MISDIRECTION_PROC = 35079,
|
||||
SPELL_HUNTER_PET_LAST_STAND_TRIGGERED = 53479,
|
||||
SPELL_HUNTER_PET_HEART_OF_THE_PHOENIX = 55709,
|
||||
SPELL_HUNTER_PET_HEART_OF_THE_PHOENIX_TRIGGERED = 54114,
|
||||
@@ -99,6 +102,50 @@ class spell_hun_aspect_of_the_beast : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
// 34074 - Aspect of the Viper
|
||||
class spell_hun_ascpect_of_the_viper : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_hun_ascpect_of_the_viper() : SpellScriptLoader("spell_hun_ascpect_of_the_viper") { }
|
||||
|
||||
class spell_hun_ascpect_of_the_viper_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_hun_ascpect_of_the_viper_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/)
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_HUNTER_ASPECT_OF_THE_VIPER_ENERGIZE))
|
||||
return false;
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_HUNTER_GLYPHE_OF_ASPECT_OF_THE_VIPER))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
|
||||
uint32 maxMana = GetTarget()->GetMaxPower(POWER_MANA);
|
||||
int32 mana = CalculatePct(maxMana, GetTarget()->GetAttackTime(RANGED_ATTACK) / 1000.0f);
|
||||
|
||||
if (AuraEffect const* glyphe = GetTarget()->GetAuraEffect(SPELL_HUNTER_GLYPHE_OF_ASPECT_OF_THE_VIPER, EFFECT_0))
|
||||
AddPct(mana, glyphe->GetAmount());
|
||||
|
||||
GetTarget()->CastCustomSpell(SPELL_HUNTER_ASPECT_OF_THE_VIPER_ENERGIZE, SPELLVALUE_BASE_POINT0, mana, GetTarget(), true, NULL, aurEff);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
OnEffectProc += AuraEffectProcFn(spell_hun_ascpect_of_the_viper_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_OBS_MOD_POWER);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const
|
||||
{
|
||||
return new spell_hun_ascpect_of_the_viper_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// 53209 - Chimera Shot
|
||||
class spell_hun_chimera_shot : public SpellScriptLoader
|
||||
{
|
||||
@@ -358,16 +405,35 @@ class spell_hun_misdirection : public SpellScriptLoader
|
||||
{
|
||||
PrepareAuraScript(spell_hun_misdirection_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/)
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_HUNTER_MISDIRECTION_PROC))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
if (Unit* caster = GetCaster())
|
||||
if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_DEFAULT)
|
||||
caster->SetReducedThreatPercent(0, 0);
|
||||
if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_DEFAULT)
|
||||
GetTarget()->ResetRedirectThreat();
|
||||
}
|
||||
|
||||
bool CheckProc(ProcEventInfo& /*eventInfo*/)
|
||||
{
|
||||
return GetTarget()->GetRedirectThreatTarget();
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
GetTarget()->CastSpell(GetTarget(), SPELL_HUNTER_MISDIRECTION_PROC, true, NULL, aurEff);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
AfterEffectRemove += AuraEffectRemoveFn(spell_hun_misdirection_AuraScript::OnRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
|
||||
DoCheckProc += AuraCheckProcFn(spell_hun_misdirection_AuraScript::CheckProc);
|
||||
OnEffectProc += AuraEffectProcFn(spell_hun_misdirection_AuraScript::HandleProc, EFFECT_1, SPELL_AURA_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -377,7 +443,7 @@ class spell_hun_misdirection : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
// 35079 - Misdirection proc
|
||||
// 35079 - Misdirection (Proc)
|
||||
class spell_hun_misdirection_proc : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
@@ -389,8 +455,7 @@ class spell_hun_misdirection_proc : public SpellScriptLoader
|
||||
|
||||
void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
if (GetCaster())
|
||||
GetCaster()->SetReducedThreatPercent(0, 0);
|
||||
GetTarget()->ResetRedirectThreat();
|
||||
}
|
||||
|
||||
void Register()
|
||||
@@ -740,6 +805,7 @@ class spell_hun_target_only_pet_and_owner : public SpellScriptLoader
|
||||
void AddSC_hunter_spell_scripts()
|
||||
{
|
||||
new spell_hun_aspect_of_the_beast();
|
||||
new spell_hun_ascpect_of_the_viper();
|
||||
new spell_hun_chimera_shot();
|
||||
new spell_hun_disengage();
|
||||
new spell_hun_invigoration();
|
||||
|
||||
@@ -102,6 +102,63 @@ class spell_item_arcane_shroud : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
// 64411 - Blessing of Ancient Kings (Val'anyr, Hammer of Ancient Kings)
|
||||
enum BlessingOfAncientKings
|
||||
{
|
||||
SPELL_PROTECTION_OF_ANCIENT_KINGS = 64413
|
||||
};
|
||||
|
||||
class spell_item_blessing_of_ancient_kings : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_item_blessing_of_ancient_kings() : SpellScriptLoader("spell_item_blessing_of_ancient_kings") { }
|
||||
|
||||
class spell_item_blessing_of_ancient_kings_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_item_blessing_of_ancient_kings_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/)
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_PROTECTION_OF_ANCIENT_KINGS))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CheckProc(ProcEventInfo& eventInfo)
|
||||
{
|
||||
return eventInfo.GetProcTarget();
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
|
||||
int32 absorb = int32(CalculatePct(eventInfo.GetHealInfo()->GetHeal(), 15.0f));
|
||||
if (AuraEffect* protEff = eventInfo.GetProcTarget()->GetAuraEffect(SPELL_PROTECTION_OF_ANCIENT_KINGS, 0, eventInfo.GetActor()->GetGUID()))
|
||||
{
|
||||
// The shield can grow to a maximum size of 20,000 damage absorbtion
|
||||
protEff->SetAmount(std::min<int32>(protEff->GetAmount() + absorb, 20000));
|
||||
|
||||
// Refresh and return to prevent replacing the aura
|
||||
aurEff->GetBase()->RefreshDuration();
|
||||
}
|
||||
else
|
||||
GetTarget()->CastCustomSpell(SPELL_PROTECTION_OF_ANCIENT_KINGS, SPELLVALUE_BASE_POINT0, absorb, eventInfo.GetProcTarget(), true, NULL, aurEff);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
DoCheckProc += AuraCheckProcFn(spell_item_blessing_of_ancient_kings_AuraScript::CheckProc);
|
||||
OnEffectProc += AuraEffectProcFn(spell_item_blessing_of_ancient_kings_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const
|
||||
{
|
||||
return new spell_item_blessing_of_ancient_kings_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// 8342 - Defibrillate (Goblin Jumper Cables) have 33% chance on success
|
||||
// 22999 - Defibrillate (Goblin Jumper Cables XL) have 50% chance on success
|
||||
// 54732 - Defibrillate (Gnomish Army Knife) have 67% chance on success
|
||||
@@ -444,6 +501,47 @@ class spell_item_mingos_fortune_generator : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
// 71875, 71877 - Item - Black Bruise: Necrotic Touch Proc
|
||||
enum NecroticTouch
|
||||
{
|
||||
SPELL_ITEM_NECROTIC_TOUCH_PROC = 71879
|
||||
};
|
||||
|
||||
class spell_item_necrotic_touch : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_item_necrotic_touch() : SpellScriptLoader("spell_item_necrotic_touch") { }
|
||||
|
||||
class spell_item_necrotic_touch_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_item_necrotic_touch_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/)
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_ITEM_NECROTIC_TOUCH_PROC))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
int32 bp = CalculatePct(int32(eventInfo.GetDamageInfo()->GetDamage()), aurEff->GetAmount());
|
||||
GetTarget()->CastCustomSpell(SPELL_ITEM_NECROTIC_TOUCH_PROC, SPELLVALUE_BASE_POINT0, bp, GetTarget(), true, NULL, aurEff);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
OnEffectProc += AuraEffectProcFn(spell_item_necrotic_touch_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const
|
||||
{
|
||||
return new spell_item_necrotic_touch_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// http://www.wowhead.com/item=10720 Gnomish Net-o-Matic Projector
|
||||
// 13120 Net-o-Matic
|
||||
enum NetOMaticSpells
|
||||
@@ -711,6 +809,189 @@ class spell_item_scroll_of_recall : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
// 71169 - Shadow's Fate (Shadowmourne questline)
|
||||
enum ShadowsFate
|
||||
{
|
||||
SPELL_SOUL_FEAST = 71203,
|
||||
QUEST_A_FEAST_OF_SOULS = 24547
|
||||
};
|
||||
|
||||
class spell_item_shadows_fate : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_item_shadows_fate() : SpellScriptLoader("spell_item_shadows_fate") { }
|
||||
|
||||
class spell_item_shadows_fate_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_item_shadows_fate_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/)
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_SOUL_FEAST))
|
||||
return false;
|
||||
if (!sObjectMgr->GetQuestTemplate(QUEST_A_FEAST_OF_SOULS))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Load()
|
||||
{
|
||||
_procTarget = NULL;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CheckProc(ProcEventInfo& /*eventInfo*/)
|
||||
{
|
||||
_procTarget = GetCaster();
|
||||
return _procTarget && _procTarget->GetTypeId() == TYPEID_PLAYER && _procTarget->ToPlayer()->GetQuestStatus(QUEST_A_FEAST_OF_SOULS) == QUEST_STATUS_INCOMPLETE;
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* /*aurEff*/, ProcEventInfo& /*eventInfo*/)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
GetTarget()->CastSpell(_procTarget, SPELL_SOUL_FEAST, true);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
DoCheckProc += AuraCheckProcFn(spell_item_shadows_fate_AuraScript::CheckProc);
|
||||
OnEffectProc += AuraEffectProcFn(spell_item_shadows_fate_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
|
||||
}
|
||||
|
||||
private:
|
||||
Unit* _procTarget;
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const
|
||||
{
|
||||
return new spell_item_shadows_fate_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
enum Shadowmourne
|
||||
{
|
||||
SPELL_SHADOWMOURNE_CHAOS_BANE_DAMAGE = 71904,
|
||||
SPELL_SHADOWMOURNE_SOUL_FRAGMENT = 71905,
|
||||
SPELL_SHADOWMOURNE_VISUAL_LOW = 72521,
|
||||
SPELL_SHADOWMOURNE_VISUAL_HIGH = 72523,
|
||||
SPELL_SHADOWMOURNE_CHAOS_BANE_BUFF = 73422,
|
||||
};
|
||||
|
||||
// 71903 - Item - Shadowmourne Legendary
|
||||
class spell_item_shadowmourne : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_item_shadowmourne() : SpellScriptLoader("spell_item_shadowmourne") { }
|
||||
|
||||
class spell_item_shadowmourne_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_item_shadowmourne_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/)
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_SHADOWMOURNE_CHAOS_BANE_DAMAGE))
|
||||
return false;
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_SHADOWMOURNE_SOUL_FRAGMENT))
|
||||
return false;
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_SHADOWMOURNE_CHAOS_BANE_BUFF))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CheckProc(ProcEventInfo& eventInfo)
|
||||
{
|
||||
if (GetTarget()->HasAura(SPELL_SHADOWMOURNE_CHAOS_BANE_BUFF)) // cant collect shards while under effect of Chaos Bane buff
|
||||
return false;
|
||||
return eventInfo.GetProcTarget() && eventInfo.GetProcTarget()->isAlive();
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
GetTarget()->CastSpell(GetTarget(), SPELL_SHADOWMOURNE_SOUL_FRAGMENT, true, NULL, aurEff);
|
||||
|
||||
// this can't be handled in AuraScript of SoulFragments because we need to know victim
|
||||
if (Aura* soulFragments = GetTarget()->GetAura(SPELL_SHADOWMOURNE_SOUL_FRAGMENT))
|
||||
{
|
||||
if (soulFragments->GetStackAmount() >= 10)
|
||||
{
|
||||
GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_SHADOWMOURNE_CHAOS_BANE_DAMAGE, true, NULL, aurEff);
|
||||
soulFragments->Remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
DoCheckProc += AuraCheckProcFn(spell_item_shadowmourne_AuraScript::CheckProc);
|
||||
OnEffectProc += AuraEffectProcFn(spell_item_shadowmourne_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const
|
||||
{
|
||||
return new spell_item_shadowmourne_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// 71905 - Soul Fragment
|
||||
class spell_item_shadowmourne_soul_fragment : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_item_shadowmourne_soul_fragment() : SpellScriptLoader("spell_item_shadowmourne_soul_fragment") { }
|
||||
|
||||
class spell_item_shadowmourne_soul_fragment_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_item_shadowmourne_soul_fragment_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/)
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_SHADOWMOURNE_VISUAL_LOW) || !sSpellMgr->GetSpellInfo(SPELL_SHADOWMOURNE_VISUAL_HIGH) || !sSpellMgr->GetSpellInfo(SPELL_SHADOWMOURNE_CHAOS_BANE_BUFF))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void OnStackChange(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
Unit* target = GetTarget();
|
||||
switch (GetStackAmount())
|
||||
{
|
||||
case 1:
|
||||
target->CastSpell(target, SPELL_SHADOWMOURNE_VISUAL_LOW, true);
|
||||
break;
|
||||
case 6:
|
||||
target->RemoveAurasDueToSpell(SPELL_SHADOWMOURNE_VISUAL_LOW);
|
||||
target->CastSpell(target, SPELL_SHADOWMOURNE_VISUAL_HIGH, true);
|
||||
break;
|
||||
case 10:
|
||||
target->RemoveAurasDueToSpell(SPELL_SHADOWMOURNE_VISUAL_HIGH);
|
||||
target->CastSpell(target, SPELL_SHADOWMOURNE_CHAOS_BANE_BUFF, true);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
Unit* target = GetTarget();
|
||||
target->RemoveAurasDueToSpell(SPELL_SHADOWMOURNE_VISUAL_LOW);
|
||||
target->RemoveAurasDueToSpell(SPELL_SHADOWMOURNE_VISUAL_HIGH);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
AfterEffectApply += AuraEffectApplyFn(spell_item_shadowmourne_soul_fragment_AuraScript::OnStackChange, EFFECT_0, SPELL_AURA_MOD_STAT, AuraEffectHandleModes(AURA_EFFECT_HANDLE_REAL | AURA_EFFECT_HANDLE_REAPPLY));
|
||||
AfterEffectRemove += AuraEffectRemoveFn(spell_item_shadowmourne_soul_fragment_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_MOD_STAT, AURA_EFFECT_HANDLE_REAL);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const
|
||||
{
|
||||
return new spell_item_shadowmourne_soul_fragment_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// http://www.wowhead.com/item=7734 Six Demon Bag
|
||||
// 14537 Six Demon Bag
|
||||
enum SixDemonBagSpells
|
||||
@@ -864,70 +1145,6 @@ class spell_item_underbelly_elixir : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
enum eShadowmourneVisuals
|
||||
{
|
||||
SPELL_SHADOWMOURNE_VISUAL_LOW = 72521,
|
||||
SPELL_SHADOWMOURNE_VISUAL_HIGH = 72523,
|
||||
SPELL_SHADOWMOURNE_CHAOS_BANE_BUFF = 73422,
|
||||
};
|
||||
|
||||
class spell_item_shadowmourne : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_item_shadowmourne() : SpellScriptLoader("spell_item_shadowmourne") { }
|
||||
|
||||
class spell_item_shadowmourne_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_item_shadowmourne_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellEntry*/)
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_SHADOWMOURNE_VISUAL_LOW) || !sSpellMgr->GetSpellInfo(SPELL_SHADOWMOURNE_VISUAL_HIGH) || !sSpellMgr->GetSpellInfo(SPELL_SHADOWMOURNE_CHAOS_BANE_BUFF))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void OnStackChange(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
Unit* target = GetTarget();
|
||||
switch (GetStackAmount())
|
||||
{
|
||||
case 1:
|
||||
target->CastSpell(target, SPELL_SHADOWMOURNE_VISUAL_LOW, true);
|
||||
break;
|
||||
case 6:
|
||||
target->RemoveAurasDueToSpell(SPELL_SHADOWMOURNE_VISUAL_LOW);
|
||||
target->CastSpell(target, SPELL_SHADOWMOURNE_VISUAL_HIGH, true);
|
||||
break;
|
||||
case 10:
|
||||
target->RemoveAurasDueToSpell(SPELL_SHADOWMOURNE_VISUAL_HIGH);
|
||||
target->CastSpell(target, SPELL_SHADOWMOURNE_CHAOS_BANE_BUFF, true);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
Unit* target = GetTarget();
|
||||
target->RemoveAurasDueToSpell(SPELL_SHADOWMOURNE_VISUAL_LOW);
|
||||
target->RemoveAurasDueToSpell(SPELL_SHADOWMOURNE_VISUAL_HIGH);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
AfterEffectApply += AuraEffectApplyFn(spell_item_shadowmourne_AuraScript::OnStackChange, EFFECT_0, SPELL_AURA_MOD_STAT, AuraEffectHandleModes(AURA_EFFECT_HANDLE_REAL | AURA_EFFECT_HANDLE_REAPPLY));
|
||||
AfterEffectRemove += AuraEffectRemoveFn(spell_item_shadowmourne_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_MOD_STAT, AURA_EFFECT_HANDLE_REAL);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const
|
||||
{
|
||||
return new spell_item_shadowmourne_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
enum AirRifleSpells
|
||||
{
|
||||
SPELL_AIR_RIFLE_HOLD_VISUAL = 65582,
|
||||
@@ -2249,6 +2466,7 @@ void AddSC_item_spell_scripts()
|
||||
new spell_item_trigger_spell("spell_item_mithril_mechanical_dragonling", SPELL_MITHRIL_MECHANICAL_DRAGONLING);
|
||||
|
||||
new spell_item_arcane_shroud();
|
||||
new spell_item_blessing_of_ancient_kings();
|
||||
new spell_item_defibrillate("spell_item_goblin_jumper_cables", 67, SPELL_GOBLIN_JUMPER_CABLES_FAIL);
|
||||
new spell_item_defibrillate("spell_item_goblin_jumper_cables_xl", 50, SPELL_GOBLIN_JUMPER_CABLES_XL_FAIL);
|
||||
new spell_item_defibrillate("spell_item_gnomish_army_knife", 33);
|
||||
@@ -2257,15 +2475,18 @@ void AddSC_item_spell_scripts()
|
||||
new spell_item_gnomish_death_ray();
|
||||
new spell_item_make_a_wish();
|
||||
new spell_item_mingos_fortune_generator();
|
||||
new spell_item_necrotic_touch();
|
||||
new spell_item_net_o_matic();
|
||||
new spell_item_noggenfogger_elixir();
|
||||
new spell_item_piccolo_of_the_flaming_fire();
|
||||
new spell_item_savory_deviate_delight();
|
||||
new spell_item_scroll_of_recall();
|
||||
new spell_item_shadows_fate();
|
||||
new spell_item_shadowmourne();
|
||||
new spell_item_shadowmourne_soul_fragment();
|
||||
new spell_item_six_demon_bag();
|
||||
new spell_item_the_eye_of_diminution();
|
||||
new spell_item_underbelly_elixir();
|
||||
new spell_item_shadowmourne();
|
||||
new spell_item_red_rider_air_rifle();
|
||||
|
||||
new spell_item_create_heart_candy();
|
||||
|
||||
@@ -28,11 +28,15 @@
|
||||
|
||||
enum MageSpells
|
||||
{
|
||||
SPELL_MAGE_BURNOUT = 29077,
|
||||
SPELL_MAGE_COLD_SNAP = 11958,
|
||||
SPELL_MAGE_FOCUS_MAGIC_PROC = 54648,
|
||||
SPELL_MAGE_FROST_WARDING_R1 = 11189,
|
||||
SPELL_MAGE_FROST_WARDING_TRIGGERED = 57776,
|
||||
SPELL_MAGE_INCANTERS_ABSORBTION_R1 = 44394,
|
||||
SPELL_MAGE_INCANTERS_ABSORBTION_TRIGGERED = 44413,
|
||||
SPELL_MAGE_IGNITE = 12654,
|
||||
SPELL_MAGE_MASTER_OF_ELEMENTS_ENERGIZE = 29077,
|
||||
SPELL_MAGE_SQUIRREL_FORM = 32813,
|
||||
SPELL_MAGE_GIRAFFE_FORM = 32816,
|
||||
SPELL_MAGE_SERPENT_FORM = 32817,
|
||||
@@ -105,6 +109,51 @@ class spell_mage_blast_wave : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
// -44449 - Burnout
|
||||
class spell_mage_burnout : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_mage_burnout() : SpellScriptLoader("spell_mage_burnout") { }
|
||||
|
||||
class spell_mage_burnout_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_mage_burnout_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/)
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_MAGE_BURNOUT))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CheckProc(ProcEventInfo& eventInfo)
|
||||
{
|
||||
return eventInfo.GetDamageInfo()->GetSpellInfo(); // eventInfo.GetSpellInfo()
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
|
||||
int32 mana = int32(eventInfo.GetDamageInfo()->GetSpellInfo()->CalcPowerCost(GetTarget(), eventInfo.GetDamageInfo()->GetSchoolMask()));
|
||||
mana = CalculatePct(mana, aurEff->GetAmount());
|
||||
|
||||
GetTarget()->CastCustomSpell(SPELL_MAGE_BURNOUT, SPELLVALUE_BASE_POINT0, mana, GetTarget(), true, NULL, aurEff);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
DoCheckProc += AuraCheckProcFn(spell_mage_burnout_AuraScript::CheckProc);
|
||||
OnEffectProc += AuraEffectProcFn(spell_mage_burnout_AuraScript::HandleProc, EFFECT_1, SPELL_AURA_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const
|
||||
{
|
||||
return new spell_mage_burnout_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// 11958 - Cold Snap
|
||||
class spell_mage_cold_snap : public SpellScriptLoader
|
||||
{
|
||||
@@ -219,6 +268,57 @@ class spell_mage_fire_frost_ward : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
// 54646 - Focus Magic
|
||||
class spell_mage_focus_magic : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_mage_focus_magic() : SpellScriptLoader("spell_mage_focus_magic") { }
|
||||
|
||||
class spell_mage_focus_magic_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_mage_focus_magic_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/)
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_MAGE_FOCUS_MAGIC_PROC))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Load()
|
||||
{
|
||||
_procTarget = NULL;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CheckProc(ProcEventInfo& /*eventInfo*/)
|
||||
{
|
||||
_procTarget = GetCaster();
|
||||
return _procTarget && _procTarget->isAlive();
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
GetTarget()->CastSpell(_procTarget, SPELL_MAGE_FOCUS_MAGIC_PROC, true, NULL, aurEff);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
DoCheckProc += AuraCheckProcFn(spell_mage_focus_magic_AuraScript::CheckProc);
|
||||
OnEffectProc += AuraEffectProcFn(spell_mage_focus_magic_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_MOD_SPELL_CRIT_CHANCE);
|
||||
}
|
||||
|
||||
private:
|
||||
Unit* _procTarget;
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const
|
||||
{
|
||||
return new spell_mage_focus_magic_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// -11426 - Ice Barrier
|
||||
class spell_mage_ice_barrier : public SpellScriptLoader
|
||||
{
|
||||
@@ -262,6 +362,53 @@ class spell_mage_ice_barrier : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
// -11119 - Ignite
|
||||
class spell_mage_ignite : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_mage_ignite() : SpellScriptLoader("spell_mage_ignite") { }
|
||||
|
||||
class spell_mage_ignite_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_mage_ignite_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/)
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_MAGE_IGNITE))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CheckProc(ProcEventInfo& eventInfo)
|
||||
{
|
||||
return eventInfo.GetProcTarget();
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
|
||||
SpellInfo const* igniteDot = sSpellMgr->GetSpellInfo(SPELL_MAGE_IGNITE);
|
||||
int32 pct = 8 * GetSpellInfo()->GetRank();
|
||||
|
||||
int32 amount = int32(CalculatePct(eventInfo.GetDamageInfo()->GetDamage(), pct) / igniteDot->GetMaxTicks());
|
||||
amount += eventInfo.GetProcTarget()->GetRemainingPeriodicAmount(eventInfo.GetActor()->GetGUID(), SPELL_MAGE_IGNITE, SPELL_AURA_PERIODIC_DAMAGE);
|
||||
GetTarget()->CastCustomSpell(SPELL_MAGE_IGNITE, SPELLVALUE_BASE_POINT0, amount, eventInfo.GetProcTarget(), true, NULL, aurEff);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
DoCheckProc += AuraCheckProcFn(spell_mage_ignite_AuraScript::CheckProc);
|
||||
OnEffectProc += AuraEffectProcFn(spell_mage_ignite_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const
|
||||
{
|
||||
return new spell_mage_ignite_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// -44457 - Living Bomb
|
||||
class spell_mage_living_bomb : public SpellScriptLoader
|
||||
{
|
||||
@@ -339,6 +486,52 @@ class spell_mage_mana_shield : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
// -29074 - Master of Elements
|
||||
class spell_mage_master_of_elements : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_mage_master_of_elements() : SpellScriptLoader("spell_mage_master_of_elements") { }
|
||||
|
||||
class spell_mage_master_of_elements_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_mage_master_of_elements_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/)
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_MAGE_MASTER_OF_ELEMENTS_ENERGIZE))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CheckProc(ProcEventInfo& eventInfo)
|
||||
{
|
||||
return eventInfo.GetDamageInfo()->GetSpellInfo(); // eventInfo.GetSpellInfo()
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
|
||||
int32 mana = int32(eventInfo.GetDamageInfo()->GetSpellInfo()->CalcPowerCost(GetTarget(), eventInfo.GetDamageInfo()->GetSchoolMask()));
|
||||
mana = CalculatePct(mana, aurEff->GetAmount());
|
||||
|
||||
if (mana > 0)
|
||||
GetTarget()->CastCustomSpell(SPELL_MAGE_MASTER_OF_ELEMENTS_ENERGIZE, SPELLVALUE_BASE_POINT0, mana, GetTarget(), true, NULL, aurEff);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
DoCheckProc += AuraCheckProcFn(spell_mage_master_of_elements_AuraScript::CheckProc);
|
||||
OnEffectProc += AuraEffectProcFn(spell_mage_master_of_elements_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const
|
||||
{
|
||||
return new spell_mage_master_of_elements_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
enum SilvermoonPolymorph
|
||||
{
|
||||
NPC_AUROSALIA = 18744,
|
||||
@@ -437,11 +630,15 @@ class spell_mage_summon_water_elemental : public SpellScriptLoader
|
||||
void AddSC_mage_spell_scripts()
|
||||
{
|
||||
new spell_mage_blast_wave();
|
||||
new spell_mage_burnout();
|
||||
new spell_mage_cold_snap();
|
||||
new spell_mage_fire_frost_ward();
|
||||
new spell_mage_focus_magic();
|
||||
new spell_mage_ice_barrier();
|
||||
new spell_mage_ignite();
|
||||
new spell_mage_living_bomb();
|
||||
new spell_mage_mana_shield();
|
||||
new spell_mage_master_of_elements();
|
||||
new spell_mage_polymorph_cast_visual();
|
||||
new spell_mage_summon_water_elemental();
|
||||
}
|
||||
@@ -31,6 +31,7 @@ enum PaladinSpells
|
||||
{
|
||||
SPELL_PALADIN_DIVINE_PLEA = 54428,
|
||||
SPELL_PALADIN_BLESSING_OF_SANCTUARY_BUFF = 67480,
|
||||
SPELL_PALADIN_BLESSING_OF_SANCTUARY_ENERGIZE = 57319,
|
||||
|
||||
SPELL_PALADIN_HOLY_SHOCK_R1 = 20473,
|
||||
SPELL_PALADIN_HOLY_SHOCK_R1_DAMAGE = 25912,
|
||||
@@ -45,6 +46,8 @@ enum PaladinSpells
|
||||
SPELL_PALADIN_DIVINE_STORM_DUMMY = 54171,
|
||||
SPELL_PALADIN_DIVINE_STORM_HEAL = 54172,
|
||||
|
||||
SPELL_PALADIN_EYE_FOR_AN_EYE_DAMAGE = 25997,
|
||||
|
||||
SPELL_PALADIN_FORBEARANCE = 25771,
|
||||
SPELL_PALADIN_AVENGING_WRATH_MARKER = 61987,
|
||||
SPELL_PALADIN_IMMUNE_SHIELD_MARKER = 61988,
|
||||
@@ -56,6 +59,8 @@ enum PaladinSpells
|
||||
|
||||
SPELL_PALADIN_RIGHTEOUS_DEFENSE_TAUNT = 31790,
|
||||
|
||||
SPELL_PALADIN_SEAL_OF_RIGHTEOUSNESS = 25742,
|
||||
|
||||
SPELL_GENERIC_ARENA_DAMPENING = 74410,
|
||||
SPELL_GENERIC_BATTLEGROUND_DAMPENING = 74411
|
||||
};
|
||||
@@ -192,8 +197,8 @@ class spell_pal_blessing_of_faith : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
// 20911 Blessing of Sanctuary
|
||||
// 25899 Greater Blessing of Sanctuary
|
||||
// 20911 - Blessing of Sanctuary
|
||||
// 25899 - Greater Blessing of Sanctuary
|
||||
class spell_pal_blessing_of_sanctuary : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
@@ -207,6 +212,8 @@ class spell_pal_blessing_of_sanctuary : public SpellScriptLoader
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_BLESSING_OF_SANCTUARY_BUFF))
|
||||
return false;
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_BLESSING_OF_SANCTUARY_ENERGIZE))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -223,10 +230,23 @@ class spell_pal_blessing_of_sanctuary : public SpellScriptLoader
|
||||
target->RemoveAura(SPELL_PALADIN_BLESSING_OF_SANCTUARY_BUFF, GetCasterGUID());
|
||||
}
|
||||
|
||||
bool CheckProc(ProcEventInfo& /*eventInfo*/)
|
||||
{
|
||||
return GetTarget()->getPowerType() == POWER_MANA;
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
GetTarget()->CastSpell(GetTarget(), SPELL_PALADIN_BLESSING_OF_SANCTUARY_ENERGIZE, true, NULL, aurEff);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
AfterEffectApply += AuraEffectApplyFn(spell_pal_blessing_of_sanctuary_AuraScript::HandleEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
|
||||
AfterEffectRemove += AuraEffectRemoveFn(spell_pal_blessing_of_sanctuary_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
|
||||
DoCheckProc += AuraCheckProcFn(spell_pal_blessing_of_sanctuary_AuraScript::CheckProc);
|
||||
OnEffectProc += AuraEffectProcFn(spell_pal_blessing_of_sanctuary_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -417,6 +437,43 @@ class spell_pal_exorcism_and_holy_wrath_damage : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
// -9799 - Eye for an Eye
|
||||
class spell_pal_eye_for_an_eye : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_pal_eye_for_an_eye() : SpellScriptLoader("spell_pal_eye_for_an_eye") { }
|
||||
|
||||
class spell_pal_eye_for_an_eye_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_pal_eye_for_an_eye_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/)
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_EYE_FOR_AN_EYE_DAMAGE))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void OnProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
// return damage % to attacker but < 50% own total health
|
||||
int32 damage = int32(std::min(CalculatePct(eventInfo.GetDamageInfo()->GetDamage(), aurEff->GetAmount()), GetTarget()->GetMaxHealth() / 2));
|
||||
GetTarget()->CastCustomSpell(SPELL_PALADIN_EYE_FOR_AN_EYE_DAMAGE, SPELLVALUE_BASE_POINT0, damage, eventInfo.GetProcTarget(), true, NULL, aurEff);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
OnEffectProc += AuraEffectProcFn(spell_pal_eye_for_an_eye_AuraScript::OnProc, EFFECT_0, SPELL_AURA_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const
|
||||
{
|
||||
return new spell_pal_eye_for_an_eye_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// 63521 - Guarded by The Light
|
||||
class spell_pal_guarded_by_the_light : public SpellScriptLoader
|
||||
{
|
||||
@@ -794,6 +851,52 @@ class spell_pal_sacred_shield : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
// 20154, 21084 - Seal of Righteousness - melee proc dummy (addition ${$MWS*(0.022*$AP+0.044*$SPH)} damage)
|
||||
class spell_pal_seal_of_righteousness : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_pal_seal_of_righteousness() : SpellScriptLoader("spell_pal_seal_of_righteousness") { }
|
||||
|
||||
class spell_pal_seal_of_righteousness_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_pal_seal_of_righteousness_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/)
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_SEAL_OF_RIGHTEOUSNESS))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CheckProc(ProcEventInfo& eventInfo)
|
||||
{
|
||||
return eventInfo.GetProcTarget();
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
|
||||
float ap = GetTarget()->GetTotalAttackPowerValue(BASE_ATTACK);
|
||||
int32 holy = GetTarget()->SpellBaseDamageBonusDone(SPELL_SCHOOL_MASK_HOLY);
|
||||
holy += eventInfo.GetProcTarget()->SpellBaseDamageBonusTaken(SPELL_SCHOOL_MASK_HOLY);
|
||||
int32 bp = int32((ap * 0.022f + 0.044f * holy) * GetTarget()->GetAttackTime(BASE_ATTACK) / 1000);
|
||||
GetTarget()->CastCustomSpell(SPELL_PALADIN_SEAL_OF_RIGHTEOUSNESS, SPELLVALUE_BASE_POINT0, bp, eventInfo.GetProcTarget(), true, NULL, aurEff);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
DoCheckProc += AuraCheckProcFn(spell_pal_seal_of_righteousness_AuraScript::CheckProc);
|
||||
OnEffectProc += AuraEffectProcFn(spell_pal_seal_of_righteousness_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const
|
||||
{
|
||||
return new spell_pal_seal_of_righteousness_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_paladin_spell_scripts()
|
||||
{
|
||||
new spell_pal_ardent_defender();
|
||||
@@ -803,6 +906,7 @@ void AddSC_paladin_spell_scripts()
|
||||
new spell_pal_divine_storm();
|
||||
new spell_pal_divine_storm_dummy();
|
||||
new spell_pal_exorcism_and_holy_wrath_damage();
|
||||
new spell_pal_eye_for_an_eye();
|
||||
new spell_pal_guarded_by_the_light();
|
||||
new spell_pal_hand_of_sacrifice();
|
||||
new spell_pal_hand_of_salvation();
|
||||
@@ -811,4 +915,5 @@ void AddSC_paladin_spell_scripts()
|
||||
new spell_pal_lay_on_hands();
|
||||
new spell_pal_righteous_defense();
|
||||
new spell_pal_sacred_shield();
|
||||
new spell_pal_seal_of_righteousness();
|
||||
}
|
||||
@@ -29,24 +29,115 @@
|
||||
|
||||
enum PriestSpells
|
||||
{
|
||||
SPELL_PRIEST_EMPOWERED_RENEW = 63544,
|
||||
SPELL_PRIEST_GLYPHE_OF_LIGHTWELL = 55673,
|
||||
SPELL_PRIEST_GUARDIAN_SPIRIT_HEAL = 48153,
|
||||
SPELL_PRIEST_PENANCE_R1 = 47540,
|
||||
SPELL_PRIEST_PENANCE_R1_DAMAGE = 47758,
|
||||
SPELL_PRIEST_PENANCE_R1_HEAL = 47757,
|
||||
SPELL_PRIEST_REFLECTIVE_SHIELD_TRIGGERED = 33619,
|
||||
SPELL_PRIEST_REFLECTIVE_SHIELD_R1 = 33201,
|
||||
SPELL_PRIEST_SHADOW_WORD_DEATH = 32409,
|
||||
SPELL_PRIEST_T9_HEALING_2P = 67201,
|
||||
SPELL_PRIEST_VAMPIRIC_TOUCH_DISPEL = 64085,
|
||||
SPELL_PRIEST_DIVINE_AEGIS = 47753,
|
||||
SPELL_PRIEST_EMPOWERED_RENEW = 63544,
|
||||
SPELL_PRIEST_GLYPHE_OF_LIGHTWELL = 55673,
|
||||
SPELL_PRIEST_GLYPHE_OF_PRAYER_OF_HEALING_HEAL = 56161,
|
||||
SPELL_PRIEST_GUARDIAN_SPIRIT_HEAL = 48153,
|
||||
SPELL_PRIEST_MANA_LEECH_PROC = 34650,
|
||||
SPELL_PRIEST_PENANCE_R1 = 47540,
|
||||
SPELL_PRIEST_PENANCE_R1_DAMAGE = 47758,
|
||||
SPELL_PRIEST_PENANCE_R1_HEAL = 47757,
|
||||
SPELL_PRIEST_REFLECTIVE_SHIELD_TRIGGERED = 33619,
|
||||
SPELL_PRIEST_REFLECTIVE_SHIELD_R1 = 33201,
|
||||
SPELL_PRIEST_SHADOW_WORD_DEATH = 32409,
|
||||
SPELL_PRIEST_T9_HEALING_2P = 67201,
|
||||
SPELL_PRIEST_VAMPIRIC_TOUCH_DISPEL = 64085,
|
||||
};
|
||||
|
||||
enum PriestSpellIcons
|
||||
{
|
||||
PRIEST_ICON_ID_BORROWED_TIME = 2899,
|
||||
PRIEST_ICON_ID_EMPOWERED_RENEW_TALENT = 3021,
|
||||
PRIEST_ICON_ID_PAIN_AND_SUFFERING = 2874,
|
||||
PRIEST_ICON_ID_BORROWED_TIME = 2899,
|
||||
PRIEST_ICON_ID_EMPOWERED_RENEW_TALENT = 3021,
|
||||
PRIEST_ICON_ID_PAIN_AND_SUFFERING = 2874,
|
||||
};
|
||||
|
||||
// -47509 - Divine Aegis
|
||||
class spell_pri_divine_aegis : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_pri_divine_aegis() : SpellScriptLoader("spell_pri_divine_aegis") { }
|
||||
|
||||
class spell_pri_divine_aegis_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_pri_divine_aegis_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/)
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_PRIEST_DIVINE_AEGIS))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CheckProc(ProcEventInfo& eventInfo)
|
||||
{
|
||||
return eventInfo.GetProcTarget();
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
|
||||
int32 absorb = CalculatePct(int32(eventInfo.GetHealInfo()->GetHeal()), aurEff->GetAmount());
|
||||
|
||||
// Multiple effects stack, so let's try to find this aura.
|
||||
if (AuraEffect const* aegis = eventInfo.GetProcTarget()->GetAuraEffect(SPELL_PRIEST_DIVINE_AEGIS, EFFECT_0))
|
||||
absorb += aegis->GetAmount();
|
||||
|
||||
absorb = std::min(absorb, eventInfo.GetProcTarget()->getLevel() * 125);
|
||||
|
||||
GetTarget()->CastCustomSpell(SPELL_PRIEST_DIVINE_AEGIS, SPELLVALUE_BASE_POINT0, absorb, eventInfo.GetProcTarget(), true, NULL, aurEff);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
DoCheckProc += AuraCheckProcFn(spell_pri_divine_aegis_AuraScript::CheckProc);
|
||||
OnEffectProc += AuraEffectProcFn(spell_pri_divine_aegis_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const
|
||||
{
|
||||
return new spell_pri_divine_aegis_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// 55680 - Glyph of Prayer of Healing
|
||||
class spell_pri_glyph_of_prayer_of_healing : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_pri_glyph_of_prayer_of_healing() : SpellScriptLoader("spell_pri_glyph_of_prayer_of_healing") { }
|
||||
|
||||
class spell_pri_glyph_of_prayer_of_healing_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_pri_glyph_of_prayer_of_healing_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/)
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_PRIEST_GLYPHE_OF_PRAYER_OF_HEALING_HEAL))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
|
||||
SpellInfo const* triggeredSpellInfo = sSpellMgr->GetSpellInfo(SPELL_PRIEST_GLYPHE_OF_PRAYER_OF_HEALING_HEAL);
|
||||
int32 heal = int32(CalculatePct(int32(eventInfo.GetHealInfo()->GetHeal()), aurEff->GetAmount()) / triggeredSpellInfo->GetMaxTicks());
|
||||
GetTarget()->CastCustomSpell(SPELL_PRIEST_GLYPHE_OF_PRAYER_OF_HEALING_HEAL, SPELLVALUE_BASE_POINT0, heal, eventInfo.GetProcTarget(), true, NULL, aurEff);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
OnEffectProc += AuraEffectProcFn(spell_pri_glyph_of_prayer_of_healing_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const
|
||||
{
|
||||
return new spell_pri_glyph_of_prayer_of_healing_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// -47788 - Guardian Spirit
|
||||
@@ -166,6 +257,57 @@ class spell_pri_mana_burn : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
// 28305 - Mana Leech (Passive) (Priest Pet Aura)
|
||||
class spell_pri_mana_leech : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_pri_mana_leech() : SpellScriptLoader("spell_pri_mana_leech") { }
|
||||
|
||||
class spell_pri_mana_leech_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_pri_mana_leech_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/)
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_PRIEST_MANA_LEECH_PROC))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Load()
|
||||
{
|
||||
_procTarget = NULL;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CheckProc(ProcEventInfo& /*eventInfo*/)
|
||||
{
|
||||
_procTarget = GetTarget()->GetOwner();
|
||||
return _procTarget;
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
GetTarget()->CastSpell(_procTarget, SPELL_PRIEST_MANA_LEECH_PROC, true, NULL, aurEff);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
DoCheckProc += AuraCheckProcFn(spell_pri_mana_leech_AuraScript::CheckProc);
|
||||
OnEffectProc += AuraEffectProcFn(spell_pri_mana_leech_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
|
||||
}
|
||||
|
||||
private:
|
||||
Unit* _procTarget;
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const
|
||||
{
|
||||
return new spell_pri_mana_leech_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// -49821 - Mind Sear
|
||||
class spell_pri_mind_sear : public SpellScriptLoader
|
||||
{
|
||||
@@ -524,9 +666,12 @@ class spell_pri_vampiric_touch : public SpellScriptLoader
|
||||
|
||||
void AddSC_priest_spell_scripts()
|
||||
{
|
||||
new spell_pri_divine_aegis();
|
||||
new spell_pri_glyph_of_prayer_of_healing();
|
||||
new spell_pri_guardian_spirit();
|
||||
new spell_pri_lightwell_renew();
|
||||
new spell_pri_mana_burn();
|
||||
new spell_pri_mana_leech();
|
||||
new spell_pri_mind_sear();
|
||||
new spell_pri_pain_and_suffering_proc();
|
||||
new spell_pri_penance();
|
||||
|
||||
@@ -28,10 +28,68 @@
|
||||
|
||||
enum RogueSpells
|
||||
{
|
||||
SPELL_ROGUE_BLADE_FLURRY_EXTRA_ATTACK = 22482,
|
||||
SPELL_ROGUE_CHEAT_DEATH_COOLDOWN = 31231,
|
||||
SPELL_ROGUE_GLYPH_OF_PREPARATION = 56819,
|
||||
SPELL_ROGUE_PREY_ON_THE_WEAK = 58670,
|
||||
SPELL_ROGUE_SHIV_TRIGGERED = 5940,
|
||||
SPELL_ROGUE_TRICKS_OF_THE_TRADE_DMG_BOOST = 57933,
|
||||
SPELL_ROGUE_TRICKS_OF_THE_TRADE_PROC = 59628,
|
||||
};
|
||||
|
||||
// 13877, 33735, (check 51211, 65956) - Blade Flurry
|
||||
class spell_rog_blade_flurry : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_rog_blade_flurry() : SpellScriptLoader("spell_rog_blade_flurry") { }
|
||||
|
||||
class spell_rog_blade_flurry_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_rog_blade_flurry_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/)
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_ROGUE_BLADE_FLURRY_EXTRA_ATTACK))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Load()
|
||||
{
|
||||
_procTarget = NULL;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CheckProc(ProcEventInfo& eventInfo)
|
||||
{
|
||||
_procTarget = eventInfo.GetActor()->SelectNearbyTarget(eventInfo.GetProcTarget());
|
||||
return _procTarget;
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
if (eventInfo.GetDamageInfo())
|
||||
{
|
||||
int32 damage = eventInfo.GetDamageInfo()->GetDamage();
|
||||
GetTarget()->CastCustomSpell(SPELL_ROGUE_BLADE_FLURRY_EXTRA_ATTACK, SPELLVALUE_BASE_POINT0, damage, _procTarget, true, NULL, aurEff);
|
||||
}
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
DoCheckProc += AuraCheckProcFn(spell_rog_blade_flurry_AuraScript::CheckProc);
|
||||
OnEffectProc += AuraEffectProcFn(spell_rog_blade_flurry_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_MOD_MELEE_HASTE);
|
||||
}
|
||||
|
||||
private:
|
||||
Unit* _procTarget;
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const
|
||||
{
|
||||
return new spell_rog_blade_flurry_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// -31228 - Cheat Death
|
||||
@@ -440,8 +498,100 @@ class spell_rog_shiv : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
// 57934 - Tricks of the Trade
|
||||
class spell_rog_tricks_of_the_trade : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_rog_tricks_of_the_trade() : SpellScriptLoader("spell_rog_tricks_of_the_trade") { }
|
||||
|
||||
class spell_rog_tricks_of_the_trade_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_rog_tricks_of_the_trade_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/)
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_ROGUE_TRICKS_OF_THE_TRADE_DMG_BOOST))
|
||||
return false;
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_ROGUE_TRICKS_OF_THE_TRADE_PROC))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Load()
|
||||
{
|
||||
_redirectTarget = NULL;
|
||||
return true;
|
||||
}
|
||||
|
||||
void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_DEFAULT)
|
||||
GetTarget()->ResetRedirectThreat();
|
||||
}
|
||||
|
||||
bool CheckProc(ProcEventInfo& /*eventInfo*/)
|
||||
{
|
||||
_redirectTarget = GetTarget()->GetRedirectThreatTarget();
|
||||
return _redirectTarget;
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* /*aurEff*/, ProcEventInfo& /*eventInfo*/)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
|
||||
Unit* target = GetTarget();
|
||||
target->CastSpell(_redirectTarget, SPELL_ROGUE_TRICKS_OF_THE_TRADE_DMG_BOOST, true);
|
||||
target->CastSpell(target, SPELL_ROGUE_TRICKS_OF_THE_TRADE_PROC, true);
|
||||
Remove(AURA_REMOVE_BY_DEFAULT); // maybe handle by proc charges
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
AfterEffectRemove += AuraEffectRemoveFn(spell_rog_tricks_of_the_trade_AuraScript::OnRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
|
||||
DoCheckProc += AuraCheckProcFn(spell_rog_tricks_of_the_trade_AuraScript::CheckProc);
|
||||
OnEffectProc += AuraEffectProcFn(spell_rog_tricks_of_the_trade_AuraScript::HandleProc, EFFECT_1, SPELL_AURA_DUMMY);
|
||||
}
|
||||
|
||||
private:
|
||||
Unit* _redirectTarget;
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const
|
||||
{
|
||||
return new spell_rog_tricks_of_the_trade_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// 59628 - Tricks of the Trade (Proc)
|
||||
class spell_rog_tricks_of_the_trade_proc : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_rog_tricks_of_the_trade_proc() : SpellScriptLoader("spell_rog_tricks_of_the_trade_proc") { }
|
||||
|
||||
class spell_rog_tricks_of_the_trade_proc_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_rog_tricks_of_the_trade_proc_AuraScript);
|
||||
|
||||
void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
GetTarget()->ResetRedirectThreat();
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
AfterEffectRemove += AuraEffectRemoveFn(spell_rog_tricks_of_the_trade_proc_AuraScript::HandleRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const
|
||||
{
|
||||
return new spell_rog_tricks_of_the_trade_proc_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_rogue_spell_scripts()
|
||||
{
|
||||
new spell_rog_blade_flurry();
|
||||
new spell_rog_cheat_death();
|
||||
new spell_rog_deadly_poison();
|
||||
new spell_rog_nerves_of_steel();
|
||||
@@ -449,4 +599,6 @@ void AddSC_rogue_spell_scripts()
|
||||
new spell_rog_prey_on_the_weak();
|
||||
new spell_rog_rupture();
|
||||
new spell_rog_shiv();
|
||||
new spell_rog_tricks_of_the_trade();
|
||||
new spell_rog_tricks_of_the_trade_proc();
|
||||
}
|
||||
@@ -33,9 +33,11 @@ enum ShamanSpells
|
||||
SPELL_SHAMAN_ANCESTRAL_AWAKENING_PROC = 52752,
|
||||
SPELL_SHAMAN_BIND_SIGHT = 6277,
|
||||
SPELL_SHAMAN_CLEANSING_TOTEM_EFFECT = 52025,
|
||||
SPELL_SHAMAN_EARTH_SHIELD_HEAL = 379,
|
||||
SPELL_SHAMAN_EXHAUSTION = 57723,
|
||||
SPELL_SHAMAN_FIRE_NOVA_R1 = 1535,
|
||||
SPELL_SHAMAN_FIRE_NOVA_TRIGGERED_R1 = 8349,
|
||||
SPELL_SHAMAN_GLYPH_OF_EARTH_SHIELD = 63279,
|
||||
SPELL_SHAMAN_GLYPH_OF_HEALING_STREAM_TOTEM = 55456,
|
||||
SPELL_SHAMAN_GLYPH_OF_MANA_TIDE = 55441,
|
||||
SPELL_SHAMAN_GLYPH_OF_THUNDERSTORM = 62132,
|
||||
@@ -266,6 +268,68 @@ class spell_sha_cleansing_totem_pulse : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
// -974 - Earth Shield
|
||||
class spell_sha_earth_shield : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_sha_earth_shield() : SpellScriptLoader("spell_sha_earth_shield") { }
|
||||
|
||||
class spell_sha_earth_shield_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_sha_earth_shield_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/)
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_EARTH_SHIELD_HEAL))
|
||||
return false;
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_GLYPH_OF_EARTH_SHIELD))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool & /*canBeRecalculated*/)
|
||||
{
|
||||
if (Unit* caster = GetCaster())
|
||||
{
|
||||
amount = caster->SpellHealingBonusDone(GetUnitOwner(), GetSpellInfo(), amount, HEAL);
|
||||
amount = GetUnitOwner()->SpellHealingBonusTaken(caster, GetSpellInfo(), amount, HEAL);
|
||||
|
||||
// Glyph of Earth Shield
|
||||
//! WORKAROUND
|
||||
//! this glyphe is a proc
|
||||
if (AuraEffect* glyphe = caster->GetAuraEffect(SPELL_SHAMAN_GLYPH_OF_EARTH_SHIELD, EFFECT_0))
|
||||
AddPct(amount, glyphe->GetAmount());
|
||||
}
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
|
||||
//! HACK due to currenct proc system implementation
|
||||
if (Player* player = GetTarget()->ToPlayer())
|
||||
if (player->HasSpellCooldown(SPELL_SHAMAN_EARTH_SHIELD_HEAL))
|
||||
return;
|
||||
|
||||
GetTarget()->CastCustomSpell(SPELL_SHAMAN_EARTH_SHIELD_HEAL, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetTarget(), true, NULL, aurEff, GetCasterGUID());
|
||||
|
||||
if (Player* player = GetTarget()->ToPlayer())
|
||||
player->AddSpellCooldown(SPELL_SHAMAN_EARTH_SHIELD_HEAL, 0, time(NULL) + 3);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_sha_earth_shield_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_DUMMY);
|
||||
OnEffectProc += AuraEffectProcFn(spell_sha_earth_shield_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const
|
||||
{
|
||||
return new spell_sha_earth_shield_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// 6474 - Earthbind Totem - Fix Talent: Earthen Power
|
||||
class spell_sha_earthbind_totem : public SpellScriptLoader
|
||||
{
|
||||
@@ -780,6 +844,7 @@ void AddSC_shaman_spell_scripts()
|
||||
new spell_sha_bloodlust();
|
||||
new spell_sha_chain_heal();
|
||||
new spell_sha_cleansing_totem_pulse();
|
||||
new spell_sha_earth_shield();
|
||||
new spell_sha_earthbind_totem();
|
||||
new spell_sha_earthen_power();
|
||||
new spell_sha_fire_nova();
|
||||
|
||||
@@ -37,6 +37,8 @@ enum WarlockSpells
|
||||
SPELL_WARLOCK_DEMONIC_EMPOWERMENT_FELGUARD = 54508,
|
||||
SPELL_WARLOCK_DEMONIC_EMPOWERMENT_FELHUNTER = 54509,
|
||||
SPELL_WARLOCK_DEMONIC_EMPOWERMENT_IMP = 54444,
|
||||
SPELL_WARLOCK_FEL_SYNERGY_HEAL = 54181,
|
||||
SPELL_WARLOCK_GLYPHE_OF_SIPHON_LIFE = 63106,
|
||||
SPELL_WARLOCK_IMPROVED_HEALTHSTONE_R1 = 18692,
|
||||
SPELL_WARLOCK_IMPROVED_HEALTHSTONE_R2 = 18693,
|
||||
SPELL_WARLOCK_IMPROVED_HEALTH_FUNNEL_R1 = 18703,
|
||||
@@ -48,6 +50,7 @@ enum WarlockSpells
|
||||
SPELL_WARLOCK_LIFE_TAP_ENERGIZE = 31818,
|
||||
SPELL_WARLOCK_LIFE_TAP_ENERGIZE_2 = 32553,
|
||||
SPELL_WARLOCK_SOULSHATTER = 32835,
|
||||
SPELL_WARLOCK_SIPHON_LIFE_HEAL = 63106,
|
||||
SPELL_WARLOCK_UNSTABLE_AFFLICTION_DISPEL = 31117
|
||||
};
|
||||
|
||||
@@ -418,6 +421,49 @@ class spell_warl_everlasting_affliction : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
// -47230 - Fel Synergy
|
||||
class spell_warl_fel_synergy : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_warl_fel_synergy() : SpellScriptLoader("spell_warl_fel_synergy") { }
|
||||
|
||||
class spell_warl_fel_synergy_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_warl_fel_synergy_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/)
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_FEL_SYNERGY_HEAL))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CheckProc(ProcEventInfo& eventInfo)
|
||||
{
|
||||
return GetTarget()->GetGuardianPet() && eventInfo.GetDamageInfo()->GetDamage();
|
||||
}
|
||||
|
||||
void OnProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
|
||||
int32 heal = CalculatePct(int32(eventInfo.GetDamageInfo()->GetDamage()), aurEff->GetAmount());
|
||||
GetTarget()->CastCustomSpell(SPELL_WARLOCK_FEL_SYNERGY_HEAL, SPELLVALUE_BASE_POINT0, heal, (Unit*)NULL, true, NULL, aurEff); // TARGET_UNIT_PET
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
DoCheckProc += AuraCheckProcFn(spell_warl_fel_synergy_AuraScript::CheckProc);
|
||||
OnEffectProc += AuraEffectProcFn(spell_warl_fel_synergy_AuraScript::OnProc, EFFECT_0, SPELL_AURA_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const
|
||||
{
|
||||
return new spell_warl_fel_synergy_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// -48181 - Haunt
|
||||
class spell_warl_haunt : public SpellScriptLoader
|
||||
{
|
||||
@@ -686,6 +732,55 @@ class spell_warl_shadow_ward : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
// 63108 - Siphon Life
|
||||
class spell_warl_siphon_life : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_warl_siphon_life() : SpellScriptLoader("spell_warl_siphon_life") { }
|
||||
|
||||
class spell_warl_siphon_life_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_warl_siphon_life_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/)
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_SIPHON_LIFE_HEAL))
|
||||
return false;
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_GLYPHE_OF_SIPHON_LIFE))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CheckProc(ProcEventInfo& eventInfo)
|
||||
{
|
||||
return eventInfo.GetDamageInfo()->GetDamage();
|
||||
}
|
||||
|
||||
void OnProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
|
||||
int32 amount = int32(CalculatePct(eventInfo.GetDamageInfo()->GetDamage(), aurEff->GetAmount()));
|
||||
// Glyph of Siphon Life
|
||||
if (AuraEffect const* glyphe = GetTarget()->GetAuraEffect(SPELL_WARLOCK_GLYPHE_OF_SIPHON_LIFE, EFFECT_0))
|
||||
AddPct(amount, glyphe->GetAmount());
|
||||
|
||||
GetTarget()->CastCustomSpell(SPELL_WARLOCK_SIPHON_LIFE_HEAL, SPELLVALUE_BASE_POINT0, amount, GetTarget(), true, NULL, aurEff);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
DoCheckProc += AuraCheckProcFn(spell_warl_siphon_life_AuraScript::CheckProc);
|
||||
OnEffectProc += AuraEffectProcFn(spell_warl_siphon_life_AuraScript::OnProc, EFFECT_0, SPELL_AURA_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const
|
||||
{
|
||||
return new spell_warl_siphon_life_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// 29858 - Soulshatter
|
||||
class spell_warl_soulshatter : public SpellScriptLoader
|
||||
{
|
||||
@@ -774,12 +869,14 @@ void AddSC_warlock_spell_scripts()
|
||||
new spell_warl_demonic_circle_teleport();
|
||||
new spell_warl_demonic_empowerment();
|
||||
new spell_warl_everlasting_affliction();
|
||||
new spell_warl_fel_synergy();
|
||||
new spell_warl_haunt();
|
||||
new spell_warl_health_funnel();
|
||||
new spell_warl_life_tap();
|
||||
new spell_warl_ritual_of_doom_effect();
|
||||
new spell_warl_seed_of_corruption();
|
||||
new spell_warl_shadow_ward();
|
||||
new spell_warl_siphon_life();
|
||||
new spell_warl_soulshatter();
|
||||
new spell_warl_unstable_affliction();
|
||||
}
|
||||
@@ -31,21 +31,26 @@ enum WarriorSpells
|
||||
SPELL_WARRIOR_BLOODTHIRST = 23885,
|
||||
SPELL_WARRIOR_BLOODTHIRST_DAMAGE = 23881,
|
||||
SPELL_WARRIOR_CHARGE = 34846,
|
||||
SPELL_WARRIOR_DAMAGE_SHIELD_DAMAGE = 59653,
|
||||
SPELL_WARRIOR_DEEP_WOUNDS_RANK_1 = 12162,
|
||||
SPELL_WARRIOR_DEEP_WOUNDS_RANK_2 = 12850,
|
||||
SPELL_WARRIOR_DEEP_WOUNDS_RANK_3 = 12868,
|
||||
SPELL_WARRIOR_DEEP_WOUNDS_RANK_PERIODIC = 12721,
|
||||
SPELL_WARRIOR_EXECUTE = 20647,
|
||||
SPELL_WARRIOR_GLYPH_OF_EXECUTION = 58367,
|
||||
SPELL_WARRIOR_GLYPH_OF_VIGILANCE = 63326,
|
||||
SPELL_WARRIOR_JUGGERNAUT_CRIT_BONUS_BUFF = 65156,
|
||||
SPELL_WARRIOR_JUGGERNAUT_CRIT_BONUS_TALENT = 64976,
|
||||
SPELL_WARRIOR_LAST_STAND_TRIGGERED = 12976,
|
||||
SPELL_WARRIOR_SLAM = 50783,
|
||||
SPELL_WARRIOR_SWEEPING_STRIKES_EXTRA_ATTACK = 26654,
|
||||
SPELL_WARRIOR_TAUNT = 355,
|
||||
SPELL_WARRIOR_UNRELENTING_ASSAULT_RANK_1 = 46859,
|
||||
SPELL_WARRIOR_UNRELENTING_ASSAULT_RANK_2 = 46860,
|
||||
SPELL_WARRIOR_UNRELENTING_ASSAULT_TRIGGER_1 = 64849,
|
||||
SPELL_WARRIOR_UNRELENTING_ASSAULT_TRIGGER_2 = 64850,
|
||||
SPELL_WARRIOR_VIGILANCE_PROC = 50725,
|
||||
SPELL_WARRIOR_VIGILANCE_REDIRECT_THREAT = 59665,
|
||||
|
||||
SPELL_PALADIN_BLESSING_OF_SANCTUARY = 20911,
|
||||
SPELL_PALADIN_GREATER_BLESSING_OF_SANCTUARY = 25899,
|
||||
@@ -195,6 +200,44 @@ class spell_warr_concussion_blow : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
// -58872 - Damage Shield
|
||||
class spell_warr_damage_shield : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_warr_damage_shield() : SpellScriptLoader("spell_warr_damage_shield") { }
|
||||
|
||||
class spell_warr_damage_shield_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_warr_damage_shield_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/)
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_WARRIOR_DAMAGE_SHIELD_DAMAGE))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void OnProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
|
||||
// % of amount blocked
|
||||
int32 damage = CalculatePct(int32(GetTarget()->GetShieldBlockValue()), aurEff->GetAmount());
|
||||
GetTarget()->CastCustomSpell(SPELL_WARRIOR_DAMAGE_SHIELD_DAMAGE, SPELLVALUE_BASE_POINT0, damage, eventInfo.GetProcTarget(), true, NULL, aurEff);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
OnEffectProc += AuraEffectProcFn(spell_warr_damage_shield_AuraScript::OnProc, EFFECT_0, SPELL_AURA_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const
|
||||
{
|
||||
return new spell_warr_damage_shield_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// -12162 - Deep Wounds
|
||||
class spell_warr_deep_wounds : public SpellScriptLoader
|
||||
{
|
||||
@@ -551,6 +594,57 @@ class spell_warr_slam : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
// 12328, 18765, 35429 - Sweeping Strikes
|
||||
class spell_warr_sweeping_strikes : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_warr_sweeping_strikes() : SpellScriptLoader("spell_warr_sweeping_strikes") { }
|
||||
|
||||
class spell_warr_sweeping_strikes_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_warr_sweeping_strikes_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/)
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_WARRIOR_SWEEPING_STRIKES_EXTRA_ATTACK))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Load()
|
||||
{
|
||||
_procTarget = NULL;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CheckProc(ProcEventInfo& eventInfo)
|
||||
{
|
||||
_procTarget = eventInfo.GetActor()->SelectNearbyTarget(eventInfo.GetProcTarget());
|
||||
return _procTarget;
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
GetTarget()->CastSpell(_procTarget, SPELL_WARRIOR_SWEEPING_STRIKES_EXTRA_ATTACK, true, NULL, aurEff);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
DoCheckProc += AuraCheckProcFn(spell_warr_sweeping_strikes_AuraScript::CheckProc);
|
||||
OnEffectProc += AuraEffectProcFn(spell_warr_sweeping_strikes_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
|
||||
}
|
||||
|
||||
private:
|
||||
Unit* _procTarget;
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const
|
||||
{
|
||||
return new spell_warr_sweeping_strikes_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// 50720 - Vigilance
|
||||
class spell_warr_vigilance : public SpellScriptLoader
|
||||
{
|
||||
@@ -563,34 +657,80 @@ class spell_warr_vigilance : public SpellScriptLoader
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/)
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_WARRIOR_GLYPH_OF_VIGILANCE))
|
||||
return false;
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_WARRIOR_VIGILANCE_PROC))
|
||||
return false;
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_WARRIOR_VIGILANCE_REDIRECT_THREAT))
|
||||
return false;
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_GEN_DAMAGE_REDUCTION_AURA))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
bool Load()
|
||||
{
|
||||
if (Unit* target = GetTarget())
|
||||
target->CastSpell(target, SPELL_GEN_DAMAGE_REDUCTION_AURA, true);
|
||||
_procTarget = NULL;
|
||||
return true;
|
||||
}
|
||||
|
||||
void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
void HandleApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
if (Unit* target = GetTarget())
|
||||
Unit* target = GetTarget();
|
||||
target->CastSpell(target, SPELL_GEN_DAMAGE_REDUCTION_AURA, true);
|
||||
|
||||
if (Unit* caster = GetCaster())
|
||||
target->CastSpell(caster, SPELL_WARRIOR_VIGILANCE_REDIRECT_THREAT, true);
|
||||
}
|
||||
|
||||
void HandleAfterApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
//! WORKAROUND
|
||||
//! this glyph is a proc
|
||||
if (Unit* caster = GetCaster())
|
||||
{
|
||||
if (target->HasAura(SPELL_GEN_DAMAGE_REDUCTION_AURA) && !(target->HasAura(SPELL_PALADIN_BLESSING_OF_SANCTUARY) ||
|
||||
target->HasAura(SPELL_PALADIN_GREATER_BLESSING_OF_SANCTUARY) ||
|
||||
target->HasAura(SPELL_PRIEST_RENEWED_HOPE)))
|
||||
target->RemoveAurasDueToSpell(SPELL_GEN_DAMAGE_REDUCTION_AURA);
|
||||
if (AuraEffect const* glyph = caster->GetAuraEffect(SPELL_WARRIOR_GLYPH_OF_VIGILANCE, EFFECT_0))
|
||||
GetTarget()->ModifyRedirectThreat(glyph->GetAmount());
|
||||
}
|
||||
}
|
||||
|
||||
void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
Unit* target = GetTarget();
|
||||
if (target->HasAura(SPELL_GEN_DAMAGE_REDUCTION_AURA) &&
|
||||
!(target->HasAura(SPELL_PALADIN_BLESSING_OF_SANCTUARY) ||
|
||||
target->HasAura(SPELL_PALADIN_GREATER_BLESSING_OF_SANCTUARY) ||
|
||||
target->HasAura(SPELL_PRIEST_RENEWED_HOPE)))
|
||||
{
|
||||
target->RemoveAurasDueToSpell(SPELL_GEN_DAMAGE_REDUCTION_AURA);
|
||||
}
|
||||
|
||||
target->ResetRedirectThreat();
|
||||
}
|
||||
|
||||
bool CheckProc(ProcEventInfo& /*eventInfo*/)
|
||||
{
|
||||
_procTarget = GetCaster();
|
||||
return _procTarget;
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
GetTarget()->CastSpell(_procTarget, SPELL_WARRIOR_VIGILANCE_PROC, true, NULL, aurEff);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
OnEffectApply += AuraEffectApplyFn(spell_warr_vigilance_AuraScript::OnApply, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
|
||||
OnEffectRemove += AuraEffectRemoveFn(spell_warr_vigilance_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
|
||||
OnEffectApply += AuraEffectApplyFn(spell_warr_vigilance_AuraScript::HandleApply, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
|
||||
AfterEffectApply += AuraEffectApplyFn(spell_warr_vigilance_AuraScript::HandleAfterApply, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
|
||||
OnEffectRemove += AuraEffectRemoveFn(spell_warr_vigilance_AuraScript::HandleRemove, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
|
||||
DoCheckProc += AuraCheckProcFn(spell_warr_vigilance_AuraScript::CheckProc);
|
||||
OnEffectProc += AuraEffectProcFn(spell_warr_vigilance_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
|
||||
}
|
||||
|
||||
private:
|
||||
Unit* _procTarget;
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const
|
||||
@@ -636,6 +776,7 @@ void AddSC_warrior_spell_scripts()
|
||||
new spell_warr_bloodthirst_heal();
|
||||
new spell_warr_charge();
|
||||
new spell_warr_concussion_blow();
|
||||
new spell_warr_damage_shield();
|
||||
new spell_warr_deep_wounds();
|
||||
new spell_warr_execute();
|
||||
new spell_warr_improved_spell_reflection();
|
||||
@@ -645,6 +786,7 @@ void AddSC_warrior_spell_scripts()
|
||||
new spell_warr_rend();
|
||||
new spell_warr_shattering_throw();
|
||||
new spell_warr_slam();
|
||||
new spell_warr_sweeping_strikes();
|
||||
new spell_warr_vigilance();
|
||||
new spell_warr_vigilance_trigger();
|
||||
}
|
||||
Reference in new issue
Block a user