mirror of
https://github.com/liyunfan1223/azerothcore-wotlk.git
synced 2026-08-08 15:58:04 +00:00
Adjust Scholomance Kirtonos boss fight (#5313)
This commit is contained in:
@@ -18,7 +18,8 @@ enum Spells
|
|||||||
SPELL_KIRTONOS_TRANSFORM = 16467,
|
SPELL_KIRTONOS_TRANSFORM = 16467,
|
||||||
SPELL_SHADOW_BOLT_VOLLEY = 17228,
|
SPELL_SHADOW_BOLT_VOLLEY = 17228,
|
||||||
SPELL_CURSE_OF_TONGUES = 12889,
|
SPELL_CURSE_OF_TONGUES = 12889,
|
||||||
SPELL_DOMINATE_MIND = 14515
|
SPELL_DOMINATE_MIND = 14515,
|
||||||
|
SPELL_TRANSFORM_VISUAL = 24085
|
||||||
};
|
};
|
||||||
|
|
||||||
enum Events
|
enum Events
|
||||||
@@ -66,23 +67,27 @@ public:
|
|||||||
instance = me->GetInstanceScript();
|
instance = me->GetInstanceScript();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int TransformsCount;
|
||||||
EventMap events;
|
EventMap events;
|
||||||
EventMap events2;
|
EventMap events2;
|
||||||
InstanceScript* instance;
|
InstanceScript* instance;
|
||||||
|
|
||||||
void EnterCombat(Unit* /*who*/) override
|
void EnterCombat(Unit* /*who*/) override
|
||||||
{
|
{
|
||||||
|
TransformsCount = 0;
|
||||||
|
|
||||||
events.Reset();
|
events.Reset();
|
||||||
events.ScheduleEvent(EVENT_SHADOW_BOLT_VOLLEY, 2000);
|
events.ScheduleEvent(EVENT_SHADOW_BOLT_VOLLEY, 2000);
|
||||||
events.ScheduleEvent(EVENT_CURSE_OF_TONGUES, 6000);
|
events.ScheduleEvent(EVENT_CURSE_OF_TONGUES, 6000);
|
||||||
events.ScheduleEvent(EVENT_DOMINATE_MIND, 20000);
|
events.ScheduleEvent(EVENT_KIRTONOS_TRANSFORM, 20000);
|
||||||
events.ScheduleEvent(EVENT_KIRTONOS_TRANSFORM, 5000);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void JustDied(Unit* /*killer*/) override
|
void JustDied(Unit* /*killer*/) override
|
||||||
{
|
{
|
||||||
if (GameObject* gate = me->GetMap()->GetGameObject(instance->GetData64(GO_GATE_KIRTONOS)))
|
if (GameObject* gate = me->GetMap()->GetGameObject(instance->GetData64(GO_GATE_KIRTONOS)))
|
||||||
|
{
|
||||||
gate->SetGoState(GO_STATE_ACTIVE);
|
gate->SetGoState(GO_STATE_ACTIVE);
|
||||||
|
}
|
||||||
|
|
||||||
instance->SetData(DATA_KIRTONOS_THE_HERALD, DONE);
|
instance->SetData(DATA_KIRTONOS_THE_HERALD, DONE);
|
||||||
}
|
}
|
||||||
@@ -90,7 +95,9 @@ public:
|
|||||||
void EnterEvadeMode() override
|
void EnterEvadeMode() override
|
||||||
{
|
{
|
||||||
if (GameObject* gate = me->GetMap()->GetGameObject(instance->GetData64(GO_GATE_KIRTONOS)))
|
if (GameObject* gate = me->GetMap()->GetGameObject(instance->GetData64(GO_GATE_KIRTONOS)))
|
||||||
|
{
|
||||||
gate->SetGoState(GO_STATE_ACTIVE);
|
gate->SetGoState(GO_STATE_ACTIVE);
|
||||||
|
}
|
||||||
|
|
||||||
instance->SetData(DATA_KIRTONOS_THE_HERALD, NOT_STARTED);
|
instance->SetData(DATA_KIRTONOS_THE_HERALD, NOT_STARTED);
|
||||||
me->DespawnOrUnsummon(1);
|
me->DespawnOrUnsummon(1);
|
||||||
@@ -102,7 +109,7 @@ public:
|
|||||||
events2.ScheduleEvent(INTRO_1, 500);
|
events2.ScheduleEvent(INTRO_1, 500);
|
||||||
me->SetDisableGravity(true);
|
me->SetDisableGravity(true);
|
||||||
me->SetReactState(REACT_PASSIVE);
|
me->SetReactState(REACT_PASSIVE);
|
||||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
|
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||||
Talk(EMOTE_SUMMONED);
|
Talk(EMOTE_SUMMONED);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -131,7 +138,9 @@ public:
|
|||||||
break;
|
break;
|
||||||
case INTRO_3:
|
case INTRO_3:
|
||||||
if (GameObject* gate = me->GetMap()->GetGameObject(instance->GetData64(GO_GATE_KIRTONOS)))
|
if (GameObject* gate = me->GetMap()->GetGameObject(instance->GetData64(GO_GATE_KIRTONOS)))
|
||||||
|
{
|
||||||
gate->SetGoState(GO_STATE_READY);
|
gate->SetGoState(GO_STATE_READY);
|
||||||
|
}
|
||||||
me->SetFacingTo(0.01745329f);
|
me->SetFacingTo(0.01745329f);
|
||||||
break;
|
break;
|
||||||
case INTRO_4:
|
case INTRO_4:
|
||||||
@@ -143,20 +152,27 @@ public:
|
|||||||
case INTRO_5:
|
case INTRO_5:
|
||||||
me->HandleEmoteCommand(EMOTE_ONESHOT_ROAR);
|
me->HandleEmoteCommand(EMOTE_ONESHOT_ROAR);
|
||||||
me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(WEAPON_KIRTONOS_STAFF));
|
me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(WEAPON_KIRTONOS_STAFF));
|
||||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
|
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||||
me->SetReactState(REACT_AGGRESSIVE);
|
me->SetReactState(REACT_AGGRESSIVE);
|
||||||
break;
|
break;
|
||||||
case INTRO_6:
|
case INTRO_6:
|
||||||
me->GetMotionMaster()->MovePoint(0, PosMove[1]);
|
if (!me->IsInCombat())
|
||||||
|
{
|
||||||
|
me->GetMotionMaster()->MovePoint(0, PosMove[1]);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!UpdateVictim())
|
if (!UpdateVictim())
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
events.Update(diff);
|
events.Update(diff);
|
||||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
switch (events.ExecuteEvent())
|
switch (events.ExecuteEvent())
|
||||||
{
|
{
|
||||||
@@ -186,26 +202,46 @@ public:
|
|||||||
break;
|
break;
|
||||||
case EVENT_DOMINATE_MIND:
|
case EVENT_DOMINATE_MIND:
|
||||||
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 20.0f, true))
|
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 20.0f, true))
|
||||||
|
{
|
||||||
me->CastSpell(target, SPELL_DOMINATE_MIND, false);
|
me->CastSpell(target, SPELL_DOMINATE_MIND, false);
|
||||||
events.ScheduleEvent(EVENT_DOMINATE_MIND, urand(44000, 48000));
|
}
|
||||||
break;
|
break;
|
||||||
case EVENT_KIRTONOS_TRANSFORM:
|
case EVENT_KIRTONOS_TRANSFORM:
|
||||||
if (me->HealthBelowPct(50))
|
TransformsCount++;
|
||||||
|
|
||||||
|
if (me->HasAura(SPELL_KIRTONOS_TRANSFORM))
|
||||||
{
|
{
|
||||||
events.Reset();
|
events.Reset();
|
||||||
events.ScheduleEvent(EVENT_SWOOP, 4000);
|
events.ScheduleEvent(EVENT_SWOOP, 4000);
|
||||||
events.ScheduleEvent(EVENT_WING_FLAP, 7000);
|
events.ScheduleEvent(EVENT_WING_FLAP, 7000);
|
||||||
events.ScheduleEvent(EVENT_PIERCE_ARMOR, 11000);
|
events.ScheduleEvent(EVENT_PIERCE_ARMOR, 11000);
|
||||||
events.ScheduleEvent(EVENT_DISARM, 15000);
|
events.ScheduleEvent(EVENT_DISARM, 15000);
|
||||||
|
// show shape-shift animation before aura removal
|
||||||
|
me->CastSpell(me, SPELL_TRANSFORM_VISUAL, true);
|
||||||
me->RemoveAura(SPELL_KIRTONOS_TRANSFORM);
|
me->RemoveAura(SPELL_KIRTONOS_TRANSFORM);
|
||||||
me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(0));
|
me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(0));
|
||||||
break;
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
events.Reset();
|
||||||
|
events.ScheduleEvent(EVENT_SHADOW_BOLT_VOLLEY, 2000);
|
||||||
|
events.ScheduleEvent(EVENT_CURSE_OF_TONGUES, 6000);
|
||||||
|
events.ScheduleEvent(EVENT_WING_FLAP, 13000);
|
||||||
|
me->CastSpell(me, SPELL_KIRTONOS_TRANSFORM, true);
|
||||||
|
me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(WEAPON_KIRTONOS_STAFF));
|
||||||
|
|
||||||
|
// Schedule Dominate Mind on every 2nd caster transform
|
||||||
|
if ((TransformsCount - 2) % 4 == 0)
|
||||||
|
{
|
||||||
|
events.ScheduleEvent(EVENT_DOMINATE_MIND, urand(4000, 8000));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
events.ScheduleEvent(EVENT_KIRTONOS_TRANSFORM, 2000);
|
events.ScheduleEvent(EVENT_KIRTONOS_TRANSFORM, 20000);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DoZoneInCombat();
|
||||||
DoMeleeAttackIfReady();
|
DoMeleeAttackIfReady();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user