aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/2013_07_21_02_world_spell_spell_script_names_434.sql4
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp12
-rw-r--r--src/server/scripts/Spells/spell_priest.cpp75
3 files changed, 79 insertions, 12 deletions
diff --git a/sql/updates/world/2013_07_21_02_world_spell_spell_script_names_434.sql b/sql/updates/world/2013_07_21_02_world_spell_spell_script_names_434.sql
new file mode 100644
index 00000000000..aa971c0bfad
--- /dev/null
+++ b/sql/updates/world/2013_07_21_02_world_spell_spell_script_names_434.sql
@@ -0,0 +1,4 @@
+DELETE FROM `spell_script_names` WHERE `spell_id`=15286;
+INSERT INTO `spell_script_names`(`spell_id`, `ScriptName`) VALUES
+(15286,'spell_pri_vampiric_embrace'),
+(15290,'spell_pri_vampiric_embrace_target');
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index edec9dc9f95..ce799ab158f 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -5567,18 +5567,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
}
switch (dummySpell->Id)
{
- // Vampiric Embrace
- case 15286:
- {
- if (!victim || !victim->IsAlive() || procSpell->SpellFamilyFlags[1] & 0x80000)
- return false;
-
- // heal amount
- int32 self = CalculatePct(int32(damage), triggerAmount);
- int32 team = CalculatePct(int32(damage), triggerAmount / 2);
- CastCustomSpell(this, 15290, &team, &self, NULL, true, castItem, triggeredByAura);
- return true; // no hidden cooldown
- }
// Priest Tier 6 Trinket (Ashtongue Talisman of Acumen)
case 40438:
{
diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp
index 1976a2c05cf..c83643af29e 100644
--- a/src/server/scripts/Spells/spell_priest.cpp
+++ b/src/server/scripts/Spells/spell_priest.cpp
@@ -55,6 +55,7 @@ enum PriestSpells
SPELL_PRIEST_SHADOWFORM_VISUAL_WITH_GLYPH = 107904,
SPELL_PRIEST_SHADOW_WORD_DEATH = 32409,
SPELL_PRIEST_T9_HEALING_2P = 67201,
+ SPELL_PRIEST_VAMPRIC_EMBRACE = 15290,
SPELL_PRIEST_VAMPIRIC_TOUCH_DISPEL = 64085,
};
@@ -860,6 +861,78 @@ class spell_pri_shadowform : public SpellScriptLoader
}
};
+// 15286 - Vampiric Embrace
+class spell_pri_vampiric_embrace : public SpellScriptLoader
+{
+ public:
+ spell_pri_vampiric_embrace() : SpellScriptLoader("spell_pri_vampiric_embrace") { }
+
+ class spell_pri_vampiric_embrace_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_pri_vampiric_embrace_AuraScript);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_PRIEST_VAMPRIC_EMBRACE))
+ return false;
+ return true;
+ }
+
+ bool CheckProc(ProcEventInfo& eventInfo)
+ {
+ // Not proc from Mind Sear
+ return !(eventInfo.GetDamageInfo()->GetSpellInfo()->SpellFamilyFlags[1] & 0x80000);
+ }
+
+ void HandleEffectProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
+ {
+ PreventDefaultAction();
+ int32 self = int32(CalculatePct(eventInfo.GetDamageInfo()->GetDamage(), aurEff->GetAmount()));
+ int32 team = int32(CalculatePct(eventInfo.GetDamageInfo()->GetDamage(), aurEff->GetAmount() / 2));
+
+ GetTarget()->CastCustomSpell((Unit*)NULL, SPELL_PRIEST_VAMPRIC_EMBRACE, &team, &self, NULL, true, NULL, aurEff);
+ }
+
+ void Register() OVERRIDE
+ {
+ DoCheckProc += AuraCheckProcFn(spell_pri_vampiric_embrace_AuraScript::CheckProc);
+ OnEffectProc += AuraEffectProcFn(spell_pri_vampiric_embrace_AuraScript::HandleEffectProc, EFFECT_0, SPELL_AURA_DUMMY);
+ }
+ };
+
+ AuraScript* GetAuraScript() const OVERRIDE
+ {
+ return new spell_pri_vampiric_embrace_AuraScript();
+ }
+};
+
+// 15290 - Vampiric Embrace (heal)
+class spell_pri_vampiric_embrace_target : public SpellScriptLoader
+{
+ public:
+ spell_pri_vampiric_embrace_target() : SpellScriptLoader("spell_pri_vampiric_embrace_target") { }
+
+ class spell_pri_vampiric_embrace_target_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_pri_vampiric_embrace_target_SpellScript);
+
+ void FilterTargets(std::list<WorldObject*>& unitList)
+ {
+ unitList.remove(GetCaster());
+ }
+
+ void Register() OVERRIDE
+ {
+ OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_pri_vampiric_embrace_target_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_CASTER_AREA_PARTY);
+ }
+ };
+
+ SpellScript* GetSpellScript() const OVERRIDE
+ {
+ return new spell_pri_vampiric_embrace_target_SpellScript();
+ }
+};
+
// 34914 - Vampiric Touch
class spell_pri_vampiric_touch : public SpellScriptLoader
{
@@ -921,5 +994,7 @@ void AddSC_priest_spell_scripts()
new spell_pri_renew();
new spell_pri_shadow_word_death();
new spell_pri_shadowform();
+ new spell_pri_vampiric_embrace();
+ new spell_pri_vampiric_embrace_target();
new spell_pri_vampiric_touch();
}