Scripts/Spells: move implementation of some spells into scripts.
* 41337 Aura of Anger * 46394 Burn (Brutallus) * 53302 Sniper Training * 45472 Parachute * 66118 Leeching Swarm * 51685 Prey on the Weak * 20911 Blessing of Sanctuary * 25899 Greater Blessing of Sanctuary Scripts/Spells: remove several spells implementations from core to table (requires DB data) * 31231 Cheat Death * 51662 Hunger for Blood --HG-- branch : trunk
This commit is contained in:
@@ -26752,8 +26752,12 @@ INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
|
||||
( 24750, 'spell_gen_trick'),
|
||||
( 24751, 'spell_gen_trick_or_treat'),
|
||||
( 29266, 'spell_creature_permanent_feign_death'),
|
||||
( 41337, 'spell_gen_aura_of_anger'),
|
||||
( 45472, 'spell_gen_parachute'),
|
||||
( 46394, 'spell_gen_burn_brutallus'),
|
||||
( 57685, 'spell_creature_permanent_feign_death'),
|
||||
( 58601, 'spell_gen_remove_flight_auras'),
|
||||
( 66118, 'spell_gen_leeching_swarm'),
|
||||
( 58951, 'spell_creature_permanent_feign_death'),
|
||||
( 70592, 'spell_creature_permanent_feign_death'),
|
||||
( 70628, 'spell_creature_permanent_feign_death'),
|
||||
@@ -26829,6 +26833,8 @@ INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
|
||||
( 20425, 'spell_pal_judgement_of_command'),
|
||||
( 63521, 'spell_pal_guarded_by_the_light'),
|
||||
(-20473, 'spell_pal_holy_shock'),
|
||||
( 20911, 'spell_pal_blessing_of_sanctuary'),
|
||||
( 25899, 'spell_pal_blessing_of_sanctuary')
|
||||
( 37877, 'spell_pal_blessing_of_faith'),
|
||||
-- hunter
|
||||
( 53209, 'spell_hun_chimera_shot'),
|
||||
@@ -26837,13 +26843,13 @@ INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
|
||||
( 53478, 'spell_hun_last_stand_pet'),
|
||||
( 23989, 'spell_hun_readiness'),
|
||||
( 37506, 'spell_hun_scatter_shot'),
|
||||
(-53302, 'spell_hun_sniper_training'),
|
||||
( 55709, 'spell_hun_pet_heart_of_the_phoenix'),
|
||||
( 54044, 'spell_hun_pet_carrion_feeder'),
|
||||
-- rogue
|
||||
( 5938, 'spell_rog_shiv'),
|
||||
( 14185, 'spell_rog_preparation'),
|
||||
( 31231, 'spell_rog_cheat_death'),
|
||||
( 51662, 'spell_rog_hunger_for_blood'),
|
||||
(-51685, 'spell_rog_prey_on_the_weak'),
|
||||
-- priest
|
||||
( 47948, 'spell_pri_pain_and_suffering_proc'),
|
||||
(-47540, 'spell_pri_penance'),
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
DELETE FROM `spell_script_names` WHERE `spell_id`=41337 AND `ScriptName`='spell_gen_aura_of_anger';
|
||||
DELETE FROM `spell_script_names` WHERE `spell_id`=46394 AND `ScriptName`='spell_gen_burn_brutallus';
|
||||
DELETE FROM `spell_script_names` WHERE `spell_id`=-53302 AND `ScriptName`='spell_hun_sniper_training';
|
||||
DELETE FROM `spell_script_names` WHERE `spell_id`=45472 AND `ScriptName`='spell_gen_parachute';
|
||||
DELETE FROM `spell_script_names` WHERE `spell_id`=-51685 AND `ScriptName`='spell_rog_prey_on_the_weak';
|
||||
DELETE FROM `spell_script_names` WHERE `spell_id`=66118 AND `ScriptName`='spell_gen_leeching_swarm';
|
||||
DELETE FROM `spell_script_names` WHERE `spell_id` IN (20911,25899) AND `ScriptName`='spell_pal_blessing_of_sanctuary';
|
||||
|
||||
INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
|
||||
(41337,'spell_gen_aura_of_anger'),
|
||||
(46394,'spell_gen_burn_brutallus'),
|
||||
(-53302,'spell_hun_sniper_training'),
|
||||
(45472,'spell_gen_parachute'),
|
||||
(-51685,'spell_rog_prey_on_the_weak'),
|
||||
(66118,'spell_gen_leeching_swarm'),
|
||||
(20911,'spell_pal_blessing_of_sanctuary'),
|
||||
(25899,'spell_pal_blessing_of_sanctuary');
|
||||
|
||||
DELETE FROM `spell_script_names` WHERE `spell_id`=51662 AND `ScriptName`='spell_rog_hunger_for_blood';
|
||||
DELETE FROM `spell_script_names` WHERE `spell_id`=31231 AND `ScriptName`='spell_rog_cheat_death';
|
||||
@@ -1057,22 +1057,6 @@ void AuraEffect::UpdatePeriodic(Unit * caster)
|
||||
{
|
||||
switch(GetAuraType())
|
||||
{
|
||||
case SPELL_AURA_PERIODIC_DAMAGE:
|
||||
switch (GetId())
|
||||
{
|
||||
case 41337: // Aura of Anger
|
||||
if (AuraEffect * aurEff = GetBase()->GetEffect(1))
|
||||
aurEff->ChangeAmount(aurEff->GetAmount()+5);
|
||||
SetAmount(100 * m_tickNumber);
|
||||
break;
|
||||
case 46394: // Brutallus Burn
|
||||
if (m_tickNumber % 11 == 0)
|
||||
SetAmount(GetAmount() * 2);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case SPELL_AURA_DUMMY:
|
||||
// Haunting Spirits
|
||||
if (GetId() == 7057)
|
||||
@@ -1081,24 +1065,6 @@ void AuraEffect::UpdatePeriodic(Unit * caster)
|
||||
m_amplitude *= IN_MILLISECONDS;
|
||||
}
|
||||
break;
|
||||
case SPELL_AURA_PERIODIC_TRIGGER_SPELL:
|
||||
switch (GetId())
|
||||
{
|
||||
// Sniper training
|
||||
case 53302:
|
||||
case 53303:
|
||||
case 53304:
|
||||
Unit * target = GetBase()->GetUnitOwner();
|
||||
if (target->GetTypeId() != TYPEID_PLAYER)
|
||||
break;
|
||||
|
||||
if (target->ToPlayer()->isMoving())
|
||||
m_amount = target->CalculateSpellDamage(target, m_spellProto,m_effIndex, &m_baseAmount);
|
||||
else
|
||||
--m_amount;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case SPELL_AURA_PERIODIC_DUMMY:
|
||||
switch(GetSpellProto()->SpellFamilyName)
|
||||
{
|
||||
@@ -1913,32 +1879,6 @@ void AuraEffect::PeriodicDummyTick(Unit * target, Unit * caster) const
|
||||
// 7053 Forsaken Skill: Shadow
|
||||
return;
|
||||
}
|
||||
case 45472: // Parachute
|
||||
if (target->GetTypeId() == TYPEID_PLAYER)
|
||||
{
|
||||
Player *plr = (Player*)target;
|
||||
if (plr->IsFalling())
|
||||
{
|
||||
plr->RemoveAurasDueToSpell(45472);
|
||||
plr->CastSpell(plr, 44795, true);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 51685: // Prey on the Weak
|
||||
case 51686:
|
||||
case 51687:
|
||||
case 51688:
|
||||
case 51689:
|
||||
if (target->getVictim() && (target->GetHealthPct() > target->getVictim()->GetHealthPct())) {
|
||||
if (!target->HasAura(58670)) {
|
||||
int32 basepoints = SpellMgr::CalculateSpellEffectAmount(GetSpellProto(), 0);
|
||||
target->CastCustomSpell(target, 58670, &basepoints, 0, 0, true);
|
||||
}
|
||||
}
|
||||
else
|
||||
target->RemoveAurasDueToSpell(58670);
|
||||
break;
|
||||
case 62292: // Blaze (Pool of Tar)
|
||||
// should we use custom damage?
|
||||
target->CastSpell((Unit*)NULL, m_spellProto->EffectTriggerSpell[m_effIndex], true);
|
||||
@@ -1958,14 +1898,6 @@ void AuraEffect::PeriodicDummyTick(Unit * target, Unit * caster) const
|
||||
target->RemoveAura(64821);
|
||||
}
|
||||
break;
|
||||
case 66118: // Leeching Swarm (Anub'arak)
|
||||
int32 lifeLeeched = target->GetHealth() * GetAmount() / 100;
|
||||
if (lifeLeeched < 250) lifeLeeched = 250;
|
||||
// Damage
|
||||
caster->CastCustomSpell(target, 66240, &lifeLeeched, 0, 0, false);
|
||||
// Heal
|
||||
caster->CastCustomSpell(caster, 66125, &lifeLeeched, 0, 0, false);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case SPELLFAMILY_MAGE:
|
||||
@@ -2329,27 +2261,6 @@ void AuraEffect::TriggerSpell(Unit * target, Unit * caster) const
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SPELLFAMILY_HUNTER:
|
||||
{
|
||||
switch (auraId)
|
||||
{
|
||||
// Sniper training
|
||||
case 53302:
|
||||
case 53303:
|
||||
case 53304:
|
||||
// We are standing at the moment
|
||||
if (GetAmount() > 0)
|
||||
return;
|
||||
|
||||
triggerSpellId = 64418 + auraId - 53302;
|
||||
|
||||
// If aura is active - no need to continue
|
||||
if (target->HasAura(triggerSpellId))
|
||||
return;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SPELLFAMILY_SHAMAN:
|
||||
{
|
||||
switch(auraId)
|
||||
@@ -6158,26 +6069,8 @@ void AuraEffect::HandleAuraDummy(AuraApplication const * aurApp, uint8 mode, boo
|
||||
break;
|
||||
}
|
||||
case SPELLFAMILY_PALADIN:
|
||||
if (!(mode & AURA_EFFECT_HANDLE_REAL))
|
||||
break;
|
||||
switch (GetSpellProto()->SpellIconID)
|
||||
{
|
||||
// Blessing of Sanctuary
|
||||
// Greater Blessing of Sanctuary
|
||||
case 19:
|
||||
case 1804:
|
||||
{
|
||||
if (!caster)
|
||||
break;
|
||||
|
||||
if (apply)
|
||||
caster->CastSpell(target, 67480, true);
|
||||
else
|
||||
target->RemoveAura(67480, GetCasterGUID());
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
// if (!(mode & AURA_EFFECT_HANDLE_REAL))
|
||||
// break;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -23,6 +23,106 @@
|
||||
*/
|
||||
|
||||
#include "ScriptPCH.h"
|
||||
#include "SpellAuraEffects.h"
|
||||
|
||||
// 41337 Aura of Anger
|
||||
class spell_gen_aura_of_anger : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_gen_aura_of_anger() : SpellScriptLoader("spell_gen_aura_of_anger") { }
|
||||
|
||||
class spell_gen_aura_of_anger_AuraScript : public AuraScript
|
||||
{
|
||||
void HandleEffectPeriodicUpdate(AuraEffect * aurEff)
|
||||
{
|
||||
if (AuraEffect * aurEff1 = aurEff->GetBase()->GetEffect(EFFECT_1))
|
||||
aurEff1->ChangeAmount(aurEff1->GetAmount() + 5);
|
||||
aurEff->SetAmount(100 * aurEff->GetTickNumber());
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_gen_aura_of_anger_AuraScript::HandleEffectPeriodicUpdate, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript *GetAuraScript() const
|
||||
{
|
||||
return new spell_gen_aura_of_anger_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// 46394 Brutallus Burn
|
||||
class spell_gen_burn_brutallus : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_gen_burn_brutallus() : SpellScriptLoader("spell_gen_burn_brutallus") { }
|
||||
|
||||
class spell_gen_burn_brutallus_AuraScript : public AuraScript
|
||||
{
|
||||
void HandleEffectPeriodicUpdate(AuraEffect * aurEff)
|
||||
{
|
||||
if (aurEff->GetTickNumber() % 11 == 0)
|
||||
aurEff->SetAmount(aurEff->GetAmount() * 2);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_gen_burn_brutallus_AuraScript::HandleEffectPeriodicUpdate, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript *GetAuraScript() const
|
||||
{
|
||||
return new spell_gen_burn_brutallus_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// 45472 Parachute
|
||||
enum eParachuteSpells
|
||||
{
|
||||
SPELL_PARACHUTE = 45472,
|
||||
SPELL_PARACHUTE_BUFF = 44795,
|
||||
};
|
||||
|
||||
class spell_gen_parachute : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_gen_parachute() : SpellScriptLoader("spell_gen_parachute") { }
|
||||
|
||||
class spell_gen_parachute_AuraScript : public AuraScript
|
||||
{
|
||||
bool Validate(SpellEntry const * /*spellEntry*/)
|
||||
{
|
||||
if (!sSpellStore.LookupEntry(SPELL_PARACHUTE))
|
||||
return false;
|
||||
if (!sSpellStore.LookupEntry(SPELL_PARACHUTE_BUFF))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandleEffectPeriodic(AuraEffect const * /*aurEff*/, AuraApplication const * aurApp)
|
||||
{
|
||||
if (Unit* pTarget = aurApp->GetTarget())
|
||||
if (Player* pPlayerTarget = pTarget->ToPlayer())
|
||||
if (pPlayerTarget->IsFalling())
|
||||
{
|
||||
pPlayerTarget->RemoveAurasDueToSpell(SPELL_PARACHUTE);
|
||||
pPlayerTarget->CastSpell(pPlayerTarget, SPELL_PARACHUTE_BUFF, true);
|
||||
}
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
OnEffectPeriodic += AuraEffectPeriodicFn(spell_gen_parachute_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript *GetAuraScript() const
|
||||
{
|
||||
return new spell_gen_parachute_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
enum NPCEntries
|
||||
{
|
||||
@@ -115,6 +215,56 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
// 66118 Leeching Swarm
|
||||
enum eLeechingSwarmSpells
|
||||
{
|
||||
SPELL_LEECHING_SWARM_DMG = 66240,
|
||||
SPELL_LEECHING_SWARM_HEAL = 66125,
|
||||
};
|
||||
|
||||
class spell_gen_leeching_swarm : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_gen_leeching_swarm() : SpellScriptLoader("spell_gen_leeching_swarm") { }
|
||||
|
||||
class spell_gen_leeching_swarm_AuraScript : public AuraScript
|
||||
{
|
||||
bool Validate(SpellEntry const * /*spellEntry*/)
|
||||
{
|
||||
if (!sSpellStore.LookupEntry(SPELL_LEECHING_SWARM_DMG))
|
||||
return false;
|
||||
if (!sSpellStore.LookupEntry(SPELL_LEECHING_SWARM_HEAL))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandleEffectPeriodic(AuraEffect const * aurEff, AuraApplication const * aurApp)
|
||||
{
|
||||
if (Unit* pTarget = aurApp->GetTarget())
|
||||
if (Unit* pCaster = GetCaster())
|
||||
{
|
||||
int32 lifeLeeched = pTarget->CountPctFromMaxHealth(aurEff->GetAmount());
|
||||
if (lifeLeeched < 250)
|
||||
lifeLeeched = 250;
|
||||
// Damage
|
||||
pCaster->CastCustomSpell(pTarget, SPELL_LEECHING_SWARM_DMG, &lifeLeeched, 0, 0, false);
|
||||
// Heal
|
||||
pCaster->CastCustomSpell(pCaster, SPELL_LEECHING_SWARM_HEAL, &lifeLeeched, 0, 0, false);
|
||||
}
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
OnEffectPeriodic += AuraEffectPeriodicFn(spell_gen_leeching_swarm_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript *GetAuraScript() const
|
||||
{
|
||||
return new spell_gen_leeching_swarm_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// 24750 Trick
|
||||
enum eTrickSpells
|
||||
{
|
||||
@@ -320,6 +470,10 @@ public:
|
||||
|
||||
void AddSC_generic_spell_scripts()
|
||||
{
|
||||
new spell_gen_aura_of_anger();
|
||||
new spell_gen_burn_brutallus();
|
||||
new spell_gen_leeching_swarm();
|
||||
new spell_gen_parachute();
|
||||
new spell_gen_pet_summoned();
|
||||
new spell_gen_remove_flight_auras();
|
||||
new spell_gen_trick();
|
||||
|
||||
@@ -329,6 +329,72 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
// 53302, 53303, 53304 Sniper Training
|
||||
enum eSniperTrainingSpells
|
||||
{
|
||||
SPELL_SNIPER_TRAINING_R1 = 53302,
|
||||
SPELL_SNIPER_TRAINING_BUFF_R1 = 64418,
|
||||
};
|
||||
|
||||
class spell_hun_sniper_training : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_hun_sniper_training() : SpellScriptLoader("spell_hun_sniper_training") { }
|
||||
|
||||
class spell_hun_sniper_training_AuraScript : public AuraScript
|
||||
{
|
||||
bool Validate(SpellEntry const * entry)
|
||||
{
|
||||
if (!sSpellStore.LookupEntry(SPELL_SNIPER_TRAINING_R1))
|
||||
return false;
|
||||
if (!sSpellStore.LookupEntry(SPELL_SNIPER_TRAINING_BUFF_R1))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandlePeriodic(AuraEffect const * aurEff, AuraApplication const * aurApp)
|
||||
{
|
||||
if (aurEff->GetAmount() > 0)
|
||||
return;
|
||||
|
||||
if (Unit* pTarget = aurApp->GetTarget())
|
||||
{
|
||||
uint32 spellId = SPELL_SNIPER_TRAINING_BUFF_R1 + GetId() - SPELL_SNIPER_TRAINING_R1;
|
||||
if (!pTarget->HasAura(spellId))
|
||||
{
|
||||
const SpellEntry* triggeredSpellInfo = sSpellStore.LookupEntry(spellId);
|
||||
Unit* triggerCaster = GetTriggeredSpellCaster(triggeredSpellInfo, GetCaster(), pTarget);
|
||||
triggerCaster->CastSpell(pTarget, triggeredSpellInfo, true, 0, aurEff);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void HandleUpdatePeriodic(AuraEffect * aurEff)
|
||||
{
|
||||
if (Unit* pTarget = GetUnitOwner())
|
||||
if (Player* pPlayerTarget = pTarget->ToPlayer())
|
||||
{
|
||||
int32 baseAmount = aurEff->GetBaseAmount();
|
||||
int32 amount = pPlayerTarget->isMoving() ?
|
||||
pTarget->CalculateSpellDamage(pTarget, GetSpellProto(), aurEff->GetEffIndex(), &baseAmount) :
|
||||
aurEff->GetAmount() - 1;
|
||||
aurEff->SetAmount(amount);
|
||||
}
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
OnEffectPeriodic += AuraEffectPeriodicFn(spell_hun_sniper_training_AuraScript::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
|
||||
OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_hun_sniper_training_AuraScript::HandleUpdatePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript *GetAuraScript() const
|
||||
{
|
||||
return new spell_hun_sniper_training_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
class spell_hun_pet_heart_of_the_phoenix : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
@@ -424,6 +490,7 @@ void AddSC_hunter_spell_scripts()
|
||||
new spell_hun_masters_call();
|
||||
new spell_hun_readiness();
|
||||
new spell_hun_scatter_shot();
|
||||
new spell_hun_sniper_training();
|
||||
new spell_hun_pet_heart_of_the_phoenix();
|
||||
new spell_hun_pet_carrion_feeder();
|
||||
}
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
enum PaladinSpells
|
||||
{
|
||||
PALADIN_SPELL_DIVINE_PLEA = 54428,
|
||||
PALADIN_SPELL_BLESSING_OF_SANCTUARY_BUFF = 67480,
|
||||
|
||||
PALADIN_SPELL_HOLY_SHOCK_R1 = 20473,
|
||||
PALADIN_SPELL_HOLY_SHOCK_R1_DAMAGE = 25912,
|
||||
@@ -89,6 +90,49 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
// 20911 Blessing of Sanctuary
|
||||
// 25899 Greater Blessing of Sanctuary
|
||||
class spell_pal_blessing_of_sanctuary : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_pal_blessing_of_sanctuary() : SpellScriptLoader("spell_pal_blessing_of_sanctuary") { }
|
||||
|
||||
class spell_pal_blessing_of_sanctuary_AuraScript : public AuraScript
|
||||
{
|
||||
bool Validate(SpellEntry const * entry)
|
||||
{
|
||||
if (!sSpellStore.LookupEntry(PALADIN_SPELL_BLESSING_OF_SANCTUARY_BUFF))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandleEffectApply(AuraEffect const * /*aurEff*/, AuraApplication const * aurApp, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
if (Unit* pCaster = GetCaster())
|
||||
if (Unit* pTarget = aurApp->GetTarget())
|
||||
pCaster->CastSpell(pTarget, PALADIN_SPELL_BLESSING_OF_SANCTUARY_BUFF, true);
|
||||
}
|
||||
|
||||
void HandleEffectRemove(AuraEffect const * /*aurEff*/, AuraApplication const * aurApp, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
if (GetCaster())
|
||||
if (Unit* pTarget = aurApp->GetTarget())
|
||||
pTarget->RemoveAura(PALADIN_SPELL_BLESSING_OF_SANCTUARY_BUFF, GetCasterGUID());
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
OnEffectApply += AuraEffectApplyFn(spell_pal_blessing_of_sanctuary_AuraScript::HandleEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
|
||||
OnEffectRemove += AuraEffectRemoveFn(spell_pal_blessing_of_sanctuary_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript *GetAuraScript() const
|
||||
{
|
||||
return new spell_pal_blessing_of_sanctuary_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// 63521 Guarded by The Light
|
||||
class spell_pal_guarded_by_the_light : public SpellScriptLoader
|
||||
{
|
||||
@@ -206,6 +250,7 @@ public:
|
||||
void AddSC_paladin_spell_scripts()
|
||||
{
|
||||
new spell_pal_blessing_of_faith();
|
||||
new spell_pal_blessing_of_sanctuary();
|
||||
new spell_pal_guarded_by_the_light();
|
||||
new spell_pal_holy_shock();
|
||||
new spell_pal_judgement_of_command();
|
||||
|
||||
@@ -25,76 +25,9 @@
|
||||
|
||||
enum RogueSpells
|
||||
{
|
||||
ROGUE_SPELL_HUNGER_FOR_BLOOD_BUFF = 63848,
|
||||
ROGUE_SPELL_SHIV_TRIGGERED = 5940,
|
||||
ROGUE_SPELL_CHEATING_DEATH = 45182,
|
||||
ROGUE_SPELL_GLYPH_OF_PREPARATION = 56819,
|
||||
};
|
||||
|
||||
class spell_rog_cheat_death : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_rog_cheat_death() : SpellScriptLoader("spell_rog_cheat_death") { }
|
||||
|
||||
class spell_rog_cheat_death_SpellScript : public SpellScript
|
||||
{
|
||||
bool Validate(SpellEntry const * /*spellEntry*/)
|
||||
{
|
||||
if (!sSpellStore.LookupEntry(ROGUE_SPELL_CHEATING_DEATH))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandleDummy(SpellEffIndex /*effIndex*/)
|
||||
{
|
||||
Unit *caster = GetCaster();
|
||||
caster->CastSpell(caster, ROGUE_SPELL_CHEATING_DEATH, true);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
// add dummy effect spell handler to Cheat Death
|
||||
OnEffect += SpellEffectFn(spell_rog_cheat_death_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript *GetSpellScript() const
|
||||
{
|
||||
return new spell_rog_cheat_death_SpellScript;
|
||||
}
|
||||
};
|
||||
|
||||
class spell_rog_hunger_for_blood : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_rog_hunger_for_blood() : SpellScriptLoader("spell_rog_hunger_for_blood") { }
|
||||
|
||||
class spell_rog_hunger_for_blood_SpellScript : public SpellScript
|
||||
{
|
||||
bool Validate(SpellEntry const * /*spellEntry*/)
|
||||
{
|
||||
if (!sSpellStore.LookupEntry(ROGUE_SPELL_HUNGER_FOR_BLOOD_BUFF))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandleDummy(SpellEffIndex /*effIndex*/)
|
||||
{
|
||||
Unit *caster = GetCaster();
|
||||
caster->CastSpell(caster, ROGUE_SPELL_HUNGER_FOR_BLOOD_BUFF, true);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
// add dummy effect spell handler to Hunger for Blood
|
||||
OnEffect += SpellEffectFn(spell_rog_hunger_for_blood_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript *GetSpellScript() const
|
||||
{
|
||||
return new spell_rog_hunger_for_blood_SpellScript();
|
||||
}
|
||||
ROGUE_SPELL_PREY_ON_THE_WEAK = 58670,
|
||||
};
|
||||
|
||||
class spell_rog_preparation : public SpellScriptLoader
|
||||
@@ -159,6 +92,52 @@ class spell_rog_preparation : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
// 51685-51689 Prey on the Weak
|
||||
class spell_rog_prey_on_the_weak : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_rog_prey_on_the_weak() : SpellScriptLoader("spell_rog_prey_on_the_weak") { }
|
||||
|
||||
class spell_rog_prey_on_the_weak_AuraScript : public AuraScript
|
||||
{
|
||||
bool Validate(SpellEntry const * /*spellEntry*/)
|
||||
{
|
||||
if (!sSpellStore.LookupEntry(ROGUE_SPELL_PREY_ON_THE_WEAK))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandleEffectPeriodic(AuraEffect const * /*aurEff*/, AuraApplication const * aurApp)
|
||||
{
|
||||
if (Unit* pTarget = aurApp->GetTarget())
|
||||
{
|
||||
Unit* pVictim = pTarget->getVictim();
|
||||
if (pVictim && (pTarget->GetHealthPct() > pVictim->GetHealthPct()))
|
||||
{
|
||||
if (!pTarget->HasAura(ROGUE_SPELL_PREY_ON_THE_WEAK))
|
||||
{
|
||||
int32 bp = SpellMgr::CalculateSpellEffectAmount(GetSpellProto(), 0);
|
||||
pTarget->CastCustomSpell(pTarget, ROGUE_SPELL_PREY_ON_THE_WEAK, &bp, 0, 0, true);
|
||||
}
|
||||
}
|
||||
else
|
||||
pTarget->RemoveAurasDueToSpell(ROGUE_SPELL_PREY_ON_THE_WEAK);
|
||||
}
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
OnEffectPeriodic += AuraEffectPeriodicFn(spell_rog_prey_on_the_weak_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript *GetAuraScript() const
|
||||
{
|
||||
return new spell_rog_prey_on_the_weak_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
class spell_rog_shiv : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
@@ -198,8 +177,7 @@ class spell_rog_shiv : public SpellScriptLoader
|
||||
|
||||
void AddSC_rogue_spell_scripts()
|
||||
{
|
||||
new spell_rog_cheat_death;
|
||||
new spell_rog_hunger_for_blood;
|
||||
new spell_rog_preparation;
|
||||
new spell_rog_shiv;
|
||||
new spell_rog_preparation();
|
||||
new spell_rog_prey_on_the_weak();
|
||||
new spell_rog_shiv();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user