fix(Scripts/Gundrak): Fixed behavior for Colossus and Elemental (#23150)

Co-authored-by: arsinspace <arsinspace@outlook.com>
This commit is contained in:
arsinspace
2025-10-11 14:54:06 +03:00
committed by GitHub
parent dcbc02c93a
commit 43a54d4329
@@ -125,17 +125,18 @@ public:
void Reset() override void Reset() override
{ {
BossAI::Reset(); BossAI::Reset();
for (uint8 i = 0; i < 5; i++) if (!me->IsInEvadeMode())
me->SummonCreature(NPC_LIVING_MOJO, mojoPosition[i].GetPositionX(), mojoPosition[i].GetPositionY(), mojoPosition[i].GetPositionZ(), 0, TEMPSUMMON_MANUAL_DESPAWN, 0); {
me->CastSpell(me, SPELL_FREEZE_ANIM, true);
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
for (const auto & i : mojoPosition)
me->SummonCreature(NPC_LIVING_MOJO, i.GetPositionX(), i.GetPositionY(), i.GetPositionZ(), 0, TEMPSUMMON_MANUAL_DESPAWN, 0);
}
else
{
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
} }
void InitializeAI() override
{
BossAI::InitializeAI();
me->CastSpell(me, SPELL_FREEZE_ANIM, true);
} }
void JustReachedHome() override void JustReachedHome() override
@@ -144,9 +145,9 @@ public:
me->CastSpell(me, SPELL_FREEZE_ANIM, true); me->CastSpell(me, SPELL_FREEZE_ANIM, true);
} }
void JustEngagedWith(Unit* who) override void ScheduleTasks() override
{ {
BossAI::JustEngagedWith(who); events.ScheduleEvent(EVENT_COLOSSUS_START_FIGHT, 1s);
events.ScheduleEvent(EVENT_COLOSSUS_MIGHTY_BLOW, 10s); events.ScheduleEvent(EVENT_COLOSSUS_MIGHTY_BLOW, 10s);
events.ScheduleEvent(EVENT_COLOSSUS_MORTAL_STRIKE, 7s); events.ScheduleEvent(EVENT_COLOSSUS_MORTAL_STRIKE, 7s);
events.ScheduleEvent(EVENT_COLOSSUS_HEALTH_1, 1s); events.ScheduleEvent(EVENT_COLOSSUS_HEALTH_1, 1s);
@@ -183,6 +184,7 @@ public:
summons.Despawn(summon); summons.Despawn(summon);
if (summon->GetEntry() == NPC_DRAKKARI_ELEMENTAL) if (summon->GetEntry() == NPC_DRAKKARI_ELEMENTAL)
{ {
me->SetHealth(me->GetMaxHealth() / 2);
me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->RemoveAurasDueToSpell(SPELL_FREEZE_ANIM); me->RemoveAurasDueToSpell(SPELL_FREEZE_ANIM);
if (me->GetVictim()) if (me->GetVictim())
@@ -231,7 +233,7 @@ public:
events.ScheduleEvent(EVENT_COLOSSUS_HEALTH_1, 1s); events.ScheduleEvent(EVENT_COLOSSUS_HEALTH_1, 1s);
break; break;
case EVENT_COLOSSUS_HEALTH_2: case EVENT_COLOSSUS_HEALTH_2:
if (me->HealthBelowPct(21)) if (me->HealthBelowPct(2))
{ {
me->CastSpell(me, SPELL_EMERGE, false); me->CastSpell(me, SPELL_EMERGE, false);
me->CastSpell(me, SPELL_EMERGE_SUMMON, true); me->CastSpell(me, SPELL_EMERGE_SUMMON, true);
@@ -301,7 +303,7 @@ public:
switch (events.ExecuteEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_ELEMENTAL_HEALTH: case EVENT_ELEMENTAL_HEALTH:
if (me->HealthBelowPct(51)) if (me->HealthBelowPct(56))
{ {
me->CastSpell(me, SPELL_FACE_ME, true); me->CastSpell(me, SPELL_FACE_ME, true);
me->CastSpell(me, SPELL_SURGE_VISUAL, true); me->CastSpell(me, SPELL_SURGE_VISUAL, true);
@@ -315,7 +317,7 @@ public:
case EVENT_ELEMENTAL_SURGE: case EVENT_ELEMENTAL_SURGE:
Talk(SAY_SURGE); Talk(SAY_SURGE);
me->CastSpell(me, SPELL_SURGE_VISUAL, true); me->CastSpell(me, SPELL_SURGE_VISUAL, true);
me->CastSpell(me->GetVictim(), SPELL_SURGE, false); DoCastRandomTarget(SPELL_SURGE, 0, 40, true, false, true);
events.ScheduleEvent(EVENT_ELEMENTAL_SURGE, 15s); events.ScheduleEvent(EVENT_ELEMENTAL_SURGE, 15s);
break; break;
case EVENT_ELEMENTAL_VOLLEY: case EVENT_ELEMENTAL_VOLLEY: