aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2016-07-06 00:05:13 +0200
committerShauren <shauren.trinity@gmail.com>2016-07-06 00:05:13 +0200
commit70137b8f3aae7c875f1fc0b1643d80aece933104 (patch)
tree2ffc5d94bca4988dd5ba5af1a4bd3f077de5e238 /src/server/scripts
parentf7883bd5251a759da1ca8be3ba6f6cead36723ec (diff)
parenta7fcae93280d5d8010c4fe8139ce1925a92c8744 (diff)
Merge branch '6.x' of https://github.com/TrinityCore/TrinityCore into legion
Diffstat (limited to 'src/server/scripts')
-rw-r--r--src/server/scripts/Commands/cs_misc.cpp12
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp12
-rw-r--r--src/server/scripts/Spells/spell_druid.cpp8
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp162
-rw-r--r--src/server/scripts/Spells/spell_monk.cpp184
6 files changed, 347 insertions, 33 deletions
diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp
index dd087a63146..6f27d733eb8 100644
--- a/src/server/scripts/Commands/cs_misc.cpp
+++ b/src/server/scripts/Commands/cs_misc.cpp
@@ -2192,17 +2192,9 @@ public:
}
return true;
}
- /*
- ComeToMe command REQUIRED for 3rd party scripting library to have access to PointMovementGenerator
- Without this function 3rd party scripting library will get linking errors (unresolved external)
- when attempting to use the PointMovementGenerator
- */
- static bool HandleComeToMeCommand(ChatHandler* handler, char const* args)
- {
- char const* newFlagStr = strtok((char*)args, " ");
- if (!newFlagStr)
- return false;
+ static bool HandleComeToMeCommand(ChatHandler* handler, char const* /*args*/)
+ {
Creature* caster = handler->getSelectedCreature();
if (!caster)
{
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp
index b87c836c2a4..84ee5cd97db 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp
@@ -298,7 +298,7 @@ public:
if (Blind_Timer <= diff)
{
std::list<Unit*> targets;
- SelectTargetList(targets, 5, SELECT_TARGET_RANDOM, me->GetMeleeReach()*5, true);
+ SelectTargetList(targets, 5, SELECT_TARGET_RANDOM, me->GetCombatReach()*5, true);
for (std::list<Unit*>::const_iterator i = targets.begin(); i != targets.end(); ++i)
if (!me->IsWithinMeleeRange(*i))
{
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp
index 33afada15fd..3a7d8547cc9 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp
@@ -1366,17 +1366,6 @@ class spell_algalon_supermassive_fail : public SpellScriptLoader
}
};
-class achievement_he_feeds_on_your_tears : public AchievementCriteriaScript
-{
- public:
- achievement_he_feeds_on_your_tears() : AchievementCriteriaScript("achievement_he_feeds_on_your_tears") { }
-
- bool OnCheck(Player* /*source*/, Unit* target) override
- {
- return !target->GetAI()->GetData(DATA_HAS_FED_ON_TEARS);
- }
-};
-
void AddSC_boss_algalon_the_observer()
{
new boss_algalon_the_observer();
@@ -1393,5 +1382,4 @@ void AddSC_boss_algalon_the_observer()
new spell_algalon_cosmic_smash();
new spell_algalon_cosmic_smash_damage();
new spell_algalon_supermassive_fail();
- new achievement_he_feeds_on_your_tears();
}
diff --git a/src/server/scripts/Spells/spell_druid.cpp b/src/server/scripts/Spells/spell_druid.cpp
index 2c941a4f757..bb7ad7a84c0 100644
--- a/src/server/scripts/Spells/spell_druid.cpp
+++ b/src/server/scripts/Spells/spell_druid.cpp
@@ -74,7 +74,7 @@ class spell_dru_dash : public SpellScriptLoader
void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
{
// do not set speed if not in cat form
- if (GetUnitOwner()->GetShapeshiftForm() != FORM_CAT)
+ if (GetUnitOwner()->GetShapeshiftForm() != FORM_CAT_FORM)
amount = 0;
}
@@ -767,7 +767,7 @@ class spell_dru_savage_roar : public SpellScriptLoader
SpellCastResult CheckCast()
{
Unit* caster = GetCaster();
- if (caster->GetShapeshiftForm() != FORM_CAT)
+ if (caster->GetShapeshiftForm() != FORM_CAT_FORM)
return SPELL_FAILED_ONLY_SHAPESHIFT;
return SPELL_CAST_OK;
@@ -889,7 +889,7 @@ class spell_dru_stampede : public SpellScriptLoader
void HandleEffectCatProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
{
PreventDefaultAction();
- if (GetTarget()->GetShapeshiftForm() != FORM_CAT || eventInfo.GetDamageInfo()->GetSpellInfo()->Id != SPELL_DRUID_FERAL_CHARGE_CAT)
+ if (GetTarget()->GetShapeshiftForm() != FORM_CAT_FORM || eventInfo.GetDamageInfo()->GetSpellInfo()->Id != SPELL_DRUID_FERAL_CHARGE_CAT)
return;
GetTarget()->CastSpell(GetTarget(), sSpellMgr->GetSpellWithRank(SPELL_DRUID_STAMPEDE_CAT_RANK_1, GetSpellInfo()->GetRank()), true, NULL, aurEff);
@@ -899,7 +899,7 @@ class spell_dru_stampede : public SpellScriptLoader
void HandleEffectBearProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
{
PreventDefaultAction();
- if (GetTarget()->GetShapeshiftForm() != FORM_BEAR || eventInfo.GetDamageInfo()->GetSpellInfo()->Id != SPELL_DRUID_FERAL_CHARGE_BEAR)
+ if (GetTarget()->GetShapeshiftForm() != FORM_BEAR_FORM || eventInfo.GetDamageInfo()->GetSpellInfo()->Id != SPELL_DRUID_FERAL_CHARGE_BEAR)
return;
GetTarget()->CastSpell(GetTarget(), sSpellMgr->GetSpellWithRank(SPELL_DRUID_STAMPEDE_BAER_RANK_1, GetSpellInfo()->GetRank()), true, NULL, aurEff);
diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp
index cf9ff3ef28b..f0ebfb23427 100644
--- a/src/server/scripts/Spells/spell_generic.cpp
+++ b/src/server/scripts/Spells/spell_generic.cpp
@@ -4228,6 +4228,164 @@ class spell_gen_clear_debuffs : public SpellScriptLoader
}
};
+// 169869 - Transformation Sickness
+class spell_gen_decimatus_transformation_sickness : public SpellScriptLoader
+{
+public:
+ spell_gen_decimatus_transformation_sickness() : SpellScriptLoader("spell_gen_decimatus_transformation_sickness") { }
+
+ class spell_gen_decimatus_transformation_sickness_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_gen_decimatus_transformation_sickness_SpellScript);
+
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ if (Unit* target = GetHitUnit())
+ target->SetHealth(target->CountPctFromMaxHealth(10));
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_gen_decimatus_transformation_sickness_SpellScript::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+ };
+
+ SpellScript* GetSpellScript() const override
+ {
+ return new spell_gen_decimatus_transformation_sickness_SpellScript();
+ }
+};
+
+// 189491 - Summon Towering Infernal.
+class spell_gen_anetheron_summon_towering_infernal : public SpellScriptLoader
+{
+ public:
+ spell_gen_anetheron_summon_towering_infernal() : SpellScriptLoader("spell_gen_anetheron_summon_towering_infernal") { }
+
+ class spell_gen_anetheron_summon_towering_infernal_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_gen_anetheron_summon_towering_infernal_SpellScript);
+
+ void HandleDummy(SpellEffIndex /* effIndex */)
+ {
+ GetCaster()->CastSpell(GetHitUnit(), uint32(GetEffectValue()), true);
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_gen_anetheron_summon_towering_infernal_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ }
+ };
+
+ SpellScript* GetSpellScript() const override
+ {
+ return new spell_gen_anetheron_summon_towering_infernal_SpellScript();
+ }
+};
+
+enum KazrogalHellfireMark
+{
+ SPELL_MARK_OF_KAZROGAL_HELLFIRE = 189512,
+ SPELL_MARK_OF_KAZROGAL_DAMAGE_HELLFIRE = 189515
+};
+
+class MarkTargetHellfireFilter
+{
+ public:
+ bool operator()(WorldObject* target) const
+ {
+ if (Unit* unit = target->ToUnit())
+ return unit->getPowerType() != POWER_MANA;
+ return false;
+ }
+};
+
+class spell_gen_mark_of_kazrogal_hellfire : public SpellScriptLoader
+{
+ public:
+ spell_gen_mark_of_kazrogal_hellfire() : SpellScriptLoader("spell_gen_mark_of_kazrogal_hellfire") { }
+
+ class spell_gen_mark_of_kazrogal_hellfire_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_gen_mark_of_kazrogal_hellfire_SpellScript);
+
+ void FilterTargets(std::list<WorldObject*>& targets)
+ {
+ targets.remove_if(MarkTargetHellfireFilter());
+ }
+
+ void Register() override
+ {
+ OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_gen_mark_of_kazrogal_hellfire_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
+ }
+ };
+
+ class spell_gen_mark_of_kazrogal_hellfire_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_gen_mark_of_kazrogal_hellfire_AuraScript);
+
+ bool Validate(SpellInfo const* /*spell*/) override
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_MARK_OF_KAZROGAL_DAMAGE_HELLFIRE))
+ return false;
+ return true;
+ }
+
+ void OnPeriodic(AuraEffect const* aurEff)
+ {
+ Unit* target = GetTarget();
+
+ if (target->GetPower(POWER_MANA) == 0)
+ {
+ target->CastSpell(target, SPELL_MARK_OF_KAZROGAL_DAMAGE_HELLFIRE, true, NULL, aurEff);
+ // Remove aura
+ SetDuration(0);
+ }
+ }
+
+ void Register() override
+ {
+ OnEffectPeriodic += AuraEffectPeriodicFn(spell_gen_mark_of_kazrogal_hellfire_AuraScript::OnPeriodic, EFFECT_0, SPELL_AURA_POWER_BURN);
+ }
+ };
+
+ SpellScript* GetSpellScript() const override
+ {
+ return new spell_gen_mark_of_kazrogal_hellfire_SpellScript();
+ }
+
+ AuraScript* GetAuraScript() const override
+ {
+ return new spell_gen_mark_of_kazrogal_hellfire_AuraScript();
+ }
+};
+
+class spell_gen_azgalor_rain_of_fire_hellfire_citadel : public SpellScriptLoader
+{
+ public:
+ spell_gen_azgalor_rain_of_fire_hellfire_citadel() : SpellScriptLoader("spell_gen_azgalor_rain_of_fire_hellfire_citadel") { }
+
+ class spell_gen_azgalor_rain_of_fire_hellfire_citadel_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_gen_azgalor_rain_of_fire_hellfire_citadel_SpellScript);
+
+ void HandleDummy(SpellEffIndex /* effIndex */)
+ {
+ GetCaster()->CastSpell(GetHitUnit(), uint32(GetEffectValue()), true);
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_gen_azgalor_rain_of_fire_hellfire_citadel_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ }
+ };
+
+ SpellScript* GetSpellScript() const override
+ {
+ return new spell_gen_azgalor_rain_of_fire_hellfire_citadel_SpellScript();
+ }
+};
+
void AddSC_generic_spell_scripts()
{
new spell_gen_absorb0_hitlimit1();
@@ -4318,4 +4476,8 @@ void AddSC_generic_spell_scripts()
new spell_gen_mixology_bonus();
new spell_gen_landmine_knockback_achievement();
new spell_gen_clear_debuffs();
+ new spell_gen_decimatus_transformation_sickness();
+ new spell_gen_anetheron_summon_towering_infernal();
+ new spell_gen_mark_of_kazrogal_hellfire();
+ new spell_gen_azgalor_rain_of_fire_hellfire_citadel();
}
diff --git a/src/server/scripts/Spells/spell_monk.cpp b/src/server/scripts/Spells/spell_monk.cpp
index 904089bc451..fd91db9216f 100644
--- a/src/server/scripts/Spells/spell_monk.cpp
+++ b/src/server/scripts/Spells/spell_monk.cpp
@@ -28,12 +28,15 @@
enum MonkSpells
{
- SPELL_MONK_CRACKLING_JADE_LIGHTNING_CHANNEL = 117952,
- SPELL_MONK_CRACKLING_JADE_LIGHTNING_CHI_PROC = 123333,
- SPELL_MONK_STANCE_OF_THE_SPIRITED_CRANE = 154436,
-
- SPELL_MONK_CRACKLING_JADE_LIGHTNING_KNOCKBACK = 117962,
- SPELL_MONK_CRACKLING_JADE_LIGHTNING_KNOCKBACK_CD = 117953,
+ SPELL_MONK_CRACKLING_JADE_LIGHTNING_CHANNEL = 117952,
+ SPELL_MONK_CRACKLING_JADE_LIGHTNING_CHI_PROC = 123333,
+ SPELL_MONK_CRACKLING_JADE_LIGHTNING_KNOCKBACK = 117962,
+ SPELL_MONK_CRACKLING_JADE_LIGHTNING_KNOCKBACK_CD = 117953,
+ SPELL_MONK_PROVOKE_SINGLE_TARGET = 116189,
+ SPELL_MONK_PROVOKE_AOE = 118635,
+ SPELL_MONK_SOOTHING_MIST = 115175,
+ SPELL_MONK_STANCE_OF_THE_SPIRITED_CRANE = 154436,
+ SPELL_MONK_SURGING_MIST_HEAL = 116995,
};
// 117952 - Crackling Jade Lightning
@@ -125,8 +128,177 @@ public:
}
};
+// 115546 - Provoke
+class spell_monk_provoke : public SpellScriptLoader
+{
+public:
+ spell_monk_provoke() : SpellScriptLoader("spell_monk_provoke") { }
+
+ class spell_monk_provoke_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_monk_provoke_SpellScript);
+
+ static uint32 const BlackOxStatusEntry = 61146;
+
+ bool Validate(SpellInfo const* spellInfo) override
+ {
+ if (!(spellInfo->GetExplicitTargetMask() & TARGET_FLAG_UNIT_MASK)) // ensure GetExplTargetUnit() will return something meaningful during CheckCast
+ return false;
+ if (!sSpellMgr->GetSpellInfo(SPELL_MONK_PROVOKE_SINGLE_TARGET))
+ return false;
+ if (!sSpellMgr->GetSpellInfo(SPELL_MONK_PROVOKE_AOE))
+ return false;
+ return true;
+ }
+
+ SpellCastResult CheckExplicitTarget()
+ {
+ if (GetExplTargetUnit()->GetEntry() != BlackOxStatusEntry)
+ {
+ SpellInfo const* singleTarget = sSpellMgr->AssertSpellInfo(SPELL_MONK_PROVOKE_SINGLE_TARGET);
+ SpellCastResult singleTargetExplicitResult = singleTarget->CheckExplicitTarget(GetCaster(), GetExplTargetUnit());
+ if (singleTargetExplicitResult != SPELL_CAST_OK)
+ return singleTargetExplicitResult;
+ }
+ else if (GetExplTargetUnit()->GetOwnerGUID() != GetCaster()->GetGUID())
+ return SPELL_FAILED_BAD_TARGETS;
+
+ return SPELL_CAST_OK;
+ }
+
+ void HandleDummy(SpellEffIndex effIndex)
+ {
+ PreventHitDefaultEffect(effIndex);
+ if (GetHitUnit()->GetEntry() != BlackOxStatusEntry)
+ GetCaster()->CastSpell(GetHitUnit(), SPELL_MONK_PROVOKE_SINGLE_TARGET, true);
+ else
+ GetCaster()->CastSpell(GetHitUnit(), SPELL_MONK_PROVOKE_AOE, true);
+ }
+
+ void Register() override
+ {
+ OnCheckCast += SpellCheckCastFn(spell_monk_provoke_SpellScript::CheckExplicitTarget);
+ OnEffectHitTarget += SpellEffectFn(spell_monk_provoke_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ }
+ };
+
+ SpellScript* GetSpellScript() const override
+ {
+ return new spell_monk_provoke_SpellScript();
+ }
+};
+
+// 116694 - Surging Mist
+class spell_monk_surging_mist : public SpellScriptLoader
+{
+ public:
+ spell_monk_surging_mist() : SpellScriptLoader("spell_monk_surging_mist") { }
+
+ class spell_monk_surging_mist_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_monk_surging_mist_SpellScript);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_MONK_SURGING_MIST_HEAL))
+ return false;
+ return true;
+ }
+
+ void SelectTarget(WorldObject*& target)
+ {
+ Unit* caster = GetCaster();
+ if (caster->GetUInt32Value(UNIT_CHANNEL_SPELL) == SPELL_MONK_SOOTHING_MIST)
+ if (Unit* soothingMistTarget = ObjectAccessor::GetUnit(*caster, caster->GetChannelObjectGuid()))
+ target = soothingMistTarget;
+ }
+
+ void HandleDummy(SpellEffIndex effIndex)
+ {
+ PreventHitDefaultEffect(effIndex);
+ GetCaster()->CastSpell(GetHitUnit(), SPELL_MONK_SURGING_MIST_HEAL, true);
+ }
+
+ void Register() override
+ {
+ OnObjectTargetSelect += SpellObjectTargetSelectFn(spell_monk_surging_mist_SpellScript::SelectTarget, EFFECT_0, TARGET_UNIT_TARGET_ALLY);
+ OnEffectHitTarget += SpellEffectFn(spell_monk_surging_mist_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ }
+ };
+
+ SpellScript* GetSpellScript() const override
+ {
+ return new spell_monk_surging_mist_SpellScript();
+ }
+};
+
+// 123273 - Surging Mist (Glyphed)
+class spell_monk_surging_mist_glyphed : public SpellScriptLoader
+{
+public:
+ spell_monk_surging_mist_glyphed() : SpellScriptLoader("spell_monk_surging_mist_glyphed") { }
+
+ class spell_monk_surging_mist_glyphed_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_monk_surging_mist_glyphed_SpellScript);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_MONK_SURGING_MIST_HEAL))
+ return false;
+ if (!sSpellMgr->GetSpellInfo(SPELL_MONK_SOOTHING_MIST))
+ return false;
+ return true;
+ }
+
+ void SelectTarget(std::list<WorldObject*>& targets)
+ {
+ Unit* caster = GetCaster();
+ if (caster->GetUInt32Value(UNIT_CHANNEL_SPELL) == SPELL_MONK_SOOTHING_MIST)
+ {
+ targets.clear();
+ if (Unit* soothingMistTarget = ObjectAccessor::GetUnit(*caster, caster->GetChannelObjectGuid()))
+ targets.push_back(soothingMistTarget);
+ }
+ else
+ {
+ targets.remove_if([caster](WorldObject* target)
+ {
+ return target->GetTypeId() != TYPEID_UNIT || !target->ToUnit()->IsInRaidWith(caster);
+ });
+ targets.sort(Trinity::HealthPctOrderPred());
+ if (!targets.empty())
+ targets.resize(1);
+ }
+
+ if (targets.empty())
+ targets.push_back(caster);
+ }
+
+ void HandleDummy(SpellEffIndex effIndex)
+ {
+ PreventHitDefaultEffect(effIndex);
+ GetCaster()->CastSpell(GetHitUnit(), SPELL_MONK_SURGING_MIST_HEAL, true);
+ }
+
+ void Register() override
+ {
+ OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_monk_surging_mist_glyphed_SpellScript::SelectTarget, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY);
+ OnEffectHitTarget += SpellEffectFn(spell_monk_surging_mist_glyphed_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ }
+ };
+
+ SpellScript* GetSpellScript() const override
+ {
+ return new spell_monk_surging_mist_glyphed_SpellScript();
+ }
+};
+
void AddSC_monk_spell_scripts()
{
new spell_monk_crackling_jade_lightning();
new spell_monk_crackling_jade_lightning_knockback_proc_aura();
+ new spell_monk_provoke();
+ new spell_monk_surging_mist();
+ new spell_monk_surging_mist_glyphed();
}