fix(Script/ZulGurub): High Priestess Jeklik improvements (#11458)
This commit is contained in:
@@ -0,0 +1,8 @@
|
|||||||
|
-- Fix for the levitate issue
|
||||||
|
UPDATE `creature_template` SET `speed_walk` = 1, `speed_run` = 2.14286, `flags_extra` = `flags_extra`|512 WHERE `entry` = 14517;
|
||||||
|
UPDATE `creature_template_movement` SET `Flight` = 0 WHERE `CreatureId` = 14517;
|
||||||
|
-- Update Emotes
|
||||||
|
DELETE FROM `creature_text` WHERE `CreatureID` = 14517 AND `GroupID` IN (3,4);
|
||||||
|
INSERT INTO `creature_text` (`CreatureID`,`GroupID`,`ID`,`Text`,`Type`,`Language`,`Probability`,`Emote`,`Duration`,`Sound`,`BroadcastTextId`,`TextRange`,`comment`) VALUES
|
||||||
|
(14517,3,0,'%s emits a deafening shriek!',16,0,100,0,0,0,10370,0,'High Priestess Jeklik - EMOTE_SUMMON_BATS'),
|
||||||
|
(14517,4,0,'%s begins to cast a Great Heal!',16,0,100,0,0,0,10494,0,'High Priestess Jeklik - EMOTE_GREAT_HEAL');
|
||||||
@@ -22,20 +22,31 @@
|
|||||||
enum Says
|
enum Says
|
||||||
{
|
{
|
||||||
SAY_AGGRO = 0,
|
SAY_AGGRO = 0,
|
||||||
SAY_RAIN_FIRE = 1,
|
SAY_CALL_RIDERS = 1,
|
||||||
SAY_DEATH = 2
|
SAY_DEATH = 2,
|
||||||
|
EMOTE_SUMMON_BATS = 3,
|
||||||
|
EMOTE_GREAT_HEAL = 4
|
||||||
};
|
};
|
||||||
|
|
||||||
enum Spells
|
enum Spells
|
||||||
{
|
{
|
||||||
|
// Intro
|
||||||
|
SPELL_GREEN_CHANNELING = 13540,
|
||||||
|
SPELL_BAT_FORM = 23966,
|
||||||
|
|
||||||
|
// Phase one
|
||||||
|
SPELL_PIERCE_ARMOR = 12097,
|
||||||
|
SPELL_BLOOD_LEECH = 22644,
|
||||||
SPELL_CHARGE = 22911,
|
SPELL_CHARGE = 22911,
|
||||||
SPELL_SONICBURST = 23918,
|
SPELL_SONIC_BURST = 23918,
|
||||||
SPELL_SCREECH = 6605,
|
SPELL_SWOOP = 23919,
|
||||||
|
|
||||||
|
// Phase two
|
||||||
|
SPELL_CURSE_OF_BLOOD = 16098,
|
||||||
|
SPELL_PSYCHIC_SCREAM = 22884,
|
||||||
SPELL_SHADOW_WORD_PAIN = 23952,
|
SPELL_SHADOW_WORD_PAIN = 23952,
|
||||||
SPELL_MIND_FLAY = 23953,
|
SPELL_MIND_FLAY = 23953,
|
||||||
SPELL_CHAIN_MIND_FLAY = 26044, // Right ID unknown. So disabled
|
SPELL_GREATER_HEAL = 23954,
|
||||||
SPELL_GREATERHEAL = 23954,
|
|
||||||
SPELL_BAT_FORM = 23966,
|
|
||||||
|
|
||||||
// Batriders Spell
|
// Batriders Spell
|
||||||
SPELL_BOMB = 40332 // Wrong ID but Magmadars bomb is not working...
|
SPELL_BOMB = 40332 // Wrong ID but Magmadars bomb is not working...
|
||||||
@@ -49,13 +60,19 @@ enum BatIds
|
|||||||
|
|
||||||
enum Events
|
enum Events
|
||||||
{
|
{
|
||||||
|
// Phase one
|
||||||
EVENT_CHARGE_JEKLIK = 1,
|
EVENT_CHARGE_JEKLIK = 1,
|
||||||
|
EVENT_PIERCE_ARMOR,
|
||||||
|
EVENT_BLOOD_LEECH,
|
||||||
EVENT_SONIC_BURST,
|
EVENT_SONIC_BURST,
|
||||||
EVENT_SCREECH,
|
EVENT_SWOOP,
|
||||||
EVENT_SPAWN_BATS,
|
EVENT_SPAWN_BATS,
|
||||||
|
|
||||||
|
// Phase two
|
||||||
|
EVENT_CURSE_OF_BLOOD,
|
||||||
|
EVENT_PSYCHIC_SCREAM,
|
||||||
EVENT_SHADOW_WORD_PAIN,
|
EVENT_SHADOW_WORD_PAIN,
|
||||||
EVENT_MIND_FLAY,
|
EVENT_MIND_FLAY,
|
||||||
EVENT_CHAIN_MIND_FLAY,
|
|
||||||
EVENT_GREATER_HEAL,
|
EVENT_GREATER_HEAL,
|
||||||
EVENT_SPAWN_FLYING_BATS
|
EVENT_SPAWN_FLYING_BATS
|
||||||
};
|
};
|
||||||
@@ -87,6 +104,7 @@ public:
|
|||||||
|
|
||||||
void Reset() override
|
void Reset() override
|
||||||
{
|
{
|
||||||
|
DoCastSelf(SPELL_GREEN_CHANNELING);
|
||||||
_Reset();
|
_Reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -100,15 +118,17 @@ public:
|
|||||||
{
|
{
|
||||||
_EnterCombat();
|
_EnterCombat();
|
||||||
Talk(SAY_AGGRO);
|
Talk(SAY_AGGRO);
|
||||||
|
me->RemoveAurasDueToSpell(SPELL_GREEN_CHANNELING);
|
||||||
|
me->SetDisableGravity(true);
|
||||||
|
DoCastSelf(SPELL_BAT_FORM);
|
||||||
events.SetPhase(PHASE_ONE);
|
events.SetPhase(PHASE_ONE);
|
||||||
|
|
||||||
events.ScheduleEvent(EVENT_CHARGE_JEKLIK, 20000, 0, PHASE_ONE);
|
events.ScheduleEvent(EVENT_CHARGE_JEKLIK, urand(10000, 20000), PHASE_ONE);
|
||||||
events.ScheduleEvent(EVENT_SONIC_BURST, 8000, 0, PHASE_ONE);
|
events.ScheduleEvent(EVENT_PIERCE_ARMOR, urand(5000, 15000), PHASE_ONE);
|
||||||
events.ScheduleEvent(EVENT_SCREECH, 13000, 0, PHASE_ONE);
|
events.ScheduleEvent(EVENT_BLOOD_LEECH, urand(5000, 15000), PHASE_ONE);
|
||||||
events.ScheduleEvent(EVENT_SPAWN_BATS, 60000, 0, PHASE_ONE);
|
events.ScheduleEvent(EVENT_SONIC_BURST, urand(5000, 15000), PHASE_ONE);
|
||||||
|
events.ScheduleEvent(EVENT_SWOOP, 20000, PHASE_ONE);
|
||||||
me->SetCanFly(true);
|
events.ScheduleEvent(EVENT_SPAWN_BATS, 30000, PHASE_ONE);
|
||||||
DoCast(me, SPELL_BAT_FORM);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DamageTaken(Unit*, uint32& /*damage*/, DamageEffectType, SpellSchoolMask) override
|
void DamageTaken(Unit*, uint32& /*damage*/, DamageEffectType, SpellSchoolMask) override
|
||||||
@@ -116,14 +136,17 @@ public:
|
|||||||
if (events.IsInPhase(PHASE_ONE) && !HealthAbovePct(50))
|
if (events.IsInPhase(PHASE_ONE) && !HealthAbovePct(50))
|
||||||
{
|
{
|
||||||
me->RemoveAurasDueToSpell(SPELL_BAT_FORM);
|
me->RemoveAurasDueToSpell(SPELL_BAT_FORM);
|
||||||
me->SetCanFly(false);
|
me->SetDisableGravity(false);
|
||||||
DoResetThreat();
|
DoResetThreat();
|
||||||
events.SetPhase(PHASE_TWO);
|
events.SetPhase(PHASE_TWO);
|
||||||
events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, 6000, 0, PHASE_TWO);
|
|
||||||
events.ScheduleEvent(EVENT_MIND_FLAY, 11000, 0, PHASE_TWO);
|
events.ScheduleEvent(EVENT_CURSE_OF_BLOOD, urand(5000, 15000), PHASE_TWO);
|
||||||
events.ScheduleEvent(EVENT_CHAIN_MIND_FLAY, 26000, 0, PHASE_TWO);
|
events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, urand(10000, 15000), PHASE_TWO);
|
||||||
events.ScheduleEvent(EVENT_GREATER_HEAL, 50000, 0, PHASE_TWO);
|
events.ScheduleEvent(EVENT_PSYCHIC_SCREAM, urand(25000, 35000), PHASE_TWO);
|
||||||
events.ScheduleEvent(EVENT_SPAWN_FLYING_BATS, 10000, 0, PHASE_TWO);
|
events.ScheduleEvent(EVENT_MIND_FLAY, urand(10000, 30000), PHASE_TWO);
|
||||||
|
events.ScheduleEvent(EVENT_GREATER_HEAL, 25000, PHASE_TWO);
|
||||||
|
events.ScheduleEvent(EVENT_SPAWN_FLYING_BATS, 10000, PHASE_TWO);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -142,53 +165,68 @@ public:
|
|||||||
{
|
{
|
||||||
switch (eventId)
|
switch (eventId)
|
||||||
{
|
{
|
||||||
|
// Phase one
|
||||||
case EVENT_CHARGE_JEKLIK:
|
case EVENT_CHARGE_JEKLIK:
|
||||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
|
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
|
||||||
{
|
{
|
||||||
DoCast(target, SPELL_CHARGE);
|
DoCast(target, SPELL_CHARGE);
|
||||||
AttackStart(target);
|
AttackStart(target);
|
||||||
}
|
}
|
||||||
events.ScheduleEvent(EVENT_CHARGE_JEKLIK, urand(15000, 30000), 0, PHASE_ONE);
|
events.ScheduleEvent(EVENT_CHARGE_JEKLIK, urand(15000, 30000), PHASE_ONE);
|
||||||
|
break;
|
||||||
|
case EVENT_PIERCE_ARMOR:
|
||||||
|
DoCastVictim(SPELL_PIERCE_ARMOR);
|
||||||
|
events.ScheduleEvent(EVENT_PIERCE_ARMOR, urand(20000, 30000), PHASE_ONE);
|
||||||
|
break;
|
||||||
|
case EVENT_BLOOD_LEECH:
|
||||||
|
DoCastVictim(SPELL_BLOOD_LEECH);
|
||||||
|
events.ScheduleEvent(EVENT_BLOOD_LEECH, urand(10000, 20000), PHASE_ONE);
|
||||||
break;
|
break;
|
||||||
case EVENT_SONIC_BURST:
|
case EVENT_SONIC_BURST:
|
||||||
DoCastVictim(SPELL_SONICBURST);
|
DoCastVictim(SPELL_SONIC_BURST);
|
||||||
events.ScheduleEvent(EVENT_SONIC_BURST, urand(8000, 13000), 0, PHASE_ONE);
|
events.ScheduleEvent(EVENT_SONIC_BURST, urand(20000, 30000), PHASE_ONE);
|
||||||
break;
|
break;
|
||||||
case EVENT_SCREECH:
|
case EVENT_SWOOP:
|
||||||
DoCastVictim(SPELL_SCREECH);
|
DoCastVictim(SPELL_SWOOP);
|
||||||
events.ScheduleEvent(EVENT_SCREECH, urand(18000, 26000), 0, PHASE_ONE);
|
events.ScheduleEvent(EVENT_SWOOP, urand(20000, 30000), PHASE_ONE);
|
||||||
break;
|
break;
|
||||||
case EVENT_SPAWN_BATS:
|
case EVENT_SPAWN_BATS:
|
||||||
|
Talk(EMOTE_SUMMON_BATS);
|
||||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
|
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
|
||||||
for (uint8 i = 0; i < 6; ++i)
|
for (uint8 i = 0; i < 6; ++i)
|
||||||
if (Creature* bat = me->SummonCreature(NPC_BLOODSEEKER_BAT, SpawnBat[i], TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000))
|
if (Creature* bat = me->SummonCreature(NPC_BLOODSEEKER_BAT, SpawnBat[i], TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000))
|
||||||
bat->AI()->AttackStart(target);
|
bat->AI()->AttackStart(target);
|
||||||
events.ScheduleEvent(EVENT_SPAWN_BATS, 60000, 0, PHASE_ONE);
|
events.ScheduleEvent(EVENT_SPAWN_BATS, 30000, PHASE_ONE);
|
||||||
|
break;
|
||||||
|
//Phase two
|
||||||
|
case EVENT_CURSE_OF_BLOOD:
|
||||||
|
DoCastSelf(SPELL_CURSE_OF_BLOOD);
|
||||||
|
events.ScheduleEvent(EVENT_CURSE_OF_BLOOD, urand(25000, 30000), PHASE_TWO);
|
||||||
|
break;
|
||||||
|
case EVENT_PSYCHIC_SCREAM:
|
||||||
|
DoCastVictim(SPELL_PSYCHIC_SCREAM);
|
||||||
|
events.ScheduleEvent(EVENT_PSYCHIC_SCREAM, urand(35000, 45000), PHASE_TWO);
|
||||||
break;
|
break;
|
||||||
case EVENT_SHADOW_WORD_PAIN:
|
case EVENT_SHADOW_WORD_PAIN:
|
||||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
|
DoCastRandomTarget(SPELL_SHADOW_WORD_PAIN, 0, true);
|
||||||
DoCast(target, SPELL_SHADOW_WORD_PAIN);
|
events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, urand(12000, 18000), PHASE_TWO);
|
||||||
events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, urand(12000, 18000), 0, PHASE_TWO);
|
|
||||||
break;
|
break;
|
||||||
case EVENT_MIND_FLAY:
|
case EVENT_MIND_FLAY:
|
||||||
DoCastVictim(SPELL_MIND_FLAY);
|
DoCastVictim(SPELL_MIND_FLAY);
|
||||||
events.ScheduleEvent(EVENT_MIND_FLAY, 16000, 0, PHASE_TWO);
|
events.ScheduleEvent(EVENT_MIND_FLAY, urand(20000, 40000), PHASE_TWO);
|
||||||
break;
|
|
||||||
case EVENT_CHAIN_MIND_FLAY:
|
|
||||||
me->InterruptNonMeleeSpells(false);
|
|
||||||
DoCastVictim(SPELL_CHAIN_MIND_FLAY);
|
|
||||||
events.ScheduleEvent(EVENT_CHAIN_MIND_FLAY, urand(15000, 30000), 0, PHASE_TWO);
|
|
||||||
break;
|
break;
|
||||||
case EVENT_GREATER_HEAL:
|
case EVENT_GREATER_HEAL:
|
||||||
|
Talk(EMOTE_GREAT_HEAL);
|
||||||
me->InterruptNonMeleeSpells(false);
|
me->InterruptNonMeleeSpells(false);
|
||||||
DoCast(me, SPELL_GREATERHEAL);
|
DoCastSelf(SPELL_GREATER_HEAL);
|
||||||
events.ScheduleEvent(EVENT_GREATER_HEAL, urand(25000, 35000), 0, PHASE_TWO);
|
events.ScheduleEvent(EVENT_GREATER_HEAL, 25000, PHASE_TWO);
|
||||||
break;
|
break;
|
||||||
case EVENT_SPAWN_FLYING_BATS:
|
case EVENT_SPAWN_FLYING_BATS:
|
||||||
|
Talk(SAY_CALL_RIDERS);
|
||||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
|
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
|
||||||
if (Creature* flyingBat = me->SummonCreature(NPC_FRENZIED_BAT, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ() + 15.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000))
|
if (Creature* flyingBat = me->SummonCreature(NPC_FRENZIED_BAT, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ() + 15.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000))
|
||||||
flyingBat->AI()->AttackStart(target);
|
flyingBat->AI()->AttackStart(target);
|
||||||
events.ScheduleEvent(EVENT_SPAWN_FLYING_BATS, urand(10000, 15000), 0, PHASE_TWO);
|
events.ScheduleEvent(EVENT_SPAWN_FLYING_BATS, urand(10000, 15000), PHASE_TWO);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user