diff options
author | Manuel <manue.l@live.com.ar> | 2011-01-24 18:57:11 -0300 |
---|---|---|
committer | Manuel <manue.l@live.com.ar> | 2011-01-24 18:57:11 -0300 |
commit | 70a45be1594c43e09f7103c910f11a0476f88b52 (patch) | |
tree | b0d8a0674e1afd81a5abb316fce130e3bc7bfd43 /src | |
parent | cd946a22de3aaaf3efdd887692cdab2d4997f2af (diff) |
Core/Scripts/Oculus: Improved Energize Core ability of Boss Varos. Thanks to Xanadu, Gyullo and Josh.
Signed-off-by: Manuel <manue.l@live.com.ar>
Diffstat (limited to 'src')
-rwxr-xr-x | src/server/game/Spells/SpellMgr.cpp | 11 | ||||
-rw-r--r-- | src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp | 133 | ||||
-rw-r--r-- | src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp | 2 |
3 files changed, 136 insertions, 10 deletions
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index fc92e8448f8..9211aab143d 100755 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -3588,9 +3588,16 @@ void SpellMgr::LoadSpellCustomAttr() switch (i) { - case 54069: // Energize Cores + case 61407: // Energize Cores + case 62136: // Energize Cores + case 54069: // Energize Cores case 56251: // Energize Cores - spellInfo->EffectImplicitTargetA[0] = TARGET_UNIT_CONE_ENTRY; + spellInfo->EffectImplicitTargetA[0] = TARGET_UNIT_AREA_ENTRY_SRC; + count++; + break; + case 50785: // Energize Cores + case 59372: // Energize Cores + spellInfo->EffectImplicitTargetA[0] = TARGET_UNIT_AREA_ENEMY_SRC; count++; break; // Bind diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp index 97f4e80e3eb..f96c781ff45 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp @@ -17,6 +17,7 @@ #include "ScriptPCH.h" #include "oculus.h" +#include "MapManager.h" enum Says { @@ -28,6 +29,7 @@ enum Says enum Spells { + SPELL_ENERGIZE_CORES_VISUAL = 62136, SPELL_ENERGIZE_CORES = 50785, //Damage 5938 to 6562, effec2 Triggers 54069, effect3 Triggers 56251 SPELL_CALL_AZURE_RING_CAPTAIN = 51002, //Effect Send Event (12229) /*SPELL_CALL_AZURE_RING_CAPTAIN_2 = 51006, //Effect Send Event (10665) @@ -42,7 +44,8 @@ enum Events { EVENT_ENERGIZE_CORES = 1, EVENT_CALL_AZURE, - EVENT_AMPLIFY_MAGIC + EVENT_AMPLIFY_MAGIC, + EVENT_ENERGIZE_CORES_VISUAL }; class boss_varos : public CreatureScript @@ -68,11 +71,12 @@ public: _Reset(); events.ScheduleEvent(EVENT_AMPLIFY_MAGIC, urand(20,25) * IN_MILLISECONDS); - events.ScheduleEvent(EVENT_ENERGIZE_CORES, urand(0,15) * IN_MILLISECONDS); + events.ScheduleEvent(EVENT_ENERGIZE_CORES_VISUAL, 5000); // not sure if this is handled by a timer or hp percentage events.ScheduleEvent(EVENT_CALL_AZURE, urand(15,30) * IN_MILLISECONDS); - - instance->SetData(DATA_VAROS_EVENT, NOT_STARTED); + + firstCoreEnergize = false; + coreEnergizeOrientation = 0.0f; } void AttackStart(Unit* attacker) @@ -88,8 +92,11 @@ public: _EnterCombat(); Talk(SAY_AGGRO); + } - instance->SetData(DATA_VAROS_EVENT, IN_PROGRESS); + float GetCoreEnergizeOrientation() + { + return coreEnergizeOrientation; } void UpdateAI(const uint32 diff) @@ -109,7 +116,19 @@ public: { case EVENT_ENERGIZE_CORES: DoCast(me,SPELL_ENERGIZE_CORES); - events.ScheduleEvent(EVENT_ENERGIZE_CORES, urand(12,14) * IN_MILLISECONDS); + events.CancelEvent(EVENT_ENERGIZE_CORES); + break; + case EVENT_ENERGIZE_CORES_VISUAL: + if (!firstCoreEnergize) + { + coreEnergizeOrientation = me->GetOrientation(); + firstCoreEnergize = true; + } else + coreEnergizeOrientation = MapManager::NormalizeOrientation(coreEnergizeOrientation - 2.0f); + + DoCast(me,SPELL_ENERGIZE_CORES_VISUAL); + events.ScheduleEvent(EVENT_ENERGIZE_CORES_VISUAL, 5000); + events.ScheduleEvent(EVENT_ENERGIZE_CORES, 4000); break; case EVENT_CALL_AZURE: // not sure how blizz handles this, i cant see any pattern between the differnt spells @@ -133,8 +152,10 @@ public: _JustDied(); Talk(SAY_DEATH); - instance->SetData(DATA_VAROS_EVENT, DONE); } + private: + bool firstCoreEnergize; + float coreEnergizeOrientation; }; }; @@ -177,7 +198,7 @@ class npc_azure_ring_captain : public CreatureScript if (type != POINT_MOTION_TYPE || id != ACTION_CALL_DRAGON_EVENT) return; - + me->GetMotionMaster()->MoveIdle(); if (Unit* target = ObjectAccessor::GetUnit(*me,targetGUID)) @@ -261,9 +282,105 @@ class spell_varos_centrifuge_shield : public SpellScriptLoader } }; +class spell_varos_energize_core_area_enemy : public SpellScriptLoader +{ + public: + spell_varos_energize_core_area_enemy() : SpellScriptLoader("spell_varos_energize_core_area_enemy") {} + + class spell_varos_energize_core_area_enemySpellScript : public SpellScript + { + PrepareSpellScript(spell_varos_energize_core_area_enemySpellScript) + + void FilterTargets(std::list<Unit*>& targetList) + { + Creature* varos = GetCaster()->ToCreature(); + if (!varos) + return; + + if (varos->GetEntry() != NPC_VAROS) + return; + + float orientation = CAST_AI(boss_varos::boss_varosAI,varos->AI())->GetCoreEnergizeOrientation(); + + for (std::list<Unit*>::iterator itr = targetList.begin() ; itr != targetList.end();) + { + Position pos; + (*itr)->GetPosition(&pos); + + float angle = varos->GetAngle((*itr)->GetPositionX(),(*itr)->GetPositionY()); + float diff = fabs(orientation - angle); + + if (diff > 1.0f) + itr = targetList.erase(itr); + else + ++itr; + } + } + + void Register() + { + OnUnitTargetSelect += SpellUnitTargetFn(spell_varos_energize_core_area_enemySpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_AREA_ENEMY_SRC); + } + }; + + SpellScript *GetSpellScript() const + { + return new spell_varos_energize_core_area_enemySpellScript(); + } +}; + +class spell_varos_energize_core_area_entry : public SpellScriptLoader +{ + public: + spell_varos_energize_core_area_entry() : SpellScriptLoader("spell_varos_energize_core_area_entry") {} + + class spell_varos_energize_core_area_entrySpellScript : public SpellScript + { + PrepareSpellScript(spell_varos_energize_core_area_entrySpellScript) + + void FilterTargets(std::list<Unit*>& targetList) + { + Creature* varos = GetCaster()->ToCreature(); + if (!varos) + return; + + if (varos->GetEntry() != NPC_VAROS) + return; + + float orientation = CAST_AI(boss_varos::boss_varosAI,varos->AI())->GetCoreEnergizeOrientation(); + + for (std::list<Unit*>::iterator itr = targetList.begin() ; itr != targetList.end();) + { + Position pos; + (*itr)->GetPosition(&pos); + + float angle = varos->GetAngle((*itr)->GetPositionX(),(*itr)->GetPositionY()); + float diff = fabs(orientation - angle); + + if (diff > 1.0f) + itr = targetList.erase(itr); + else + ++itr; + } + } + + void Register() + { + OnUnitTargetSelect += SpellUnitTargetFn(spell_varos_energize_core_area_entrySpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_AREA_ENTRY_SRC); + } + }; + + SpellScript *GetSpellScript() const + { + return new spell_varos_energize_core_area_entrySpellScript(); + } +}; + void AddSC_boss_varos() { new boss_varos(); new npc_azure_ring_captain(); new spell_varos_centrifuge_shield(); + new spell_varos_energize_core_area_enemy(); + new spell_varos_energize_core_area_entry(); } diff --git a/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp b/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp index 0ff54fedab2..c99fd117008 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp @@ -172,6 +172,8 @@ public: DoUpdateWorldState(WORLD_STATE_CENTRIFUGE_CONSTRUCT_SHOW,0); break; } + + return true; } void SetData(uint32 type, uint32 data) |