diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp | 67 | ||||
-rw-r--r-- | src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_talon_king_ikiss.cpp (renamed from src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_tailonking_ikiss.cpp) | 76 | ||||
-rw-r--r-- | src/server/scripts/Outland/CMakeLists.txt | 2 |
3 files changed, 65 insertions, 80 deletions
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp index 539f1c4abfb..c6a91e3ff33 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp @@ -44,6 +44,7 @@ enum Spells SPELL_STONE_STRIKE = 48583, SPELL_ENRAGE = 48193, SPELL_SUMMON_SKARVALD_GHOST = 48613, + // Spells of Dalronn and his Ghost SPELL_SHADOW_BOLT = 43649, SPELL_SUMMON_SKELETONS = 52611, @@ -76,31 +77,30 @@ enum Actions class SkarvaldChargePredicate { - public: - SkarvaldChargePredicate(Unit* unit) : me(unit) { } + public: + SkarvaldChargePredicate(Unit* unit) : _me(unit) { } - bool operator() (WorldObject* object) const - { - return object->GetDistance2d(me) >= 5.0f && object->GetDistance2d(me) <= 30.0f; - } + bool operator() (WorldObject* target) const + { + return target->GetDistance2d(_me) >= 5.0f && target->GetDistance2d(_me) <= 30.0f; + } private: - Unit* me; + Unit* _me; }; struct generic_boss_controllerAI : public BossAI { - generic_boss_controllerAI(Creature* creature) : BossAI(creature, DATA_SKARVALD_DALRONN) - { + generic_boss_controllerAI(Creature* creature) : BossAI(creature, DATA_SKARVALD_DALRONN) + { OtherBossData = 0; - IsInGhostForm = false; + IsInGhostForm = me->GetEntry() == NPC_SKARVALD_GHOST || me->GetEntry() == NPC_DALRONN_GHOST; } void Reset() override { - if (me->GetEntry() == NPC_SKARVALD_GHOST || me->GetEntry() == NPC_DALRONN_GHOST) + if (IsInGhostForm) { - IsInGhostForm = true; // Call this here since ghosts aren't set in combat as they spawn. DoZoneInCombat(me, 50.0f); } @@ -160,7 +160,7 @@ struct generic_boss_controllerAI : public BossAI if (!IsInGhostForm && who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_KILL); } - + protected: uint32 OtherBossData; bool IsInGhostForm; @@ -173,26 +173,27 @@ class boss_skarvald_the_constructor : public CreatureScript struct boss_skarvald_the_constructorAI : public generic_boss_controllerAI { - boss_skarvald_the_constructorAI(Creature* creature) : generic_boss_controllerAI(creature) - { + boss_skarvald_the_constructorAI(Creature* creature) : generic_boss_controllerAI(creature) + { + OtherBossData = DATA_DALRONN; Enraged = false; } void Reset() override { - OtherBossData = DATA_DALRONN; Enraged = false; generic_boss_controllerAI::Reset(); } void EnterCombat(Unit* who) override { + generic_boss_controllerAI::EnterCombat(who); + if (!IsInGhostForm) Talk(SAY_AGGRO); events.ScheduleEvent(EVENT_SKARVALD_CHARGE, 5000); events.ScheduleEvent(EVENT_STONE_STRIKE, 10000); - generic_boss_controllerAI::EnterCombat(who); } void ExecuteEvent(uint32 eventId) override @@ -239,26 +240,23 @@ class boss_dalronn_the_controller : public CreatureScript struct boss_dalronn_the_controllerAI : public generic_boss_controllerAI { - boss_dalronn_the_controllerAI(Creature* creature) : generic_boss_controllerAI(creature) { } - - void Reset() override + boss_dalronn_the_controllerAI(Creature* creature) : generic_boss_controllerAI(creature) { OtherBossData = DATA_SKARVALD; - generic_boss_controllerAI::Reset(); } void EnterCombat(Unit* who) override { + generic_boss_controllerAI::EnterCombat(who); + events.ScheduleEvent(EVENT_SHADOW_BOLT, 1000); events.ScheduleEvent(EVENT_DEBILITATE, 5000); - - if (!IsInGhostForm) + + if (!IsInGhostForm) events.ScheduleEvent(EVENT_DELAYED_AGGRO_SAY, 5000); - - if (IsHeroic()) + + if (IsHeroic()) events.ScheduleEvent(EVENT_SUMMON_SKELETONS, 10000); - - generic_boss_controllerAI::EnterCombat(who); } void ExecuteEvent(uint32 eventId) override @@ -266,22 +264,17 @@ class boss_dalronn_the_controller : public CreatureScript switch (eventId) { case EVENT_SHADOW_BOLT: - if (!me->IsNonMeleeSpellCast(false)) - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true)) - DoCast(target, SPELL_SHADOW_BOLT); + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 45.0f, true)) + DoCast(target, SPELL_SHADOW_BOLT); events.ScheduleEvent(EVENT_SHADOW_BOLT, 2100); //give a 100ms pause to try cast other spells break; case EVENT_DEBILITATE: - if (!me->IsNonMeleeSpellCast(false)) - { - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true)) - DoCast(target, SPELL_DEBILITATE); - } + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 50.0f, true)) + DoCast(target, SPELL_DEBILITATE); events.ScheduleEvent(EVENT_DEBILITATE, urand(5000, 10000)); break; case EVENT_SUMMON_SKELETONS: - if (!me->IsNonMeleeSpellCast(false)) - DoCast(SPELL_SUMMON_SKELETONS); + DoCast(me, SPELL_SUMMON_SKELETONS); events.ScheduleEvent(EVENT_SUMMON_SKELETONS, urand(10000, 30000)); break; case EVENT_DELAYED_AGGRO_SAY: diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_tailonking_ikiss.cpp b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_talon_king_ikiss.cpp index 1776cccb6cc..22914ca9094 100644 --- a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_tailonking_ikiss.cpp +++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_talon_king_ikiss.cpp @@ -72,21 +72,13 @@ public: void MoveInLineOfSight(Unit* who) override { - if (!me->GetVictim() && me->CanCreatureAttack(who)) + if (!Intro && who->GetTypeId() == TYPEID_PLAYER && me->IsWithinDistInMap(who, 100.0f)) { - if (!Intro && me->IsWithinDistInMap(who, 100)) - { - Intro = true; - Talk(SAY_INTRO); - } - - if (!me->CanFly() && me->GetDistanceZ(who) > CREATURE_Z_ATTACK_RANGE) - return; - - float attackRadius = me->GetAttackDistance(who); - if (me->IsWithinDistInMap(who, attackRadius) && me->IsWithinLOSInMap(who)) - AttackStart(who); + Intro = true; + Talk(SAY_INTRO); } + + BossAI::MoveInLineOfSight(who); } void EnterCombat(Unit* /*who*/) override @@ -175,41 +167,41 @@ class spell_talon_king_ikiss_blink : public SpellScriptLoader public: spell_talon_king_ikiss_blink() : SpellScriptLoader("spell_talon_king_ikiss_blink") { } - class spell_talon_king_ikiss_blink_SpellScript : public SpellScript - { - PrepareSpellScript(spell_talon_king_ikiss_blink_SpellScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override + class spell_talon_king_ikiss_blink_SpellScript : public SpellScript { - if (!sSpellMgr->GetSpellInfo(SPELL_BLINK)) - return false; - return true; - } + PrepareSpellScript(spell_talon_king_ikiss_blink_SpellScript); - void FilterTargets(std::list<WorldObject*>& targets) - { - uint8 maxSize = 1; - if (targets.size() > maxSize) - Trinity::Containers::RandomResizeList(targets, maxSize); - } + bool Validate(SpellInfo const* /*spellInfo*/) override + { + if (!sSpellMgr->GetSpellInfo(SPELL_BLINK_TELEPORT)) + return false; + return true; + } - void HandleDummyHitTarget(SpellEffIndex effIndex) - { - PreventHitDefaultEffect(effIndex); - GetHitUnit()->CastSpell(GetCaster(), SPELL_BLINK_TELEPORT, true); - } + void FilterTargets(std::list<WorldObject*>& targets) + { + WorldObject* target = Trinity::Containers::SelectRandomContainerElement(targets); + targets.clear(); + targets.push_back(target); + } + + void HandleDummyHitTarget(SpellEffIndex effIndex) + { + PreventHitDefaultEffect(effIndex); + GetHitUnit()->CastSpell(GetCaster(), SPELL_BLINK_TELEPORT, true); + } - void Register() override + void Register() override + { + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_talon_king_ikiss_blink_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); + OnEffectHitTarget += SpellEffectFn(spell_talon_king_ikiss_blink_SpellScript::HandleDummyHitTarget, EFFECT_0, SPELL_EFFECT_DUMMY); + } + }; + + SpellScript* GetSpellScript() const override { - OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_talon_king_ikiss_blink_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); - OnEffectHitTarget += SpellEffectFn(spell_talon_king_ikiss_blink_SpellScript::HandleDummyHitTarget, EFFECT_0, SPELL_EFFECT_DUMMY); + return new spell_talon_king_ikiss_blink_SpellScript(); } - }; - - SpellScript* GetSpellScript() const override - { - return new spell_talon_king_ikiss_blink_SpellScript(); - } }; void AddSC_boss_talon_king_ikiss() diff --git a/src/server/scripts/Outland/CMakeLists.txt b/src/server/scripts/Outland/CMakeLists.txt index 0c69a236ef8..ffc9b514abf 100644 --- a/src/server/scripts/Outland/CMakeLists.txt +++ b/src/server/scripts/Outland/CMakeLists.txt @@ -88,7 +88,7 @@ set(scripts_STAT_SRCS Outland/Auchindoun/ManaTombs/instance_mana_tombs.cpp Outland/Auchindoun/ManaTombs/mana_tombs.h Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp - Outland/Auchindoun/SethekkHalls/boss_tailonking_ikiss.cpp + Outland/Auchindoun/SethekkHalls/boss_talon_king_ikiss.cpp Outland/Auchindoun/SethekkHalls/boss_anzu.cpp Outland/Auchindoun/SethekkHalls/instance_sethekk_halls.cpp Outland/Auchindoun/SethekkHalls/sethekk_halls.h |