mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-19 08:55:32 +01:00
Core/Spells: fixed Dark Transformation and Ghoul spells
This commit is contained in:
18
sql/updates/world/4.3.4/custom_2018_01_08_01_world.sql
Normal file
18
sql/updates/world/4.3.4/custom_2018_01_08_01_world.sql
Normal file
@@ -0,0 +1,18 @@
|
||||
DELETE FROM `spell_script_names` WHERE `ScriptName` IN
|
||||
('spell_pet_ghoul_dummy_ability',
|
||||
'spell_dk_shadow_infusion',
|
||||
'spell_dk_dark_transformation',
|
||||
'spell_dk_dark_transformation_aura');
|
||||
|
||||
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
|
||||
(47481, 'spell_pet_ghoul_dummy_ability'),
|
||||
(47482, 'spell_pet_ghoul_dummy_ability'),
|
||||
(47468, 'spell_pet_ghoul_dummy_ability'),
|
||||
(47484, 'spell_pet_ghoul_dummy_ability'),
|
||||
(-48965, 'spell_dk_shadow_infusion'),
|
||||
(63560, 'spell_dk_dark_transformation'),
|
||||
(93426, 'spell_dk_dark_transformation_aura');
|
||||
|
||||
DELETE FROM `spell_proc` WHERE `SpellId`= -48965;
|
||||
INSERT INTO `spell_proc` (`SpellID`, `SchoolMask`, `SpellFamilyName`, `ProcFlags`, `SpellTypeMask`, `SpellPhaseMask`, `HitMask`) VALUES
|
||||
(-48965, 32, 15, 0x00010000 | 0x00004000, 7, 1, 12287);
|
||||
@@ -137,8 +137,101 @@ class npc_pet_dk_guardian : public CreatureScript
|
||||
}
|
||||
};
|
||||
|
||||
enum GhoulSpells
|
||||
{
|
||||
// Dark Transformation
|
||||
SPELL_PET_DARK_TRANSFORMATION = 63560,
|
||||
|
||||
// Gnaw
|
||||
SPELL_PET_GNAW_DUMMY = 47481,
|
||||
SPELL_PET_GNAW_DAMAGE = 91800,
|
||||
SPELL_PET_MONSTROUS_BLOW = 91797,
|
||||
|
||||
// Leap
|
||||
SPELL_PET_LEAP_DUMMY = 47482,
|
||||
SPELL_PET_LEAP_EFFECT = 91809,
|
||||
SPELL_PET_SHAMBLING_RUSH = 91802,
|
||||
|
||||
// Claw
|
||||
SPELL_PET_CLAW_DUMMY = 47468,
|
||||
SPELL_PET_CLAW_DAMAGE = 91776,
|
||||
SPELL_PET_SWEEPING_CLAWS = 91778,
|
||||
|
||||
// Huddle
|
||||
SPELL_PET_HUDDLE_DUMMY = 47484,
|
||||
SPELL_PET_HUDDLE_EFFECT = 91838,
|
||||
SPELL_PET_PUTRID_BULWARK = 91837,
|
||||
};
|
||||
|
||||
class spell_pet_ghoul_dummy_ability : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_pet_ghoul_dummy_ability() : SpellScriptLoader("spell_pet_ghoul_dummy_ability") { }
|
||||
|
||||
class spell_pet_ghoul_dummy_ability_SpellScript : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_pet_ghoul_dummy_ability_SpellScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo(
|
||||
{
|
||||
SPELL_PET_DARK_TRANSFORMATION,
|
||||
SPELL_PET_GNAW_DUMMY,
|
||||
SPELL_PET_GNAW_DAMAGE,
|
||||
SPELL_PET_MONSTROUS_BLOW,
|
||||
SPELL_PET_LEAP_DUMMY,
|
||||
SPELL_PET_LEAP_EFFECT,
|
||||
SPELL_PET_SHAMBLING_RUSH,
|
||||
SPELL_PET_CLAW_DUMMY,
|
||||
SPELL_PET_CLAW_DAMAGE,
|
||||
SPELL_PET_SWEEPING_CLAWS,
|
||||
SPELL_PET_HUDDLE_DUMMY,
|
||||
SPELL_PET_HUDDLE_EFFECT,
|
||||
SPELL_PET_PUTRID_BULWARK
|
||||
});
|
||||
}
|
||||
|
||||
void HandleHit(SpellEffIndex /*effIndex*/)
|
||||
{
|
||||
if (Unit* caster = GetCaster())
|
||||
{
|
||||
bool isTransformed = caster->HasAura(SPELL_PET_DARK_TRANSFORMATION);
|
||||
switch (GetSpellInfo()->Id)
|
||||
{
|
||||
case SPELL_PET_GNAW_DUMMY:
|
||||
caster->CastSpell(GetHitUnit(), isTransformed ? SPELL_PET_MONSTROUS_BLOW : SPELL_PET_GNAW_DAMAGE, true);
|
||||
break;
|
||||
case SPELL_PET_LEAP_DUMMY:
|
||||
caster->CastSpell(GetHitUnit(), isTransformed ? SPELL_PET_SHAMBLING_RUSH : SPELL_PET_LEAP_EFFECT, true);
|
||||
break;
|
||||
case SPELL_PET_CLAW_DUMMY:
|
||||
caster->CastSpell(GetHitUnit(), isTransformed ? SPELL_PET_SWEEPING_CLAWS : SPELL_PET_CLAW_DAMAGE, true);
|
||||
break;
|
||||
case SPELL_PET_HUDDLE_DUMMY:
|
||||
caster->CastSpell(GetHitUnit(), isTransformed ? SPELL_PET_PUTRID_BULWARK : SPELL_PET_HUDDLE_EFFECT, true);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectHitTarget += SpellEffectFn(spell_pet_ghoul_dummy_ability_SpellScript::HandleHit, EFFECT_0, SPELL_EFFECT_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const override
|
||||
{
|
||||
return new spell_pet_ghoul_dummy_ability_SpellScript();
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_deathknight_pet_scripts()
|
||||
{
|
||||
new npc_pet_dk_ebon_gargoyle();
|
||||
new npc_pet_dk_guardian();
|
||||
new spell_pet_ghoul_dummy_ability();
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
*/
|
||||
|
||||
#include "Player.h"
|
||||
#include "Pet.h"
|
||||
#include "ScriptMgr.h"
|
||||
#include "SpellScript.h"
|
||||
#include "SpellAuraEffects.h"
|
||||
@@ -41,7 +42,9 @@ enum DeathKnightSpells
|
||||
SPELL_DK_BLOOD_SHIELD_ABSORB = 77535,
|
||||
SPELL_DK_BUTCHERY = 50163,
|
||||
SPELL_DK_CORPSE_EXPLOSION_TRIGGERED = 43999,
|
||||
SPELL_DK_DARK_TRANSFORMATION_DUMMY = 93426,
|
||||
SPELL_DK_DEATH_AND_DECAY_DAMAGE = 52212,
|
||||
SPELL_DK_DEATH_COIL = 47541,
|
||||
SPELL_DK_DEATH_COIL_DAMAGE = 47632,
|
||||
SPELL_DK_DEATH_COIL_HEAL = 47633,
|
||||
SPELL_DK_DEATH_GRIP = 49560,
|
||||
@@ -64,6 +67,7 @@ enum DeathKnightSpells
|
||||
SPELL_DK_RUNE_TAP = 48982,
|
||||
SPELL_DK_SCENT_OF_BLOOD = 50422,
|
||||
SPELL_DK_SCOURGE_STRIKE_TRIGGERED = 70890,
|
||||
SPELL_DK_SHADOW_INFUSION = 91342,
|
||||
SPELL_DK_UNHOLY_PRESENCE = 48265,
|
||||
SPELL_DK_PESTILENCE_REDUCED_DOTS = 76243,
|
||||
SPELL_DK_PESTILENCE_VISUAL = 91939,
|
||||
@@ -1521,6 +1525,132 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
// -48965 - Shadow Infusion
|
||||
class spell_dk_shadow_infusion : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_dk_shadow_infusion() : SpellScriptLoader("spell_dk_shadow_infusion") { }
|
||||
|
||||
class spell_dk_shadow_infusion_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_dk_shadow_infusion_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo(
|
||||
{
|
||||
SPELL_DK_SHADOW_INFUSION,
|
||||
SPELL_DK_DARK_TRANSFORMATION_DUMMY,
|
||||
SPELL_DK_DEATH_COIL
|
||||
});
|
||||
}
|
||||
|
||||
bool CheckProc(ProcEventInfo& eventInfo)
|
||||
{
|
||||
return eventInfo.GetProcSpell()->GetSpellInfo()->Id == SPELL_DK_DEATH_COIL;
|
||||
}
|
||||
|
||||
void HandleEffectProc(AuraEffect const* /*aurEff*/, ProcEventInfo& /*eventInfo*/)
|
||||
{
|
||||
if (Unit* caster = GetCaster())
|
||||
if (Player* petOwner = caster->ToPlayer())
|
||||
if (Pet* pet = petOwner->GetPet())
|
||||
if (Aura* aura = pet->GetAura(SPELL_DK_SHADOW_INFUSION))
|
||||
if (aura->GetStackAmount() == 4)
|
||||
caster->CastSpell(caster, SPELL_DK_DARK_TRANSFORMATION_DUMMY, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
DoCheckProc += AuraCheckProcFn(spell_dk_shadow_infusion_AuraScript::CheckProc);
|
||||
OnEffectProc += AuraEffectProcFn(spell_dk_shadow_infusion_AuraScript::HandleEffectProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const override
|
||||
{
|
||||
return new spell_dk_shadow_infusion_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// 63560 - Dark Transformation
|
||||
class spell_dk_dark_transformation : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_dk_dark_transformation() : SpellScriptLoader("spell_dk_dark_transformation") { }
|
||||
|
||||
class spell_dk_dark_transformation_SpellScript : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_dk_dark_transformation_SpellScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo(
|
||||
{
|
||||
SPELL_DK_SHADOW_INFUSION,
|
||||
SPELL_DK_DARK_TRANSFORMATION_DUMMY,
|
||||
});
|
||||
}
|
||||
|
||||
void HandleLaunch(SpellEffIndex /*effIndex*/)
|
||||
{
|
||||
if (Unit* caster = GetCaster())
|
||||
{
|
||||
caster->RemoveAurasDueToSpell(SPELL_DK_DARK_TRANSFORMATION_DUMMY);
|
||||
if (Player* petOwner = caster->ToPlayer())
|
||||
if (Pet* pet = petOwner->GetPet())
|
||||
pet->RemoveAurasDueToSpell(SPELL_DK_SHADOW_INFUSION);
|
||||
}
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectLaunchTarget += SpellEffectFn(spell_dk_dark_transformation_SpellScript::HandleLaunch, EFFECT_0, SPELL_EFFECT_APPLY_AURA);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const override
|
||||
{
|
||||
return new spell_dk_dark_transformation_SpellScript();
|
||||
}
|
||||
};
|
||||
|
||||
// 93426 - Dark Transformation
|
||||
class spell_dk_dark_transformation_aura : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_dk_dark_transformation_aura() : SpellScriptLoader("spell_dk_dark_transformation_aura") { }
|
||||
|
||||
class spell_dk_dark_transformation_aura_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_dk_dark_transformation_aura_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo({ SPELL_DK_SHADOW_INFUSION });
|
||||
}
|
||||
|
||||
void HandlePeriodic(AuraEffect const* aurEff)
|
||||
{
|
||||
if (Unit* caster = GetCaster())
|
||||
if (Player* player = caster->ToPlayer())
|
||||
if (Pet* pet = player->GetPet())
|
||||
if (!pet->HasAura(SPELL_DK_SHADOW_INFUSION))
|
||||
aurEff->GetBase()->Remove();
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectPeriodic += AuraEffectPeriodicFn(spell_dk_dark_transformation_aura_AuraScript::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const override
|
||||
{
|
||||
return new spell_dk_dark_transformation_aura_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_deathknight_spell_scripts()
|
||||
{
|
||||
new spell_dk_anti_magic_shell_raid();
|
||||
@@ -1529,6 +1659,8 @@ void AddSC_deathknight_spell_scripts()
|
||||
new spell_dk_blood_boil();
|
||||
new spell_dk_blood_gorged();
|
||||
new spell_dk_butchery();
|
||||
new spell_dk_dark_transformation();
|
||||
new spell_dk_dark_transformation_aura();
|
||||
new spell_dk_death_and_decay();
|
||||
new spell_dk_death_coil();
|
||||
new spell_dk_death_gate();
|
||||
@@ -1547,6 +1679,7 @@ void AddSC_deathknight_spell_scripts()
|
||||
new spell_dk_raise_dead();
|
||||
new spell_dk_rune_tap_party();
|
||||
new spell_dk_scent_of_blood();
|
||||
new spell_dk_shadow_infusion();
|
||||
new spell_dk_scourge_strike();
|
||||
new spell_dk_vampiric_blood();
|
||||
new spell_dk_will_of_the_necropolis();
|
||||
|
||||
Reference in New Issue
Block a user