aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorblub <Vincent_Michael@gmx.de>2013-07-18 14:14:32 -0700
committerblub <Vincent_Michael@gmx.de>2013-07-18 14:14:32 -0700
commit922fba3a13cbb8b177c39f3f262ab0a6c6466a9a (patch)
treec9e1ccb38fbbcd320747ed1b2fbb44a4f4e20cf1
parenteca90db56b31d47b5c6969a995e2d6d226829f27 (diff)
parent06d54ba4386384e38f2d8c9e9d840f6629d1a1a9 (diff)
Merge pull request #10305 from joschiwald/koralon
Scripts/VaultOfArchavon/Koralon: Fix Meteor Fists
-rw-r--r--sql/updates/world/2013_07_18_01_world_koralon.sql15
-rw-r--r--src/server/scripts/Northrend/VaultOfArchavon/boss_koralon.cpp165
2 files changed, 150 insertions, 30 deletions
diff --git a/sql/updates/world/2013_07_18_01_world_koralon.sql b/sql/updates/world/2013_07_18_01_world_koralon.sql
new file mode 100644
index 00000000000..a67df5222ca
--- /dev/null
+++ b/sql/updates/world/2013_07_18_01_world_koralon.sql
@@ -0,0 +1,15 @@
+DELETE FROM `spell_script_names` WHERE `spell_id` IN (66725,68161,66808,68160,66765,67333,66809,67331);
+INSERT INTO `spell_script_names` (`spell_id` ,`ScriptName`) VALUES
+(66725, 'spell_koralon_meteor_fists'),
+(68161, 'spell_koralon_meteor_fists'),
+(66808, 'spell_flame_warder_meteor_fists'),
+(68160, 'spell_flame_warder_meteor_fists'),
+(66765, 'spell_koralon_meteor_fists_damage'),
+(67333, 'spell_koralon_meteor_fists_damage'),
+(66809, 'spell_koralon_meteor_fists_damage'),
+(67331, 'spell_koralon_meteor_fists_damage');
+
+DELETE FROM `spell_proc_event` WHERE `entry` IN (66808,68160);
+INSERT INTO `spell_proc_event` (`entry`,`SchoolMask`,`SpellFamilyName`,`SpellFamilyMask0`,`SpellFamilyMask1`,`SpellFamilyMask2`,`procFlags`,`procEx`,`ppmRate`,`CustomChance`,`Cooldown`) VALUES
+(66808,0,0,0,0,0,0x4,0,0,0,0),
+(68160,0,0,0,0,0,0x4,0,0,0,0);
diff --git a/src/server/scripts/Northrend/VaultOfArchavon/boss_koralon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/boss_koralon.cpp
index f259fbf2b78..ad65fcc83fd 100644
--- a/src/server/scripts/Northrend/VaultOfArchavon/boss_koralon.cpp
+++ b/src/server/scripts/Northrend/VaultOfArchavon/boss_koralon.cpp
@@ -17,6 +17,8 @@
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
+#include "SpellAuraEffects.h"
+#include "SpellScript.h"
#include "vault_of_archavon.h"
enum Events
@@ -24,14 +26,12 @@ enum Events
// Koralon
EVENT_BURNING_BREATH = 1,
EVENT_BURNING_FURY = 2,
- EVENT_FLAME_CINDER_A = 3,
- EVENT_METEOR_FISTS_A = 4,
- EVENT_METEOR_FISTS_B = 5,
+ EVENT_FLAME_CINDER = 3,
+ EVENT_METEOR_FISTS = 4,
// Flame Warder
- EVENT_FW_LAVA_BIRST = 6,
- EVENT_FW_METEOR_FISTS_A = 7,
- EVENT_FW_METEOR_FISTS_B = 8,
+ EVENT_FW_LAVA_BIRST = 5,
+ EVENT_FW_METEOR_FISTS = 6
};
enum Spells
@@ -41,13 +41,13 @@ enum Spells
SPELL_BURNING_FURY = 66721,
SPELL_FLAME_CINDER_A = 66684,
SPELL_FLAME_CINDER_B = 66681, // don't know the real relation to SPELL_FLAME_CINDER_A atm.
- SPELL_METEOR_FISTS_A = 66725,
- SPELL_METEOR_FISTS_B = 67333,
+ SPELL_METEOR_FISTS = 66725,
+ SPELL_METEOR_FISTS_DAMAGE = 66765,
// Spells Flame Warder
SPELL_FW_LAVA_BIRST = 66813,
- SPELL_FW_METEOR_FISTS_A = 66808,
- SPELL_FW_METEOR_FISTS_B = 67331,
+ SPELL_FW_METEOR_FISTS = 66808,
+ SPELL_FW_METEOR_FISTS_DAMAGE = 66809
};
class boss_koralon : public CreatureScript
@@ -67,8 +67,8 @@ class boss_koralon : public CreatureScript
events.ScheduleEvent(EVENT_BURNING_FURY, 20000); /// @todo check timer
events.ScheduleEvent(EVENT_BURNING_BREATH, 15000); // 1st after 15sec, then every 45sec
- events.ScheduleEvent(EVENT_METEOR_FISTS_A, 75000); // 1st after 75sec, then every 45sec
- events.ScheduleEvent(EVENT_FLAME_CINDER_A, 30000); /// @todo check timer
+ events.ScheduleEvent(EVENT_METEOR_FISTS, 75000); // 1st after 75sec, then every 45sec
+ events.ScheduleEvent(EVENT_FLAME_CINDER, 30000); /// @todo check timer
_EnterCombat();
}
@@ -95,17 +95,13 @@ class boss_koralon : public CreatureScript
DoCast(me, SPELL_BURNING_BREATH);
events.ScheduleEvent(EVENT_BURNING_BREATH, 45000);
break;
- case EVENT_METEOR_FISTS_A:
- DoCast(me, SPELL_METEOR_FISTS_A);
- events.ScheduleEvent(EVENT_METEOR_FISTS_B, 1500);
+ case EVENT_METEOR_FISTS:
+ DoCast(me, SPELL_METEOR_FISTS);
+ events.ScheduleEvent(EVENT_METEOR_FISTS, 45000);
break;
- case EVENT_METEOR_FISTS_B:
- DoCast(me, SPELL_METEOR_FISTS_B);
- events.ScheduleEvent(EVENT_METEOR_FISTS_A, 45000);
- break;
- case EVENT_FLAME_CINDER_A:
+ case EVENT_FLAME_CINDER:
DoCast(me, SPELL_FLAME_CINDER_A);
- events.ScheduleEvent(EVENT_FLAME_CINDER_A, 30000);
+ events.ScheduleEvent(EVENT_FLAME_CINDER, 30000);
break;
default:
break;
@@ -123,7 +119,7 @@ class boss_koralon : public CreatureScript
};
/*######
-## Mob Flame Warder
+## Npc Flame Warder
######*/
class npc_flame_warder : public CreatureScript
{
@@ -146,7 +142,7 @@ class npc_flame_warder : public CreatureScript
DoZoneInCombat();
events.ScheduleEvent(EVENT_FW_LAVA_BIRST, 5000);
- events.ScheduleEvent(EVENT_FW_METEOR_FISTS_A, 10000);
+ events.ScheduleEvent(EVENT_FW_METEOR_FISTS, 10000);
}
void UpdateAI(uint32 diff) OVERRIDE
@@ -164,13 +160,9 @@ class npc_flame_warder : public CreatureScript
DoCastVictim(SPELL_FW_LAVA_BIRST);
events.ScheduleEvent(EVENT_FW_LAVA_BIRST, 15000);
break;
- case EVENT_FW_METEOR_FISTS_A:
- DoCast(me, SPELL_FW_METEOR_FISTS_A);
- events.ScheduleEvent(EVENT_FW_METEOR_FISTS_B, 1500);
- break;
- case EVENT_FW_METEOR_FISTS_B:
- DoCast(me, SPELL_FW_METEOR_FISTS_B);
- events.ScheduleEvent(EVENT_FW_METEOR_FISTS_A, 20000);
+ case EVENT_FW_METEOR_FISTS:
+ DoCast(me, SPELL_FW_METEOR_FISTS);
+ events.ScheduleEvent(EVENT_FW_METEOR_FISTS, 20000);
break;
default:
break;
@@ -190,8 +182,121 @@ class npc_flame_warder : public CreatureScript
}
};
+class spell_koralon_meteor_fists : public SpellScriptLoader
+{
+ public:
+ spell_koralon_meteor_fists() : SpellScriptLoader("spell_koralon_meteor_fists") { }
+
+ class spell_koralon_meteor_fists_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_koralon_meteor_fists_AuraScript);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_METEOR_FISTS_DAMAGE))
+ return false;
+ return true;
+ }
+
+ void TriggerFists(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
+ {
+ PreventDefaultAction();
+ GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_METEOR_FISTS_DAMAGE, true, NULL, aurEff);
+ }
+
+ void Register() OVERRIDE
+ {
+ OnEffectProc += AuraEffectProcFn(spell_koralon_meteor_fists_AuraScript::TriggerFists, EFFECT_0, SPELL_AURA_DUMMY);
+ }
+ };
+
+ AuraScript* GetAuraScript() const OVERRIDE
+ {
+ return new spell_koralon_meteor_fists_AuraScript();
+ }
+};
+
+class spell_koralon_meteor_fists_damage : public SpellScriptLoader
+{
+ public:
+ spell_koralon_meteor_fists_damage() : SpellScriptLoader("spell_koralon_meteor_fists_damage") { }
+
+ class spell_koralon_meteor_fists_damage_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_koralon_meteor_fists_damage_SpellScript);
+
+ bool Load() OVERRIDE
+ {
+ _chainTargets = 0;
+ return true;
+ }
+
+ void FilterTargets(std::list<WorldObject*>& targets)
+ {
+ _chainTargets = targets.size();
+ }
+
+ void CalculateSplitDamage()
+ {
+ if (_chainTargets)
+ SetHitDamage(GetHitDamage() / (_chainTargets + 1));
+ }
+
+ void Register() OVERRIDE
+ {
+ OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_koralon_meteor_fists_damage_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_TARGET_ENEMY);
+ OnHit += SpellHitFn(spell_koralon_meteor_fists_damage_SpellScript::CalculateSplitDamage);
+ }
+
+ private:
+ uint8 _chainTargets;
+ };
+
+ SpellScript* GetSpellScript() const OVERRIDE
+ {
+ return new spell_koralon_meteor_fists_damage_SpellScript();
+ }
+};
+
+class spell_flame_warder_meteor_fists : public SpellScriptLoader
+{
+ public:
+ spell_flame_warder_meteor_fists() : SpellScriptLoader("spell_flame_warder_meteor_fists") { }
+
+ class spell_flame_warder_meteor_fists_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_flame_warder_meteor_fists_AuraScript);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_FW_METEOR_FISTS_DAMAGE))
+ return false;
+ return true;
+ }
+
+ void TriggerFists(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
+ {
+ PreventDefaultAction();
+ GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_FW_METEOR_FISTS_DAMAGE, true, NULL, aurEff);
+ }
+
+ void Register() OVERRIDE
+ {
+ OnEffectProc += AuraEffectProcFn(spell_flame_warder_meteor_fists_AuraScript::TriggerFists, EFFECT_0, SPELL_AURA_DUMMY);
+ }
+ };
+
+ AuraScript* GetAuraScript() const OVERRIDE
+ {
+ return new spell_flame_warder_meteor_fists_AuraScript();
+ }
+};
+
void AddSC_boss_koralon()
{
new boss_koralon();
new npc_flame_warder();
+ new spell_koralon_meteor_fists();
+ new spell_koralon_meteor_fists_damage();
+ new spell_flame_warder_meteor_fists();
}