mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-02-17 01:04:34 +00:00
converted all tabs to 4 spaces
This commit is contained in:
@@ -20,166 +20,166 @@ enum Yells
|
||||
|
||||
enum eSpells
|
||||
{
|
||||
SPELL_ARCANE_VACUUM = 58694,
|
||||
SPELL_BLIZZARD_N = 58693,
|
||||
SPELL_BLIZZARD_H = 59369,
|
||||
SPELL_MANA_DESTRUCTION = 59374,
|
||||
SPELL_TAIL_SWEEP_N = 58690,
|
||||
SPELL_TAIL_SWEEP_H = 59283,
|
||||
SPELL_UNCONTROLLABLE_ENERGY_N = 58688,
|
||||
SPELL_UNCONTROLLABLE_ENERGY_H = 59281,
|
||||
SPELL_ARCANE_VACUUM = 58694,
|
||||
SPELL_BLIZZARD_N = 58693,
|
||||
SPELL_BLIZZARD_H = 59369,
|
||||
SPELL_MANA_DESTRUCTION = 59374,
|
||||
SPELL_TAIL_SWEEP_N = 58690,
|
||||
SPELL_TAIL_SWEEP_H = 59283,
|
||||
SPELL_UNCONTROLLABLE_ENERGY_N = 58688,
|
||||
SPELL_UNCONTROLLABLE_ENERGY_H = 59281,
|
||||
};
|
||||
|
||||
#define SPELL_BLIZZARD DUNGEON_MODE(SPELL_BLIZZARD_N, SPELL_BLIZZARD_H)
|
||||
#define SPELL_TAIL_SWEEP DUNGEON_MODE(SPELL_TAIL_SWEEP_N, SPELL_TAIL_SWEEP_H)
|
||||
#define SPELL_UNCONTROLLABLE_ENERGY DUNGEON_MODE(SPELL_UNCONTROLLABLE_ENERGY_N, SPELL_UNCONTROLLABLE_ENERGY_H)
|
||||
#define SPELL_BLIZZARD DUNGEON_MODE(SPELL_BLIZZARD_N, SPELL_BLIZZARD_H)
|
||||
#define SPELL_TAIL_SWEEP DUNGEON_MODE(SPELL_TAIL_SWEEP_N, SPELL_TAIL_SWEEP_H)
|
||||
#define SPELL_UNCONTROLLABLE_ENERGY DUNGEON_MODE(SPELL_UNCONTROLLABLE_ENERGY_N, SPELL_UNCONTROLLABLE_ENERGY_H)
|
||||
|
||||
enum eEvents
|
||||
{
|
||||
EVENT_SPELL_ARCANE_VACUUM = 1,
|
||||
EVENT_SPELL_BLIZZARD,
|
||||
EVENT_SPELL_MANA_DESTRUCTION,
|
||||
EVENT_SPELL_TAIL_SWEEP,
|
||||
EVENT_SPELL_UNCONTROLLABLE_ENERGY,
|
||||
EVENT_UNROOT,
|
||||
EVENT_SPELL_ARCANE_VACUUM = 1,
|
||||
EVENT_SPELL_BLIZZARD,
|
||||
EVENT_SPELL_MANA_DESTRUCTION,
|
||||
EVENT_SPELL_TAIL_SWEEP,
|
||||
EVENT_SPELL_UNCONTROLLABLE_ENERGY,
|
||||
EVENT_UNROOT,
|
||||
};
|
||||
|
||||
class boss_cyanigosa : public CreatureScript
|
||||
{
|
||||
public:
|
||||
boss_cyanigosa() : CreatureScript("boss_cyanigosa") { }
|
||||
boss_cyanigosa() : CreatureScript("boss_cyanigosa") { }
|
||||
|
||||
CreatureAI* GetAI(Creature* pCreature) const
|
||||
{
|
||||
return new boss_cyanigosaAI (pCreature);
|
||||
}
|
||||
CreatureAI* GetAI(Creature* pCreature) const
|
||||
{
|
||||
return new boss_cyanigosaAI (pCreature);
|
||||
}
|
||||
|
||||
struct boss_cyanigosaAI : public ScriptedAI
|
||||
{
|
||||
boss_cyanigosaAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = c->GetInstanceScript();
|
||||
}
|
||||
struct boss_cyanigosaAI : public ScriptedAI
|
||||
{
|
||||
boss_cyanigosaAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = c->GetInstanceScript();
|
||||
}
|
||||
|
||||
InstanceScript* pInstance;
|
||||
EventMap events;
|
||||
InstanceScript* pInstance;
|
||||
EventMap events;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
events.Reset();
|
||||
}
|
||||
void Reset()
|
||||
{
|
||||
events.Reset();
|
||||
}
|
||||
|
||||
void EnterCombat(Unit* /*who*/)
|
||||
{
|
||||
DoZoneInCombat();
|
||||
Talk(SAY_AGGRO);
|
||||
events.Reset();
|
||||
events.RescheduleEvent(EVENT_SPELL_ARCANE_VACUUM, 30000);
|
||||
events.RescheduleEvent(EVENT_SPELL_BLIZZARD, urand(5000,10000));
|
||||
events.RescheduleEvent(EVENT_SPELL_TAIL_SWEEP, urand(15000,20000));
|
||||
events.RescheduleEvent(EVENT_SPELL_UNCONTROLLABLE_ENERGY, urand(5000,8000));
|
||||
if (IsHeroic())
|
||||
events.RescheduleEvent(EVENT_SPELL_MANA_DESTRUCTION, 20000);
|
||||
}
|
||||
void EnterCombat(Unit* /*who*/)
|
||||
{
|
||||
DoZoneInCombat();
|
||||
Talk(SAY_AGGRO);
|
||||
events.Reset();
|
||||
events.RescheduleEvent(EVENT_SPELL_ARCANE_VACUUM, 30000);
|
||||
events.RescheduleEvent(EVENT_SPELL_BLIZZARD, urand(5000,10000));
|
||||
events.RescheduleEvent(EVENT_SPELL_TAIL_SWEEP, urand(15000,20000));
|
||||
events.RescheduleEvent(EVENT_SPELL_UNCONTROLLABLE_ENERGY, urand(5000,8000));
|
||||
if (IsHeroic())
|
||||
events.RescheduleEvent(EVENT_SPELL_MANA_DESTRUCTION, 20000);
|
||||
}
|
||||
|
||||
void SpellHitTarget(Unit* target, const SpellInfo* spell)
|
||||
{
|
||||
if (!target || !spell)
|
||||
return;
|
||||
switch(spell->Id)
|
||||
{
|
||||
case SPELL_ARCANE_VACUUM:
|
||||
target->NearTeleportTo(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()+10.0f, target->GetOrientation());
|
||||
break;
|
||||
}
|
||||
}
|
||||
void SpellHitTarget(Unit* target, const SpellInfo* spell)
|
||||
{
|
||||
if (!target || !spell)
|
||||
return;
|
||||
switch(spell->Id)
|
||||
{
|
||||
case SPELL_ARCANE_VACUUM:
|
||||
target->NearTeleportTo(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()+10.0f, target->GetOrientation());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void UpdateAI(uint32 diff)
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
void UpdateAI(uint32 diff)
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
events.Update(diff);
|
||||
events.Update(diff);
|
||||
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
|
||||
switch(events.GetEvent())
|
||||
{
|
||||
case 0:
|
||||
break;
|
||||
case EVENT_SPELL_ARCANE_VACUUM:
|
||||
me->CastSpell((Unit*)NULL, SPELL_ARCANE_VACUUM, false);
|
||||
DoResetThreat();
|
||||
me->SetControlled(true, UNIT_STATE_ROOT);
|
||||
me->setAttackTimer(BASE_ATTACK, 3000);
|
||||
events.RepeatEvent(30000);
|
||||
events.ScheduleEvent(EVENT_UNROOT, 3000);
|
||||
break;
|
||||
case EVENT_UNROOT:
|
||||
me->SetControlled(false, UNIT_STATE_ROOT);
|
||||
events.PopEvent();
|
||||
break;
|
||||
case EVENT_SPELL_BLIZZARD:
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 45.0f, true))
|
||||
me->CastSpell(target, SPELL_BLIZZARD, false);
|
||||
events.RepeatEvent(15000);
|
||||
break;
|
||||
case EVENT_SPELL_MANA_DESTRUCTION:
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 50.0f, true))
|
||||
me->CastSpell(target, SPELL_MANA_DESTRUCTION, false);
|
||||
events.RepeatEvent(20000);
|
||||
break;
|
||||
case EVENT_SPELL_TAIL_SWEEP:
|
||||
me->CastSpell(me->GetVictim(), SPELL_TAIL_SWEEP, false);
|
||||
events.RepeatEvent(urand(15000,20000));
|
||||
break;
|
||||
case EVENT_SPELL_UNCONTROLLABLE_ENERGY:
|
||||
me->CastSpell(me->GetVictim(), SPELL_UNCONTROLLABLE_ENERGY, false);
|
||||
events.RepeatEvent(urand(20000,25000));
|
||||
break;
|
||||
}
|
||||
switch(events.GetEvent())
|
||||
{
|
||||
case 0:
|
||||
break;
|
||||
case EVENT_SPELL_ARCANE_VACUUM:
|
||||
me->CastSpell((Unit*)NULL, SPELL_ARCANE_VACUUM, false);
|
||||
DoResetThreat();
|
||||
me->SetControlled(true, UNIT_STATE_ROOT);
|
||||
me->setAttackTimer(BASE_ATTACK, 3000);
|
||||
events.RepeatEvent(30000);
|
||||
events.ScheduleEvent(EVENT_UNROOT, 3000);
|
||||
break;
|
||||
case EVENT_UNROOT:
|
||||
me->SetControlled(false, UNIT_STATE_ROOT);
|
||||
events.PopEvent();
|
||||
break;
|
||||
case EVENT_SPELL_BLIZZARD:
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 45.0f, true))
|
||||
me->CastSpell(target, SPELL_BLIZZARD, false);
|
||||
events.RepeatEvent(15000);
|
||||
break;
|
||||
case EVENT_SPELL_MANA_DESTRUCTION:
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 50.0f, true))
|
||||
me->CastSpell(target, SPELL_MANA_DESTRUCTION, false);
|
||||
events.RepeatEvent(20000);
|
||||
break;
|
||||
case EVENT_SPELL_TAIL_SWEEP:
|
||||
me->CastSpell(me->GetVictim(), SPELL_TAIL_SWEEP, false);
|
||||
events.RepeatEvent(urand(15000,20000));
|
||||
break;
|
||||
case EVENT_SPELL_UNCONTROLLABLE_ENERGY:
|
||||
me->CastSpell(me->GetVictim(), SPELL_UNCONTROLLABLE_ENERGY, false);
|
||||
events.RepeatEvent(urand(20000,25000));
|
||||
break;
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/)
|
||||
{
|
||||
Talk(SAY_DEATH);
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_BOSS_DIED, 0);
|
||||
float h = me->GetMap()->GetHeight(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()+2.0f);
|
||||
if (h != INVALID_HEIGHT && me->GetPositionZ()-h > 3.0f)
|
||||
{
|
||||
me->UpdatePosition(me->GetPositionX(), me->GetPositionY(), h, me->GetOrientation(), true); // move to ground
|
||||
me->StopMovingOnCurrentPos();
|
||||
me->DestroyForNearbyPlayers();
|
||||
}
|
||||
}
|
||||
void JustDied(Unit* /*killer*/)
|
||||
{
|
||||
Talk(SAY_DEATH);
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_BOSS_DIED, 0);
|
||||
float h = me->GetMap()->GetHeight(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()+2.0f);
|
||||
if (h != INVALID_HEIGHT && me->GetPositionZ()-h > 3.0f)
|
||||
{
|
||||
me->UpdatePosition(me->GetPositionX(), me->GetPositionY(), h, me->GetOrientation(), true); // move to ground
|
||||
me->StopMovingOnCurrentPos();
|
||||
me->DestroyForNearbyPlayers();
|
||||
}
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* victim)
|
||||
{
|
||||
if (victim && victim->GetGUID() == me->GetGUID())
|
||||
void KilledUnit(Unit* victim)
|
||||
{
|
||||
if (victim && victim->GetGUID() == me->GetGUID())
|
||||
return;
|
||||
Talk(SAY_SLAY);
|
||||
}
|
||||
}
|
||||
|
||||
void MoveInLineOfSight(Unit* /*who*/) {}
|
||||
void MoveInLineOfSight(Unit* /*who*/) {}
|
||||
|
||||
void EnterEvadeMode()
|
||||
{
|
||||
me->SetControlled(false, UNIT_STATE_ROOT);
|
||||
ScriptedAI::EnterEvadeMode();
|
||||
events.Reset();
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_FAILED, 1);
|
||||
}
|
||||
};
|
||||
void EnterEvadeMode()
|
||||
{
|
||||
me->SetControlled(false, UNIT_STATE_ROOT);
|
||||
ScriptedAI::EnterEvadeMode();
|
||||
events.Reset();
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_FAILED, 1);
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
void AddSC_boss_cyanigosa()
|
||||
{
|
||||
new boss_cyanigosa();
|
||||
new boss_cyanigosa();
|
||||
}
|
||||
|
||||
@@ -8,21 +8,21 @@ REWRITTEN FROM SCRATCH BY PUSSYWIZARD, IT OWNS NOW!
|
||||
|
||||
enum eSpells
|
||||
{
|
||||
SPELL_BLOODLUST = 54516,
|
||||
SPELL_BREAK_BONDS = 59463,
|
||||
SPELL_CHAIN_HEAL_N = 54481,
|
||||
SPELL_CHAIN_HEAL_H = 59473,
|
||||
SPELL_EARTH_SHIELD_N = 54479,
|
||||
SPELL_EARTH_SHIELD_H = 59471,
|
||||
//SPELL_EARTH_SHIELD_TRIGGERED_N = 54480,
|
||||
//SPELL_EARTH_SHIELD_TRIGGERED_H = 59472,
|
||||
SPELL_EARTH_SHOCK = 54511,
|
||||
SPELL_LIGHTNING_BOLT = 53044,
|
||||
SPELL_STORMSTRIKE = 51876,
|
||||
SPELL_BLOODLUST = 54516,
|
||||
SPELL_BREAK_BONDS = 59463,
|
||||
SPELL_CHAIN_HEAL_N = 54481,
|
||||
SPELL_CHAIN_HEAL_H = 59473,
|
||||
SPELL_EARTH_SHIELD_N = 54479,
|
||||
SPELL_EARTH_SHIELD_H = 59471,
|
||||
//SPELL_EARTH_SHIELD_TRIGGERED_N = 54480,
|
||||
//SPELL_EARTH_SHIELD_TRIGGERED_H = 59472,
|
||||
SPELL_EARTH_SHOCK = 54511,
|
||||
SPELL_LIGHTNING_BOLT = 53044,
|
||||
SPELL_STORMSTRIKE = 51876,
|
||||
};
|
||||
|
||||
#define SPELL_CHAIN_HEAL DUNGEON_MODE(SPELL_CHAIN_HEAL_N, SPELL_CHAIN_HEAL_H)
|
||||
#define SPELL_EARTH_SHIELD DUNGEON_MODE(SPELL_EARTH_SHIELD_N, SPELL_EARTH_SHIELD_H)
|
||||
#define SPELL_CHAIN_HEAL DUNGEON_MODE(SPELL_CHAIN_HEAL_N, SPELL_CHAIN_HEAL_H)
|
||||
#define SPELL_EARTH_SHIELD DUNGEON_MODE(SPELL_EARTH_SHIELD_N, SPELL_EARTH_SHIELD_H)
|
||||
|
||||
enum Yells
|
||||
{
|
||||
@@ -37,265 +37,265 @@ enum Yells
|
||||
|
||||
enum eEvents
|
||||
{
|
||||
EVENT_SPELL_BLOODLUST = 1,
|
||||
EVENT_SPELL_BREAK_BONDS,
|
||||
EVENT_SPELL_CHAIN_HEAL,
|
||||
EVENT_SPELL_EARTH_SHIELD,
|
||||
EVENT_SPELL_EARTH_SHOCK,
|
||||
EVENT_SPELL_LIGHTNING_BOLT,
|
||||
EVENT_SPELL_STORMSTRIKE,
|
||||
EVENT_SPELL_BLOODLUST = 1,
|
||||
EVENT_SPELL_BREAK_BONDS,
|
||||
EVENT_SPELL_CHAIN_HEAL,
|
||||
EVENT_SPELL_EARTH_SHIELD,
|
||||
EVENT_SPELL_EARTH_SHOCK,
|
||||
EVENT_SPELL_LIGHTNING_BOLT,
|
||||
EVENT_SPELL_STORMSTRIKE,
|
||||
};
|
||||
|
||||
class boss_erekem : public CreatureScript
|
||||
{
|
||||
public:
|
||||
boss_erekem() : CreatureScript("boss_erekem") { }
|
||||
boss_erekem() : CreatureScript("boss_erekem") { }
|
||||
|
||||
CreatureAI* GetAI(Creature* pCreature) const
|
||||
{
|
||||
return new boss_erekemAI (pCreature);
|
||||
}
|
||||
CreatureAI* GetAI(Creature* pCreature) const
|
||||
{
|
||||
return new boss_erekemAI (pCreature);
|
||||
}
|
||||
|
||||
struct boss_erekemAI : public ScriptedAI
|
||||
{
|
||||
boss_erekemAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = c->GetInstanceScript();
|
||||
}
|
||||
struct boss_erekemAI : public ScriptedAI
|
||||
{
|
||||
boss_erekemAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = c->GetInstanceScript();
|
||||
}
|
||||
|
||||
InstanceScript* pInstance;
|
||||
EventMap events;
|
||||
InstanceScript* pInstance;
|
||||
EventMap events;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
events.Reset();
|
||||
}
|
||||
void Reset()
|
||||
{
|
||||
events.Reset();
|
||||
}
|
||||
|
||||
void EnterCombat(Unit* who)
|
||||
{
|
||||
DoZoneInCombat();
|
||||
Talk(SAY_AGGRO);
|
||||
DoCast(me, SPELL_EARTH_SHIELD);
|
||||
events.Reset();
|
||||
events.RescheduleEvent(EVENT_SPELL_BLOODLUST, 15000);
|
||||
events.RescheduleEvent(EVENT_SPELL_BREAK_BONDS, urand(9000,14000));
|
||||
events.RescheduleEvent(EVENT_SPELL_CHAIN_HEAL, 0);
|
||||
events.RescheduleEvent(EVENT_SPELL_EARTH_SHIELD, 20000);
|
||||
events.RescheduleEvent(EVENT_SPELL_EARTH_SHOCK, urand(2000,8000));
|
||||
events.RescheduleEvent(EVENT_SPELL_LIGHTNING_BOLT, urand(5000,10000));
|
||||
if (IsHeroic())
|
||||
events.RescheduleEvent(EVENT_SPELL_STORMSTRIKE, 3000);
|
||||
void EnterCombat(Unit* who)
|
||||
{
|
||||
DoZoneInCombat();
|
||||
Talk(SAY_AGGRO);
|
||||
DoCast(me, SPELL_EARTH_SHIELD);
|
||||
events.Reset();
|
||||
events.RescheduleEvent(EVENT_SPELL_BLOODLUST, 15000);
|
||||
events.RescheduleEvent(EVENT_SPELL_BREAK_BONDS, urand(9000,14000));
|
||||
events.RescheduleEvent(EVENT_SPELL_CHAIN_HEAL, 0);
|
||||
events.RescheduleEvent(EVENT_SPELL_EARTH_SHIELD, 20000);
|
||||
events.RescheduleEvent(EVENT_SPELL_EARTH_SHOCK, urand(2000,8000));
|
||||
events.RescheduleEvent(EVENT_SPELL_LIGHTNING_BOLT, urand(5000,10000));
|
||||
if (IsHeroic())
|
||||
events.RescheduleEvent(EVENT_SPELL_STORMSTRIKE, 3000);
|
||||
|
||||
if (Creature* c = pInstance->instance->GetCreature(pInstance->GetData64(DATA_EREKEM_GUARD_1_GUID)))
|
||||
if (!c->IsInCombat())
|
||||
c->AI()->AttackStart(who);
|
||||
if (Creature* c = pInstance->instance->GetCreature(pInstance->GetData64(DATA_EREKEM_GUARD_2_GUID)))
|
||||
if (!c->IsInCombat())
|
||||
c->AI()->AttackStart(who);
|
||||
}
|
||||
if (Creature* c = pInstance->instance->GetCreature(pInstance->GetData64(DATA_EREKEM_GUARD_1_GUID)))
|
||||
if (!c->IsInCombat())
|
||||
c->AI()->AttackStart(who);
|
||||
if (Creature* c = pInstance->instance->GetCreature(pInstance->GetData64(DATA_EREKEM_GUARD_2_GUID)))
|
||||
if (!c->IsInCombat())
|
||||
c->AI()->AttackStart(who);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff)
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
void UpdateAI(uint32 diff)
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
events.Update(diff);
|
||||
events.Update(diff);
|
||||
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
|
||||
switch(events.GetEvent())
|
||||
{
|
||||
case 0:
|
||||
break;
|
||||
case EVENT_SPELL_BLOODLUST:
|
||||
me->CastSpell((Unit*)NULL, SPELL_BLOODLUST, false);
|
||||
events.RepeatEvent(urand(35000,45000));
|
||||
break;
|
||||
case EVENT_SPELL_BREAK_BONDS:
|
||||
me->CastSpell((Unit*)NULL, SPELL_BREAK_BONDS, false);
|
||||
events.RepeatEvent(urand(16000,22000));
|
||||
break;
|
||||
case EVENT_SPELL_CHAIN_HEAL:
|
||||
if (uint64 TargetGUID = GetChainHealTargetGUID())
|
||||
if (pInstance)
|
||||
{
|
||||
if (Creature* target = pInstance->instance->GetCreature(TargetGUID))
|
||||
me->CastSpell(target, SPELL_CHAIN_HEAL, false);
|
||||
switch(events.GetEvent())
|
||||
{
|
||||
case 0:
|
||||
break;
|
||||
case EVENT_SPELL_BLOODLUST:
|
||||
me->CastSpell((Unit*)NULL, SPELL_BLOODLUST, false);
|
||||
events.RepeatEvent(urand(35000,45000));
|
||||
break;
|
||||
case EVENT_SPELL_BREAK_BONDS:
|
||||
me->CastSpell((Unit*)NULL, SPELL_BREAK_BONDS, false);
|
||||
events.RepeatEvent(urand(16000,22000));
|
||||
break;
|
||||
case EVENT_SPELL_CHAIN_HEAL:
|
||||
if (uint64 TargetGUID = GetChainHealTargetGUID())
|
||||
if (pInstance)
|
||||
{
|
||||
if (Creature* target = pInstance->instance->GetCreature(TargetGUID))
|
||||
me->CastSpell(target, SPELL_CHAIN_HEAL, false);
|
||||
|
||||
Creature *pGuard1 = pInstance->instance->GetCreature(pInstance->GetData64(DATA_EREKEM_GUARD_1_GUID));
|
||||
Creature *pGuard2 = pInstance->instance->GetCreature(pInstance->GetData64(DATA_EREKEM_GUARD_2_GUID));
|
||||
if (pGuard1 && !pGuard1->IsAlive() || pGuard2 && !pGuard2->IsAlive())
|
||||
{
|
||||
events.RepeatEvent(urand(3000,6000));
|
||||
break;
|
||||
}
|
||||
}
|
||||
events.RepeatEvent(urand(8000,11000));
|
||||
break;
|
||||
case EVENT_SPELL_EARTH_SHIELD:
|
||||
me->CastSpell(me, SPELL_EARTH_SHIELD, false);
|
||||
events.RepeatEvent(20000);
|
||||
break;
|
||||
case EVENT_SPELL_EARTH_SHOCK:
|
||||
me->CastSpell(me->GetVictim(), SPELL_EARTH_SHOCK, false);
|
||||
events.RepeatEvent(urand(8000,13000));
|
||||
break;
|
||||
case EVENT_SPELL_LIGHTNING_BOLT:
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 35.0f, true))
|
||||
me->CastSpell(target, SPELL_LIGHTNING_BOLT, false);
|
||||
events.RepeatEvent(urand(15000,25000));
|
||||
break;
|
||||
case EVENT_SPELL_STORMSTRIKE:
|
||||
{
|
||||
Creature *pGuard1 = pInstance->instance->GetCreature(pInstance->GetData64(DATA_EREKEM_GUARD_1_GUID));
|
||||
Creature *pGuard2 = pInstance->instance->GetCreature(pInstance->GetData64(DATA_EREKEM_GUARD_2_GUID));
|
||||
if (pGuard1 && !pGuard1->IsAlive() && pGuard2 && !pGuard2->IsAlive()) // both dead
|
||||
me->CastSpell(me->GetVictim(), SPELL_STORMSTRIKE, false);
|
||||
events.RepeatEvent(3000);
|
||||
}
|
||||
break;
|
||||
}
|
||||
Creature *pGuard1 = pInstance->instance->GetCreature(pInstance->GetData64(DATA_EREKEM_GUARD_1_GUID));
|
||||
Creature *pGuard2 = pInstance->instance->GetCreature(pInstance->GetData64(DATA_EREKEM_GUARD_2_GUID));
|
||||
if (pGuard1 && !pGuard1->IsAlive() || pGuard2 && !pGuard2->IsAlive())
|
||||
{
|
||||
events.RepeatEvent(urand(3000,6000));
|
||||
break;
|
||||
}
|
||||
}
|
||||
events.RepeatEvent(urand(8000,11000));
|
||||
break;
|
||||
case EVENT_SPELL_EARTH_SHIELD:
|
||||
me->CastSpell(me, SPELL_EARTH_SHIELD, false);
|
||||
events.RepeatEvent(20000);
|
||||
break;
|
||||
case EVENT_SPELL_EARTH_SHOCK:
|
||||
me->CastSpell(me->GetVictim(), SPELL_EARTH_SHOCK, false);
|
||||
events.RepeatEvent(urand(8000,13000));
|
||||
break;
|
||||
case EVENT_SPELL_LIGHTNING_BOLT:
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 35.0f, true))
|
||||
me->CastSpell(target, SPELL_LIGHTNING_BOLT, false);
|
||||
events.RepeatEvent(urand(15000,25000));
|
||||
break;
|
||||
case EVENT_SPELL_STORMSTRIKE:
|
||||
{
|
||||
Creature *pGuard1 = pInstance->instance->GetCreature(pInstance->GetData64(DATA_EREKEM_GUARD_1_GUID));
|
||||
Creature *pGuard2 = pInstance->instance->GetCreature(pInstance->GetData64(DATA_EREKEM_GUARD_2_GUID));
|
||||
if (pGuard1 && !pGuard1->IsAlive() && pGuard2 && !pGuard2->IsAlive()) // both dead
|
||||
me->CastSpell(me->GetVictim(), SPELL_STORMSTRIKE, false);
|
||||
events.RepeatEvent(3000);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/)
|
||||
{
|
||||
Talk(SAY_DEATH);
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_BOSS_DIED, 0);
|
||||
}
|
||||
void JustDied(Unit* /*killer*/)
|
||||
{
|
||||
Talk(SAY_DEATH);
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_BOSS_DIED, 0);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* victim)
|
||||
{
|
||||
if (victim && victim->GetGUID() == me->GetGUID())
|
||||
return;
|
||||
Talk(SAY_SLAY);
|
||||
}
|
||||
void KilledUnit(Unit* victim)
|
||||
{
|
||||
if (victim && victim->GetGUID() == me->GetGUID())
|
||||
return;
|
||||
Talk(SAY_SLAY);
|
||||
}
|
||||
|
||||
void MoveInLineOfSight(Unit* /*who*/) {}
|
||||
void MoveInLineOfSight(Unit* /*who*/) {}
|
||||
|
||||
void EnterEvadeMode()
|
||||
{
|
||||
ScriptedAI::EnterEvadeMode();
|
||||
events.Reset();
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_FAILED, 1);
|
||||
}
|
||||
void EnterEvadeMode()
|
||||
{
|
||||
ScriptedAI::EnterEvadeMode();
|
||||
events.Reset();
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_FAILED, 1);
|
||||
}
|
||||
|
||||
uint64 GetChainHealTargetGUID()
|
||||
{
|
||||
if (HealthBelowPct(85))
|
||||
return me->GetGUID();
|
||||
uint64 GetChainHealTargetGUID()
|
||||
{
|
||||
if (HealthBelowPct(85))
|
||||
return me->GetGUID();
|
||||
|
||||
if (pInstance)
|
||||
{
|
||||
if (Creature* c = pInstance->instance->GetCreature(pInstance->GetData64(DATA_EREKEM_GUARD_1_GUID)))
|
||||
if (c->IsAlive() && !c->HealthAbovePct(75))
|
||||
return c->GetGUID();
|
||||
if (pInstance)
|
||||
{
|
||||
if (Creature* c = pInstance->instance->GetCreature(pInstance->GetData64(DATA_EREKEM_GUARD_1_GUID)))
|
||||
if (c->IsAlive() && !c->HealthAbovePct(75))
|
||||
return c->GetGUID();
|
||||
|
||||
if (Creature* c = pInstance->instance->GetCreature(pInstance->GetData64(DATA_EREKEM_GUARD_2_GUID)))
|
||||
if (c->IsAlive() && !c->HealthAbovePct(75))
|
||||
return c->GetGUID();
|
||||
}
|
||||
if (Creature* c = pInstance->instance->GetCreature(pInstance->GetData64(DATA_EREKEM_GUARD_2_GUID)))
|
||||
if (c->IsAlive() && !c->HealthAbovePct(75))
|
||||
return c->GetGUID();
|
||||
}
|
||||
|
||||
return me->GetGUID();
|
||||
}
|
||||
};
|
||||
return me->GetGUID();
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
enum GuardSpells
|
||||
{
|
||||
SPELL_GUSHING_WOUND = 39215,
|
||||
SPELL_HOWLING_SCREECH = 54462,
|
||||
SPELL_STRIKE = 14516
|
||||
SPELL_GUSHING_WOUND = 39215,
|
||||
SPELL_HOWLING_SCREECH = 54462,
|
||||
SPELL_STRIKE = 14516
|
||||
};
|
||||
|
||||
enum eGuardEvents
|
||||
{
|
||||
EVENT_SPELL_GUSHING_WOUND = 1,
|
||||
EVENT_SPELL_HOWLING_SCREECH,
|
||||
EVENT_SPELL_STRIKE
|
||||
EVENT_SPELL_GUSHING_WOUND = 1,
|
||||
EVENT_SPELL_HOWLING_SCREECH,
|
||||
EVENT_SPELL_STRIKE
|
||||
};
|
||||
|
||||
|
||||
class npc_erekem_guard : public CreatureScript
|
||||
{
|
||||
public:
|
||||
npc_erekem_guard() : CreatureScript("npc_erekem_guard") { }
|
||||
npc_erekem_guard() : CreatureScript("npc_erekem_guard") { }
|
||||
|
||||
CreatureAI* GetAI(Creature* pCreature) const
|
||||
{
|
||||
return new npc_erekem_guardAI (pCreature);
|
||||
}
|
||||
CreatureAI* GetAI(Creature* pCreature) const
|
||||
{
|
||||
return new npc_erekem_guardAI (pCreature);
|
||||
}
|
||||
|
||||
struct npc_erekem_guardAI : public ScriptedAI
|
||||
{
|
||||
npc_erekem_guardAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = c->GetInstanceScript();
|
||||
}
|
||||
struct npc_erekem_guardAI : public ScriptedAI
|
||||
{
|
||||
npc_erekem_guardAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = c->GetInstanceScript();
|
||||
}
|
||||
|
||||
InstanceScript* pInstance;
|
||||
EventMap events;
|
||||
InstanceScript* pInstance;
|
||||
EventMap events;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
events.Reset();
|
||||
}
|
||||
void Reset()
|
||||
{
|
||||
events.Reset();
|
||||
}
|
||||
|
||||
void EnterCombat(Unit* who)
|
||||
{
|
||||
DoZoneInCombat();
|
||||
events.Reset();
|
||||
events.RescheduleEvent(EVENT_SPELL_GUSHING_WOUND, urand(1000,3000));
|
||||
events.RescheduleEvent(EVENT_SPELL_HOWLING_SCREECH, urand(8000, 13000));
|
||||
events.RescheduleEvent(EVENT_SPELL_STRIKE, urand(4000, 8000));
|
||||
void EnterCombat(Unit* who)
|
||||
{
|
||||
DoZoneInCombat();
|
||||
events.Reset();
|
||||
events.RescheduleEvent(EVENT_SPELL_GUSHING_WOUND, urand(1000,3000));
|
||||
events.RescheduleEvent(EVENT_SPELL_HOWLING_SCREECH, urand(8000, 13000));
|
||||
events.RescheduleEvent(EVENT_SPELL_STRIKE, urand(4000, 8000));
|
||||
|
||||
if (Creature* c = pInstance->instance->GetCreature(pInstance->GetData64(DATA_EREKEM_GUID)))
|
||||
if (!c->IsInCombat())
|
||||
c->AI()->AttackStart(who);
|
||||
}
|
||||
if (Creature* c = pInstance->instance->GetCreature(pInstance->GetData64(DATA_EREKEM_GUID)))
|
||||
if (!c->IsInCombat())
|
||||
c->AI()->AttackStart(who);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff)
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
void UpdateAI(uint32 diff)
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
events.Update(diff);
|
||||
events.Update(diff);
|
||||
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
|
||||
switch(events.GetEvent())
|
||||
{
|
||||
case 0:
|
||||
break;
|
||||
case EVENT_SPELL_GUSHING_WOUND:
|
||||
me->CastSpell(me->GetVictim(), SPELL_GUSHING_WOUND, false);
|
||||
events.RepeatEvent(urand(7000,12000));
|
||||
break;
|
||||
case EVENT_SPELL_HOWLING_SCREECH:
|
||||
me->CastSpell(me->GetVictim(), SPELL_HOWLING_SCREECH, false);
|
||||
events.RepeatEvent(urand(8000,13000));
|
||||
break;
|
||||
case EVENT_SPELL_STRIKE:
|
||||
me->CastSpell(me->GetVictim(), SPELL_STRIKE, false);
|
||||
events.RepeatEvent(urand(4000,8000));
|
||||
break;
|
||||
}
|
||||
switch(events.GetEvent())
|
||||
{
|
||||
case 0:
|
||||
break;
|
||||
case EVENT_SPELL_GUSHING_WOUND:
|
||||
me->CastSpell(me->GetVictim(), SPELL_GUSHING_WOUND, false);
|
||||
events.RepeatEvent(urand(7000,12000));
|
||||
break;
|
||||
case EVENT_SPELL_HOWLING_SCREECH:
|
||||
me->CastSpell(me->GetVictim(), SPELL_HOWLING_SCREECH, false);
|
||||
events.RepeatEvent(urand(8000,13000));
|
||||
break;
|
||||
case EVENT_SPELL_STRIKE:
|
||||
me->CastSpell(me->GetVictim(), SPELL_STRIKE, false);
|
||||
events.RepeatEvent(urand(4000,8000));
|
||||
break;
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
void MoveInLineOfSight(Unit* /*who*/) {}
|
||||
};
|
||||
void MoveInLineOfSight(Unit* /*who*/) {}
|
||||
};
|
||||
};
|
||||
|
||||
void AddSC_boss_erekem()
|
||||
{
|
||||
new boss_erekem();
|
||||
new npc_erekem_guard();
|
||||
new boss_erekem();
|
||||
new npc_erekem_guard();
|
||||
}
|
||||
|
||||
@@ -8,17 +8,17 @@ REWRITTEN FROM SCRATCH BY PUSSYWIZARD, IT OWNS NOW!
|
||||
#include "Player.h"
|
||||
#include "SpellInfo.h"
|
||||
|
||||
#define ACTION_WATER_ELEMENT_HIT 1
|
||||
#define ACTION_WATER_ELEMENT_KILLED 2
|
||||
#define ACTION_WATER_ELEMENT_HIT 1
|
||||
#define ACTION_WATER_ELEMENT_KILLED 2
|
||||
|
||||
#define MAX_SPAWN_LOC 5
|
||||
static Position SpawnLoc[MAX_SPAWN_LOC]=
|
||||
{
|
||||
{1840.64f, 795.407f, 44.079f, 1.676f},
|
||||
{1886.24f, 757.733f, 47.750f, 5.201f},
|
||||
{1877.91f, 845.915f, 43.417f, 3.560f},
|
||||
{1918.97f, 850.645f, 47.225f, 4.136f},
|
||||
{1935.50f, 796.224f, 52.492f, 4.224f},
|
||||
{1840.64f, 795.407f, 44.079f, 1.676f},
|
||||
{1886.24f, 757.733f, 47.750f, 5.201f},
|
||||
{1877.91f, 845.915f, 43.417f, 3.560f},
|
||||
{1918.97f, 850.645f, 47.225f, 4.136f},
|
||||
{1935.50f, 796.224f, 52.492f, 4.224f},
|
||||
};
|
||||
|
||||
enum Yells
|
||||
@@ -34,261 +34,261 @@ enum Yells
|
||||
|
||||
enum eCreatures
|
||||
{
|
||||
NPC_ICHOR_GLOBULE = 29321,
|
||||
NPC_ICHOR_GLOBULE = 29321,
|
||||
};
|
||||
|
||||
enum eSpells
|
||||
{
|
||||
SPELL_DRAINED = 59820,
|
||||
SPELL_FRENZY_N = 54312,
|
||||
SPELL_FRENZY_H = 59522,
|
||||
SPELL_PROTECTIVE_BUBBLE = 54306,
|
||||
SPELL_WATER_BLAST_N = 54237,
|
||||
SPELL_WATER_BLAST_H = 59520,
|
||||
SPELL_WATER_BOLT_VOLLEY_N = 54241,
|
||||
SPELL_WATER_BOLT_VOLLEY_H = 59521,
|
||||
SPELL_DRAINED = 59820,
|
||||
SPELL_FRENZY_N = 54312,
|
||||
SPELL_FRENZY_H = 59522,
|
||||
SPELL_PROTECTIVE_BUBBLE = 54306,
|
||||
SPELL_WATER_BLAST_N = 54237,
|
||||
SPELL_WATER_BLAST_H = 59520,
|
||||
SPELL_WATER_BOLT_VOLLEY_N = 54241,
|
||||
SPELL_WATER_BOLT_VOLLEY_H = 59521,
|
||||
|
||||
SPELL_SPLASH = 59516, // casted by globule upon death
|
||||
SPELL_WATER_GLOBULE = 54268, // casted when hit by visual
|
||||
SPELL_CREATE_GLOBULE_VISUAL = 54260, // tar 25
|
||||
SPELL_SPLASH = 59516, // casted by globule upon death
|
||||
SPELL_WATER_GLOBULE = 54268, // casted when hit by visual
|
||||
SPELL_CREATE_GLOBULE_VISUAL = 54260, // tar 25
|
||||
};
|
||||
|
||||
#define SPELL_WATER_BLAST DUNGEON_MODE(SPELL_WATER_BLAST_N, SPELL_WATER_BLAST_H)
|
||||
#define SPELL_WATER_BOLT_VOLLEY DUNGEON_MODE(SPELL_WATER_BOLT_VOLLEY_N, SPELL_WATER_BOLT_VOLLEY_H)
|
||||
#define SPELL_FRENZY DUNGEON_MODE(SPELL_FRENZY_N, SPELL_FRENZY_H)
|
||||
#define SPELL_WATER_BLAST DUNGEON_MODE(SPELL_WATER_BLAST_N, SPELL_WATER_BLAST_H)
|
||||
#define SPELL_WATER_BOLT_VOLLEY DUNGEON_MODE(SPELL_WATER_BOLT_VOLLEY_N, SPELL_WATER_BOLT_VOLLEY_H)
|
||||
#define SPELL_FRENZY DUNGEON_MODE(SPELL_FRENZY_N, SPELL_FRENZY_H)
|
||||
|
||||
enum eEvents
|
||||
{
|
||||
EVENT_SPELL_WATER_BOLT_VOLLEY = 1,
|
||||
EVENT_SPELL_WATER_BOLT_VOLLEY = 1,
|
||||
};
|
||||
|
||||
class boss_ichoron : public CreatureScript
|
||||
{
|
||||
public:
|
||||
boss_ichoron() : CreatureScript("boss_ichoron") { }
|
||||
boss_ichoron() : CreatureScript("boss_ichoron") { }
|
||||
|
||||
CreatureAI* GetAI(Creature* pCreature) const
|
||||
{
|
||||
return new boss_ichoronAI (pCreature);
|
||||
}
|
||||
CreatureAI* GetAI(Creature* pCreature) const
|
||||
{
|
||||
return new boss_ichoronAI (pCreature);
|
||||
}
|
||||
|
||||
struct boss_ichoronAI : public ScriptedAI
|
||||
{
|
||||
boss_ichoronAI(Creature *c) : ScriptedAI(c), globules(me)
|
||||
{
|
||||
pInstance = c->GetInstanceScript();
|
||||
}
|
||||
struct boss_ichoronAI : public ScriptedAI
|
||||
{
|
||||
boss_ichoronAI(Creature *c) : ScriptedAI(c), globules(me)
|
||||
{
|
||||
pInstance = c->GetInstanceScript();
|
||||
}
|
||||
|
||||
InstanceScript* pInstance;
|
||||
SummonList globules;
|
||||
bool bIsExploded;
|
||||
bool bIsFrenzy;
|
||||
uint32 uiWaterBoltVolleyTimer;
|
||||
uint32 uiDrainedTimer;
|
||||
InstanceScript* pInstance;
|
||||
SummonList globules;
|
||||
bool bIsExploded;
|
||||
bool bIsFrenzy;
|
||||
uint32 uiWaterBoltVolleyTimer;
|
||||
uint32 uiDrainedTimer;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
globules.DespawnAll();
|
||||
bIsExploded = false;
|
||||
bIsFrenzy = false;
|
||||
uiDrainedTimer = 15000;
|
||||
uiWaterBoltVolleyTimer = urand(7000,12000);
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetDisplayId(me->GetNativeDisplayId());
|
||||
}
|
||||
void Reset()
|
||||
{
|
||||
globules.DespawnAll();
|
||||
bIsExploded = false;
|
||||
bIsFrenzy = false;
|
||||
uiDrainedTimer = 15000;
|
||||
uiWaterBoltVolleyTimer = urand(7000,12000);
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetDisplayId(me->GetNativeDisplayId());
|
||||
}
|
||||
|
||||
void DoAction(int32 param)
|
||||
{
|
||||
if (!me->IsAlive())
|
||||
return;
|
||||
void DoAction(int32 param)
|
||||
{
|
||||
if (!me->IsAlive())
|
||||
return;
|
||||
|
||||
switch(param)
|
||||
{
|
||||
case ACTION_WATER_ELEMENT_HIT:
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_ACHIEV, 0);
|
||||
me->ModifyHealth(int32(me->CountPctFromMaxHealth(1)));
|
||||
if (bIsExploded)
|
||||
DoExplodeCompleted();
|
||||
break;
|
||||
case ACTION_WATER_ELEMENT_KILLED:
|
||||
uint32 damage = me->CountPctFromMaxHealth(3);
|
||||
damage = std::min(damage, me->GetHealth()-1);
|
||||
me->ModifyHealth(-int32(damage));
|
||||
me->LowerPlayerDamageReq(damage);
|
||||
break;
|
||||
}
|
||||
}
|
||||
switch(param)
|
||||
{
|
||||
case ACTION_WATER_ELEMENT_HIT:
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_ACHIEV, 0);
|
||||
me->ModifyHealth(int32(me->CountPctFromMaxHealth(1)));
|
||||
if (bIsExploded)
|
||||
DoExplodeCompleted();
|
||||
break;
|
||||
case ACTION_WATER_ELEMENT_KILLED:
|
||||
uint32 damage = me->CountPctFromMaxHealth(3);
|
||||
damage = std::min(damage, me->GetHealth()-1);
|
||||
me->ModifyHealth(-int32(damage));
|
||||
me->LowerPlayerDamageReq(damage);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void DoExplodeCompleted()
|
||||
{
|
||||
bIsExploded = false;
|
||||
me->RemoveAura(SPELL_DRAINED);
|
||||
if (!HealthBelowPct(25))
|
||||
{
|
||||
Talk(SAY_BUBBLE);
|
||||
me->CastSpell(me, SPELL_PROTECTIVE_BUBBLE, true);
|
||||
}
|
||||
void DoExplodeCompleted()
|
||||
{
|
||||
bIsExploded = false;
|
||||
me->RemoveAura(SPELL_DRAINED);
|
||||
if (!HealthBelowPct(25))
|
||||
{
|
||||
Talk(SAY_BUBBLE);
|
||||
me->CastSpell(me, SPELL_PROTECTIVE_BUBBLE, true);
|
||||
}
|
||||
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetDisplayId(me->GetNativeDisplayId());
|
||||
}
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetDisplayId(me->GetNativeDisplayId());
|
||||
}
|
||||
|
||||
void IchoronDoCastToAllHostilePlayers(uint32 spellId, bool triggered)
|
||||
{
|
||||
Map::PlayerList const &PlayerList = me->GetMap()->GetPlayers();
|
||||
if (PlayerList.isEmpty())
|
||||
return;
|
||||
void IchoronDoCastToAllHostilePlayers(uint32 spellId, bool triggered)
|
||||
{
|
||||
Map::PlayerList const &PlayerList = me->GetMap()->GetPlayers();
|
||||
if (PlayerList.isEmpty())
|
||||
return;
|
||||
|
||||
for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
|
||||
if (Player *plr = i->GetSource())
|
||||
me->CastSpell(plr, spellId, triggered);
|
||||
}
|
||||
for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
|
||||
if (Player *plr = i->GetSource())
|
||||
me->CastSpell(plr, spellId, triggered);
|
||||
}
|
||||
|
||||
void EnterCombat(Unit* /*who*/)
|
||||
{
|
||||
bIsExploded = false;
|
||||
bIsFrenzy = false;
|
||||
uiDrainedTimer = 15000;
|
||||
uiWaterBoltVolleyTimer = urand(7000,12000);
|
||||
DoZoneInCombat();
|
||||
Talk(SAY_AGGRO);
|
||||
me->CastSpell(me, SPELL_PROTECTIVE_BUBBLE, true);
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_ACHIEV, 1);
|
||||
}
|
||||
void EnterCombat(Unit* /*who*/)
|
||||
{
|
||||
bIsExploded = false;
|
||||
bIsFrenzy = false;
|
||||
uiDrainedTimer = 15000;
|
||||
uiWaterBoltVolleyTimer = urand(7000,12000);
|
||||
DoZoneInCombat();
|
||||
Talk(SAY_AGGRO);
|
||||
me->CastSpell(me, SPELL_PROTECTIVE_BUBBLE, true);
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_ACHIEV, 1);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 uiDiff)
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
void UpdateAI(uint32 uiDiff)
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
if (!bIsFrenzy && !bIsExploded && HealthBelowPct(25))
|
||||
{
|
||||
Talk(SAY_ENRAGE);
|
||||
me->CastSpell(me, SPELL_FRENZY, true);
|
||||
bIsFrenzy = true;
|
||||
}
|
||||
if (!bIsFrenzy && !bIsExploded && HealthBelowPct(25))
|
||||
{
|
||||
Talk(SAY_ENRAGE);
|
||||
me->CastSpell(me, SPELL_FRENZY, true);
|
||||
bIsFrenzy = true;
|
||||
}
|
||||
|
||||
if (!bIsFrenzy)
|
||||
{
|
||||
if (!bIsExploded)
|
||||
{
|
||||
if (!me->HasAura(SPELL_PROTECTIVE_BUBBLE))
|
||||
{
|
||||
me->InterruptNonMeleeSpells(false);
|
||||
Talk(SAY_SHATTER);
|
||||
DoZoneInCombat();
|
||||
IchoronDoCastToAllHostilePlayers(SPELL_WATER_BLAST, true);
|
||||
me->CastSpell(me, SPELL_DRAINED, true);
|
||||
bIsExploded = true;
|
||||
uiDrainedTimer = 15000;
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetDisplayId(11686);
|
||||
for (uint8 i=0; i<MAX_SPAWN_LOC; ++i)
|
||||
{
|
||||
float angle = rand_norm()*2*M_PI;
|
||||
Position p1(SpawnLoc[i]), p2(SpawnLoc[i]);
|
||||
p1.m_positionX += 2.5f*cos(angle);
|
||||
p1.m_positionY += 2.5f*sin(angle);
|
||||
p2.m_positionX -= 2.5f*cos(angle);
|
||||
p2.m_positionY -= 2.5f*sin(angle);
|
||||
DoSummon(NPC_ICHOR_GLOBULE, p1, 60000, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN);
|
||||
DoSummon(NPC_ICHOR_GLOBULE, p2, 60000, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (uiDrainedTimer <= uiDiff)
|
||||
DoExplodeCompleted();
|
||||
else
|
||||
{
|
||||
uiDrainedTimer -= uiDiff;
|
||||
if (!bIsFrenzy)
|
||||
{
|
||||
if (!bIsExploded)
|
||||
{
|
||||
if (!me->HasAura(SPELL_PROTECTIVE_BUBBLE))
|
||||
{
|
||||
me->InterruptNonMeleeSpells(false);
|
||||
Talk(SAY_SHATTER);
|
||||
DoZoneInCombat();
|
||||
IchoronDoCastToAllHostilePlayers(SPELL_WATER_BLAST, true);
|
||||
me->CastSpell(me, SPELL_DRAINED, true);
|
||||
bIsExploded = true;
|
||||
uiDrainedTimer = 15000;
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetDisplayId(11686);
|
||||
for (uint8 i=0; i<MAX_SPAWN_LOC; ++i)
|
||||
{
|
||||
float angle = rand_norm()*2*M_PI;
|
||||
Position p1(SpawnLoc[i]), p2(SpawnLoc[i]);
|
||||
p1.m_positionX += 2.5f*cos(angle);
|
||||
p1.m_positionY += 2.5f*sin(angle);
|
||||
p2.m_positionX -= 2.5f*cos(angle);
|
||||
p2.m_positionY -= 2.5f*sin(angle);
|
||||
DoSummon(NPC_ICHOR_GLOBULE, p1, 60000, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN);
|
||||
DoSummon(NPC_ICHOR_GLOBULE, p2, 60000, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (uiDrainedTimer <= uiDiff)
|
||||
DoExplodeCompleted();
|
||||
else
|
||||
{
|
||||
uiDrainedTimer -= uiDiff;
|
||||
|
||||
bool bIsWaterElementsAlive = false;
|
||||
if (!globules.empty())
|
||||
{
|
||||
for (std::list<uint64>::const_iterator itr = globules.begin(); itr != globules.end(); ++itr)
|
||||
if (Creature* pTemp = ObjectAccessor::GetCreature(*me, *itr))
|
||||
if (pTemp->IsAlive())
|
||||
{
|
||||
bIsWaterElementsAlive = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
bool bIsWaterElementsAlive = false;
|
||||
if (!globules.empty())
|
||||
{
|
||||
for (std::list<uint64>::const_iterator itr = globules.begin(); itr != globules.end(); ++itr)
|
||||
if (Creature* pTemp = ObjectAccessor::GetCreature(*me, *itr))
|
||||
if (pTemp->IsAlive())
|
||||
{
|
||||
bIsWaterElementsAlive = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!bIsWaterElementsAlive)
|
||||
DoExplodeCompleted();
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!bIsWaterElementsAlive)
|
||||
DoExplodeCompleted();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!bIsExploded)
|
||||
{
|
||||
if (uiWaterBoltVolleyTimer <= uiDiff)
|
||||
{
|
||||
me->CastSpell((Unit*)NULL, SPELL_WATER_BOLT_VOLLEY, false);
|
||||
uiWaterBoltVolleyTimer = urand(10000, 15000);
|
||||
}
|
||||
else uiWaterBoltVolleyTimer -= uiDiff;
|
||||
}
|
||||
if (!bIsExploded)
|
||||
{
|
||||
if (uiWaterBoltVolleyTimer <= uiDiff)
|
||||
{
|
||||
me->CastSpell((Unit*)NULL, SPELL_WATER_BOLT_VOLLEY, false);
|
||||
uiWaterBoltVolleyTimer = urand(10000, 15000);
|
||||
}
|
||||
else uiWaterBoltVolleyTimer -= uiDiff;
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
void JustSummoned(Creature* pSummoned)
|
||||
{
|
||||
if (pSummoned)
|
||||
{
|
||||
pSummoned->SetSpeed(MOVE_RUN, 0.3f);
|
||||
pSummoned->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING);
|
||||
pSummoned->GetMotionMaster()->MoveFollow(me, 0, 0);
|
||||
me->CastSpell(pSummoned, SPELL_CREATE_GLOBULE_VISUAL, true); // triggered should ignore los
|
||||
globules.Summon(pSummoned);
|
||||
if (pInstance)
|
||||
pInstance->SetData64(DATA_ADD_TRASH_MOB, pSummoned->GetGUID());
|
||||
}
|
||||
}
|
||||
void JustSummoned(Creature* pSummoned)
|
||||
{
|
||||
if (pSummoned)
|
||||
{
|
||||
pSummoned->SetSpeed(MOVE_RUN, 0.3f);
|
||||
pSummoned->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING);
|
||||
pSummoned->GetMotionMaster()->MoveFollow(me, 0, 0);
|
||||
me->CastSpell(pSummoned, SPELL_CREATE_GLOBULE_VISUAL, true); // triggered should ignore los
|
||||
globules.Summon(pSummoned);
|
||||
if (pInstance)
|
||||
pInstance->SetData64(DATA_ADD_TRASH_MOB, pSummoned->GetGUID());
|
||||
}
|
||||
}
|
||||
|
||||
void SummonedCreatureDespawn(Creature *pSummoned)
|
||||
{
|
||||
if (pSummoned)
|
||||
{
|
||||
globules.Despawn(pSummoned);
|
||||
if (pInstance)
|
||||
pInstance->SetData64(DATA_DELETE_TRASH_MOB, pSummoned->GetGUID());
|
||||
}
|
||||
}
|
||||
void SummonedCreatureDespawn(Creature *pSummoned)
|
||||
{
|
||||
if (pSummoned)
|
||||
{
|
||||
globules.Despawn(pSummoned);
|
||||
if (pInstance)
|
||||
pInstance->SetData64(DATA_DELETE_TRASH_MOB, pSummoned->GetGUID());
|
||||
}
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/)
|
||||
{
|
||||
Talk(SAY_DEATH);
|
||||
bIsExploded = false;
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetDisplayId(me->GetNativeDisplayId());
|
||||
globules.DespawnAll();
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_BOSS_DIED, 0);
|
||||
}
|
||||
void JustDied(Unit* /*killer*/)
|
||||
{
|
||||
Talk(SAY_DEATH);
|
||||
bIsExploded = false;
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetDisplayId(me->GetNativeDisplayId());
|
||||
globules.DespawnAll();
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_BOSS_DIED, 0);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit * victim)
|
||||
{
|
||||
if (victim && victim->GetGUID() == me->GetGUID())
|
||||
return;
|
||||
Talk(SAY_SLAY);
|
||||
}
|
||||
void KilledUnit(Unit * victim)
|
||||
{
|
||||
if (victim && victim->GetGUID() == me->GetGUID())
|
||||
return;
|
||||
Talk(SAY_SLAY);
|
||||
}
|
||||
|
||||
void MoveInLineOfSight(Unit* /*who*/) {}
|
||||
void MoveInLineOfSight(Unit* /*who*/) {}
|
||||
|
||||
void EnterEvadeMode()
|
||||
{
|
||||
ScriptedAI::EnterEvadeMode();
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_FAILED, 1);
|
||||
}
|
||||
};
|
||||
void EnterEvadeMode()
|
||||
{
|
||||
ScriptedAI::EnterEvadeMode();
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_FAILED, 1);
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -296,64 +296,64 @@ public:
|
||||
class npc_ichor_globule : public CreatureScript
|
||||
{
|
||||
public:
|
||||
npc_ichor_globule() : CreatureScript("npc_ichor_globule") { }
|
||||
npc_ichor_globule() : CreatureScript("npc_ichor_globule") { }
|
||||
|
||||
CreatureAI* GetAI(Creature* pCreature) const
|
||||
{
|
||||
return new npc_ichor_globuleAI (pCreature);
|
||||
}
|
||||
CreatureAI* GetAI(Creature* pCreature) const
|
||||
{
|
||||
return new npc_ichor_globuleAI (pCreature);
|
||||
}
|
||||
|
||||
struct npc_ichor_globuleAI : public ScriptedAI
|
||||
{
|
||||
npc_ichor_globuleAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = c->GetInstanceScript();
|
||||
uiRangeCheck_Timer = 1000;
|
||||
}
|
||||
struct npc_ichor_globuleAI : public ScriptedAI
|
||||
{
|
||||
npc_ichor_globuleAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = c->GetInstanceScript();
|
||||
uiRangeCheck_Timer = 1000;
|
||||
}
|
||||
|
||||
InstanceScript* pInstance;
|
||||
uint32 uiRangeCheck_Timer;
|
||||
InstanceScript* pInstance;
|
||||
uint32 uiRangeCheck_Timer;
|
||||
|
||||
void SpellHit(Unit* caster, const SpellInfo* spell)
|
||||
{
|
||||
if (spell->Id == SPELL_CREATE_GLOBULE_VISUAL)
|
||||
me->CastSpell(me, SPELL_WATER_GLOBULE, true);
|
||||
}
|
||||
void SpellHit(Unit* caster, const SpellInfo* spell)
|
||||
{
|
||||
if (spell->Id == SPELL_CREATE_GLOBULE_VISUAL)
|
||||
me->CastSpell(me, SPELL_WATER_GLOBULE, true);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 uiDiff)
|
||||
{
|
||||
if (uiRangeCheck_Timer < uiDiff)
|
||||
{
|
||||
if (pInstance)
|
||||
if (Creature* pIchoron = pInstance->instance->GetCreature(pInstance->GetData64(DATA_ICHORON_GUID)))
|
||||
if (me->IsWithinDist(pIchoron, 2.0f , false))
|
||||
{
|
||||
if (pIchoron->AI())
|
||||
pIchoron->AI()->DoAction(ACTION_WATER_ELEMENT_HIT);
|
||||
me->DespawnOrUnsummon();
|
||||
}
|
||||
uiRangeCheck_Timer = 1000;
|
||||
}
|
||||
else uiRangeCheck_Timer -= uiDiff;
|
||||
}
|
||||
void UpdateAI(uint32 uiDiff)
|
||||
{
|
||||
if (uiRangeCheck_Timer < uiDiff)
|
||||
{
|
||||
if (pInstance)
|
||||
if (Creature* pIchoron = pInstance->instance->GetCreature(pInstance->GetData64(DATA_ICHORON_GUID)))
|
||||
if (me->IsWithinDist(pIchoron, 2.0f , false))
|
||||
{
|
||||
if (pIchoron->AI())
|
||||
pIchoron->AI()->DoAction(ACTION_WATER_ELEMENT_HIT);
|
||||
me->DespawnOrUnsummon();
|
||||
}
|
||||
uiRangeCheck_Timer = 1000;
|
||||
}
|
||||
else uiRangeCheck_Timer -= uiDiff;
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/)
|
||||
{
|
||||
me->CastSpell(me, SPELL_SPLASH, true);
|
||||
if (pInstance)
|
||||
if (Creature* pIchoron = pInstance->instance->GetCreature(pInstance->GetData64(DATA_ICHORON_GUID)))
|
||||
if (pIchoron->AI())
|
||||
pIchoron->AI()->DoAction(ACTION_WATER_ELEMENT_KILLED);
|
||||
me->DespawnOrUnsummon(2500);
|
||||
}
|
||||
void JustDied(Unit* /*killer*/)
|
||||
{
|
||||
me->CastSpell(me, SPELL_SPLASH, true);
|
||||
if (pInstance)
|
||||
if (Creature* pIchoron = pInstance->instance->GetCreature(pInstance->GetData64(DATA_ICHORON_GUID)))
|
||||
if (pIchoron->AI())
|
||||
pIchoron->AI()->DoAction(ACTION_WATER_ELEMENT_KILLED);
|
||||
me->DespawnOrUnsummon(2500);
|
||||
}
|
||||
|
||||
void AttackStart(Unit* /*who*/) {}
|
||||
void MoveInLineOfSight(Unit* /*who*/) {}
|
||||
};
|
||||
void AttackStart(Unit* /*who*/) {}
|
||||
void MoveInLineOfSight(Unit* /*who*/) {}
|
||||
};
|
||||
};
|
||||
|
||||
void AddSC_boss_ichoron()
|
||||
{
|
||||
new boss_ichoron();
|
||||
new npc_ichor_globule();
|
||||
new boss_ichoron();
|
||||
new npc_ichor_globule();
|
||||
}
|
||||
|
||||
@@ -8,117 +8,117 @@ REWRITTEN FROM SCRATCH BY PUSSYWIZARD, IT OWNS NOW!
|
||||
|
||||
enum eSpells
|
||||
{
|
||||
SPELL_CAUTERIZING_FLAMES = 59466,
|
||||
SPELL_FIREBOLT_N = 54235,
|
||||
SPELL_FIREBOLT_H = 59468,
|
||||
SPELL_FLAME_BREATH_N = 54282,
|
||||
SPELL_FLAME_BREATH_H = 59469,
|
||||
SPELL_LAVA_BURN_N = 54249,
|
||||
SPELL_LAVA_BURN_H = 59594,
|
||||
SPELL_CAUTERIZING_FLAMES = 59466,
|
||||
SPELL_FIREBOLT_N = 54235,
|
||||
SPELL_FIREBOLT_H = 59468,
|
||||
SPELL_FLAME_BREATH_N = 54282,
|
||||
SPELL_FLAME_BREATH_H = 59469,
|
||||
SPELL_LAVA_BURN_N = 54249,
|
||||
SPELL_LAVA_BURN_H = 59594,
|
||||
};
|
||||
|
||||
#define SPELL_FIREBOLT DUNGEON_MODE(SPELL_FIREBOLT_N, SPELL_FIREBOLT_H)
|
||||
#define SPELL_FLAME_BREATH DUNGEON_MODE(SPELL_FLAME_BREATH_N, SPELL_FLAME_BREATH_H)
|
||||
#define SPELL_LAVA_BURN DUNGEON_MODE(SPELL_LAVA_BURN_N, SPELL_LAVA_BURN_H)
|
||||
#define SPELL_FIREBOLT DUNGEON_MODE(SPELL_FIREBOLT_N, SPELL_FIREBOLT_H)
|
||||
#define SPELL_FLAME_BREATH DUNGEON_MODE(SPELL_FLAME_BREATH_N, SPELL_FLAME_BREATH_H)
|
||||
#define SPELL_LAVA_BURN DUNGEON_MODE(SPELL_LAVA_BURN_N, SPELL_LAVA_BURN_H)
|
||||
|
||||
enum eEvents
|
||||
{
|
||||
EVENT_SPELL_FIREBOLT = 1,
|
||||
EVENT_SPELL_FLAME_BREATH,
|
||||
EVENT_SPELL_LAVA_BURN,
|
||||
EVENT_SPELL_CAUTERIZING_FLAMES,
|
||||
EVENT_SPELL_FIREBOLT = 1,
|
||||
EVENT_SPELL_FLAME_BREATH,
|
||||
EVENT_SPELL_LAVA_BURN,
|
||||
EVENT_SPELL_CAUTERIZING_FLAMES,
|
||||
};
|
||||
|
||||
class boss_lavanthor : public CreatureScript
|
||||
{
|
||||
public:
|
||||
boss_lavanthor() : CreatureScript("boss_lavanthor") { }
|
||||
boss_lavanthor() : CreatureScript("boss_lavanthor") { }
|
||||
|
||||
CreatureAI* GetAI(Creature* pCreature) const
|
||||
{
|
||||
return new boss_lavanthorAI (pCreature);
|
||||
}
|
||||
CreatureAI* GetAI(Creature* pCreature) const
|
||||
{
|
||||
return new boss_lavanthorAI (pCreature);
|
||||
}
|
||||
|
||||
struct boss_lavanthorAI : public ScriptedAI
|
||||
{
|
||||
boss_lavanthorAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = c->GetInstanceScript();
|
||||
}
|
||||
struct boss_lavanthorAI : public ScriptedAI
|
||||
{
|
||||
boss_lavanthorAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = c->GetInstanceScript();
|
||||
}
|
||||
|
||||
InstanceScript* pInstance;
|
||||
EventMap events;
|
||||
InstanceScript* pInstance;
|
||||
EventMap events;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
events.Reset();
|
||||
}
|
||||
void Reset()
|
||||
{
|
||||
events.Reset();
|
||||
}
|
||||
|
||||
void EnterCombat(Unit* /*who*/)
|
||||
{
|
||||
DoZoneInCombat();
|
||||
events.Reset();
|
||||
events.RescheduleEvent(EVENT_SPELL_FIREBOLT, 1000);
|
||||
events.RescheduleEvent(EVENT_SPELL_FLAME_BREATH, 5000);
|
||||
events.RescheduleEvent(EVENT_SPELL_LAVA_BURN, 10000);
|
||||
if (IsHeroic())
|
||||
events.RescheduleEvent(EVENT_SPELL_CAUTERIZING_FLAMES, 3000);
|
||||
}
|
||||
void EnterCombat(Unit* /*who*/)
|
||||
{
|
||||
DoZoneInCombat();
|
||||
events.Reset();
|
||||
events.RescheduleEvent(EVENT_SPELL_FIREBOLT, 1000);
|
||||
events.RescheduleEvent(EVENT_SPELL_FLAME_BREATH, 5000);
|
||||
events.RescheduleEvent(EVENT_SPELL_LAVA_BURN, 10000);
|
||||
if (IsHeroic())
|
||||
events.RescheduleEvent(EVENT_SPELL_CAUTERIZING_FLAMES, 3000);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff)
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
void UpdateAI(uint32 diff)
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
events.Update(diff);
|
||||
events.Update(diff);
|
||||
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
|
||||
switch(events.GetEvent())
|
||||
{
|
||||
case 0:
|
||||
break;
|
||||
case EVENT_SPELL_FIREBOLT:
|
||||
me->CastSpell(me->GetVictim(), SPELL_FIREBOLT, false);
|
||||
events.RepeatEvent(urand(5000,13000));
|
||||
break;
|
||||
case EVENT_SPELL_FLAME_BREATH:
|
||||
me->CastSpell(me->GetVictim(), SPELL_FLAME_BREATH, false);
|
||||
events.RepeatEvent(urand(10000,15000));
|
||||
break;
|
||||
case EVENT_SPELL_LAVA_BURN:
|
||||
me->CastSpell(me->GetVictim(), SPELL_LAVA_BURN, false);
|
||||
events.RepeatEvent(urand(14000,20000));
|
||||
break;
|
||||
case EVENT_SPELL_CAUTERIZING_FLAMES:
|
||||
me->CastSpell((Unit*)NULL, SPELL_FLAME_BREATH, false);
|
||||
events.RepeatEvent(urand(10000,16000));
|
||||
break;
|
||||
}
|
||||
switch(events.GetEvent())
|
||||
{
|
||||
case 0:
|
||||
break;
|
||||
case EVENT_SPELL_FIREBOLT:
|
||||
me->CastSpell(me->GetVictim(), SPELL_FIREBOLT, false);
|
||||
events.RepeatEvent(urand(5000,13000));
|
||||
break;
|
||||
case EVENT_SPELL_FLAME_BREATH:
|
||||
me->CastSpell(me->GetVictim(), SPELL_FLAME_BREATH, false);
|
||||
events.RepeatEvent(urand(10000,15000));
|
||||
break;
|
||||
case EVENT_SPELL_LAVA_BURN:
|
||||
me->CastSpell(me->GetVictim(), SPELL_LAVA_BURN, false);
|
||||
events.RepeatEvent(urand(14000,20000));
|
||||
break;
|
||||
case EVENT_SPELL_CAUTERIZING_FLAMES:
|
||||
me->CastSpell((Unit*)NULL, SPELL_FLAME_BREATH, false);
|
||||
events.RepeatEvent(urand(10000,16000));
|
||||
break;
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/)
|
||||
{
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_BOSS_DIED, 0);
|
||||
}
|
||||
void JustDied(Unit* /*killer*/)
|
||||
{
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_BOSS_DIED, 0);
|
||||
}
|
||||
|
||||
void MoveInLineOfSight(Unit* /*who*/) {}
|
||||
void MoveInLineOfSight(Unit* /*who*/) {}
|
||||
|
||||
void EnterEvadeMode()
|
||||
{
|
||||
ScriptedAI::EnterEvadeMode();
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_FAILED, 1);
|
||||
}
|
||||
};
|
||||
void EnterEvadeMode()
|
||||
{
|
||||
ScriptedAI::EnterEvadeMode();
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_FAILED, 1);
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
void AddSC_boss_lavanthor()
|
||||
{
|
||||
new boss_lavanthor();
|
||||
new boss_lavanthor();
|
||||
}
|
||||
|
||||
@@ -10,145 +10,145 @@ REWRITTEN FROM SCRATCH BY PUSSYWIZARD, IT OWNS NOW!
|
||||
|
||||
enum eSpells
|
||||
{
|
||||
SPELL_RAY_OF_SUFFERING_N = 54442,
|
||||
SPELL_RAY_OF_SUFFERING_H = 59524,
|
||||
//SPELL_RAY_OF_SUFFERING_TRIGGERED = 54417,
|
||||
SPELL_RAY_OF_SUFFERING_N = 54442,
|
||||
SPELL_RAY_OF_SUFFERING_H = 59524,
|
||||
//SPELL_RAY_OF_SUFFERING_TRIGGERED = 54417,
|
||||
|
||||
SPELL_RAY_OF_PAIN_N = 54438,
|
||||
SPELL_RAY_OF_PAIN_H = 59523,
|
||||
//SPELL_RAY_OF_PAIN_TRIGGERED_N = 54416,
|
||||
//SPELL_RAY_OF_PAIN_TRIGGERED_H = 59525,
|
||||
SPELL_RAY_OF_PAIN_N = 54438,
|
||||
SPELL_RAY_OF_PAIN_H = 59523,
|
||||
//SPELL_RAY_OF_PAIN_TRIGGERED_N = 54416,
|
||||
//SPELL_RAY_OF_PAIN_TRIGGERED_H = 59525,
|
||||
|
||||
SPELL_CORROSIVE_SALIVA = 54527,
|
||||
SPELL_OPTIC_LINK = 54396,
|
||||
SPELL_CORROSIVE_SALIVA = 54527,
|
||||
SPELL_OPTIC_LINK = 54396,
|
||||
};
|
||||
|
||||
#define SPELL_RAY_OF_SUFFERING DUNGEON_MODE(SPELL_RAY_OF_SUFFERING_N, SPELL_RAY_OF_SUFFERING_H)
|
||||
#define SPELL_RAY_OF_PAIN DUNGEON_MODE(SPELL_RAY_OF_PAIN_N, SPELL_RAY_OF_PAIN_H)
|
||||
#define SPELL_RAY_OF_SUFFERING DUNGEON_MODE(SPELL_RAY_OF_SUFFERING_N, SPELL_RAY_OF_SUFFERING_H)
|
||||
#define SPELL_RAY_OF_PAIN DUNGEON_MODE(SPELL_RAY_OF_PAIN_N, SPELL_RAY_OF_PAIN_H)
|
||||
|
||||
enum eEvents
|
||||
{
|
||||
EVENT_SPELL_CORROSIVE_SALIVA = 1,
|
||||
EVENT_SPELL_OPTIC_LINK,
|
||||
EVENT_SPELL_CORROSIVE_SALIVA = 1,
|
||||
EVENT_SPELL_OPTIC_LINK,
|
||||
};
|
||||
|
||||
class boss_moragg : public CreatureScript
|
||||
{
|
||||
public:
|
||||
boss_moragg() : CreatureScript("boss_moragg") { }
|
||||
boss_moragg() : CreatureScript("boss_moragg") { }
|
||||
|
||||
CreatureAI* GetAI(Creature* pCreature) const
|
||||
{
|
||||
return new boss_moraggAI (pCreature);
|
||||
}
|
||||
CreatureAI* GetAI(Creature* pCreature) const
|
||||
{
|
||||
return new boss_moraggAI (pCreature);
|
||||
}
|
||||
|
||||
struct boss_moraggAI : public ScriptedAI
|
||||
{
|
||||
boss_moraggAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = c->GetInstanceScript();
|
||||
}
|
||||
struct boss_moraggAI : public ScriptedAI
|
||||
{
|
||||
boss_moraggAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = c->GetInstanceScript();
|
||||
}
|
||||
|
||||
InstanceScript* pInstance;
|
||||
EventMap events;
|
||||
InstanceScript* pInstance;
|
||||
EventMap events;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
events.Reset();
|
||||
}
|
||||
void Reset()
|
||||
{
|
||||
events.Reset();
|
||||
}
|
||||
|
||||
void EnterCombat(Unit* /*who*/)
|
||||
{
|
||||
DoZoneInCombat();
|
||||
me->CastSpell(me, SPELL_RAY_OF_SUFFERING, true);
|
||||
me->CastSpell(me, SPELL_RAY_OF_PAIN, true);
|
||||
events.Reset();
|
||||
events.RescheduleEvent(EVENT_SPELL_CORROSIVE_SALIVA, urand(4000,6000));
|
||||
events.RescheduleEvent(EVENT_SPELL_OPTIC_LINK, urand(10000,11000));
|
||||
}
|
||||
void EnterCombat(Unit* /*who*/)
|
||||
{
|
||||
DoZoneInCombat();
|
||||
me->CastSpell(me, SPELL_RAY_OF_SUFFERING, true);
|
||||
me->CastSpell(me, SPELL_RAY_OF_PAIN, true);
|
||||
events.Reset();
|
||||
events.RescheduleEvent(EVENT_SPELL_CORROSIVE_SALIVA, urand(4000,6000));
|
||||
events.RescheduleEvent(EVENT_SPELL_OPTIC_LINK, urand(10000,11000));
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff)
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
void UpdateAI(uint32 diff)
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
events.Update(diff);
|
||||
events.Update(diff);
|
||||
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
|
||||
switch(events.GetEvent())
|
||||
{
|
||||
case 0:
|
||||
break;
|
||||
case EVENT_SPELL_CORROSIVE_SALIVA:
|
||||
me->CastSpell(me->GetVictim(), SPELL_CORROSIVE_SALIVA, false);
|
||||
events.RepeatEvent(urand(8000,10000));
|
||||
break;
|
||||
case EVENT_SPELL_OPTIC_LINK:
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_FARTHEST, 0, 40.0f, true))
|
||||
{
|
||||
me->CastSpell(target, SPELL_OPTIC_LINK, false);
|
||||
events.RepeatEvent(urand(18000,21000));
|
||||
}
|
||||
else
|
||||
events.RepeatEvent(5000);
|
||||
break;
|
||||
}
|
||||
switch(events.GetEvent())
|
||||
{
|
||||
case 0:
|
||||
break;
|
||||
case EVENT_SPELL_CORROSIVE_SALIVA:
|
||||
me->CastSpell(me->GetVictim(), SPELL_CORROSIVE_SALIVA, false);
|
||||
events.RepeatEvent(urand(8000,10000));
|
||||
break;
|
||||
case EVENT_SPELL_OPTIC_LINK:
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_FARTHEST, 0, 40.0f, true))
|
||||
{
|
||||
me->CastSpell(target, SPELL_OPTIC_LINK, false);
|
||||
events.RepeatEvent(urand(18000,21000));
|
||||
}
|
||||
else
|
||||
events.RepeatEvent(5000);
|
||||
break;
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/)
|
||||
{
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_BOSS_DIED, 0);
|
||||
}
|
||||
void JustDied(Unit* /*killer*/)
|
||||
{
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_BOSS_DIED, 0);
|
||||
}
|
||||
|
||||
void MoveInLineOfSight(Unit* /*who*/) {}
|
||||
void MoveInLineOfSight(Unit* /*who*/) {}
|
||||
|
||||
void EnterEvadeMode()
|
||||
{
|
||||
ScriptedAI::EnterEvadeMode();
|
||||
events.Reset();
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_FAILED, 1);
|
||||
}
|
||||
};
|
||||
void EnterEvadeMode()
|
||||
{
|
||||
ScriptedAI::EnterEvadeMode();
|
||||
events.Reset();
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_FAILED, 1);
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
class spell_optic_link : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_optic_link() : SpellScriptLoader("spell_optic_link") { }
|
||||
spell_optic_link() : SpellScriptLoader("spell_optic_link") { }
|
||||
|
||||
class spell_optic_linkAuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_optic_linkAuraScript)
|
||||
class spell_optic_linkAuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_optic_linkAuraScript)
|
||||
|
||||
void HandleEffectPeriodic(AuraEffect const * aurEff)
|
||||
{
|
||||
if (Unit* target = GetTarget())
|
||||
if (Unit* caster = GetCaster())
|
||||
if (GetAura() && GetAura()->GetEffect(0))
|
||||
GetAura()->GetEffect(0)->SetAmount(aurEff->GetSpellInfo()->Effects[EFFECT_0].BasePoints+(((int32)target->GetExactDist(caster))*25)+(aurEff->GetTickNumber()*100));
|
||||
}
|
||||
void HandleEffectPeriodic(AuraEffect const * aurEff)
|
||||
{
|
||||
if (Unit* target = GetTarget())
|
||||
if (Unit* caster = GetCaster())
|
||||
if (GetAura() && GetAura()->GetEffect(0))
|
||||
GetAura()->GetEffect(0)->SetAmount(aurEff->GetSpellInfo()->Effects[EFFECT_0].BasePoints+(((int32)target->GetExactDist(caster))*25)+(aurEff->GetTickNumber()*100));
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
OnEffectPeriodic += AuraEffectPeriodicFn(spell_optic_linkAuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE);
|
||||
}
|
||||
};
|
||||
void Register()
|
||||
{
|
||||
OnEffectPeriodic += AuraEffectPeriodicFn(spell_optic_linkAuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript *GetAuraScript() const
|
||||
{
|
||||
return new spell_optic_linkAuraScript();
|
||||
}
|
||||
AuraScript *GetAuraScript() const
|
||||
{
|
||||
return new spell_optic_linkAuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_moragg()
|
||||
{
|
||||
new boss_moragg();
|
||||
new spell_optic_link();
|
||||
new boss_moragg();
|
||||
new spell_optic_link();
|
||||
}
|
||||
|
||||
@@ -19,165 +19,165 @@ enum Yells
|
||||
|
||||
enum eSpells
|
||||
{
|
||||
SPELL_ARCANE_BARRAGE_VOLLEY_N = 54202,
|
||||
SPELL_ARCANE_BARRAGE_VOLLEY_H = 59483,
|
||||
SPELL_ARCANE_BUFFET_N = 54226,
|
||||
SPELL_ARCANE_BUFFET_H = 59485,
|
||||
SPELL_SUMMON_ETHEREAL_SPHERE_1 = 54102,
|
||||
SPELL_SUMMON_ETHEREAL_SPHERE_2 = 54137,
|
||||
SPELL_SUMMON_ETHEREAL_SPHERE_3 = 54138,
|
||||
SPELL_ARCANE_BARRAGE_VOLLEY_N = 54202,
|
||||
SPELL_ARCANE_BARRAGE_VOLLEY_H = 59483,
|
||||
SPELL_ARCANE_BUFFET_N = 54226,
|
||||
SPELL_ARCANE_BUFFET_H = 59485,
|
||||
SPELL_SUMMON_ETHEREAL_SPHERE_1 = 54102,
|
||||
SPELL_SUMMON_ETHEREAL_SPHERE_2 = 54137,
|
||||
SPELL_SUMMON_ETHEREAL_SPHERE_3 = 54138,
|
||||
|
||||
SPELL_ARCANE_POWER_N = 54160,
|
||||
SPELL_ARCANE_POWER_H = 59474,
|
||||
//SPELL_SUMMON_PLAYERS = 54164, // not used
|
||||
//SPELL_POWER_BALL_VISUAL = 54141,
|
||||
SPELL_ARCANE_POWER_N = 54160,
|
||||
SPELL_ARCANE_POWER_H = 59474,
|
||||
//SPELL_SUMMON_PLAYERS = 54164, // not used
|
||||
//SPELL_POWER_BALL_VISUAL = 54141,
|
||||
};
|
||||
|
||||
#define SPELL_ARCANE_BARRAGE_VOLLEY DUNGEON_MODE(SPELL_ARCANE_BARRAGE_VOLLEY_N, SPELL_ARCANE_BARRAGE_VOLLEY_H)
|
||||
#define SPELL_ARCANE_BUFFET DUNGEON_MODE(SPELL_ARCANE_BUFFET_N, SPELL_ARCANE_BUFFET_H)
|
||||
#define SPELL_ARCANE_POWER DUNGEON_MODE(SPELL_ARCANE_POWER_N, SPELL_ARCANE_POWER_H)
|
||||
#define SPELL_ARCANE_BARRAGE_VOLLEY DUNGEON_MODE(SPELL_ARCANE_BARRAGE_VOLLEY_N, SPELL_ARCANE_BARRAGE_VOLLEY_H)
|
||||
#define SPELL_ARCANE_BUFFET DUNGEON_MODE(SPELL_ARCANE_BUFFET_N, SPELL_ARCANE_BUFFET_H)
|
||||
#define SPELL_ARCANE_POWER DUNGEON_MODE(SPELL_ARCANE_POWER_N, SPELL_ARCANE_POWER_H)
|
||||
|
||||
enum eEvents
|
||||
{
|
||||
EVENT_SPELL_ARCANE_BARRAGE_VOLLEY = 1,
|
||||
EVENT_SPELL_ARCANE_BUFFET,
|
||||
EVENT_SUMMON_SPHERES,
|
||||
EVENT_CHECK_DISTANCE,
|
||||
EVENT_SPELL_ARCANE_BARRAGE_VOLLEY = 1,
|
||||
EVENT_SPELL_ARCANE_BUFFET,
|
||||
EVENT_SUMMON_SPHERES,
|
||||
EVENT_CHECK_DISTANCE,
|
||||
};
|
||||
|
||||
class boss_xevozz : public CreatureScript
|
||||
{
|
||||
public:
|
||||
boss_xevozz() : CreatureScript("boss_xevozz") { }
|
||||
boss_xevozz() : CreatureScript("boss_xevozz") { }
|
||||
|
||||
CreatureAI* GetAI(Creature* pCreature) const
|
||||
{
|
||||
return new boss_xevozzAI (pCreature);
|
||||
}
|
||||
CreatureAI* GetAI(Creature* pCreature) const
|
||||
{
|
||||
return new boss_xevozzAI (pCreature);
|
||||
}
|
||||
|
||||
struct boss_xevozzAI : public ScriptedAI
|
||||
{
|
||||
boss_xevozzAI(Creature *c) : ScriptedAI(c), spheres(me)
|
||||
{
|
||||
pInstance = c->GetInstanceScript();
|
||||
}
|
||||
struct boss_xevozzAI : public ScriptedAI
|
||||
{
|
||||
boss_xevozzAI(Creature *c) : ScriptedAI(c), spheres(me)
|
||||
{
|
||||
pInstance = c->GetInstanceScript();
|
||||
}
|
||||
|
||||
InstanceScript* pInstance;
|
||||
EventMap events;
|
||||
SummonList spheres;
|
||||
InstanceScript* pInstance;
|
||||
EventMap events;
|
||||
SummonList spheres;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
events.Reset();
|
||||
spheres.DespawnAll();
|
||||
}
|
||||
void Reset()
|
||||
{
|
||||
events.Reset();
|
||||
spheres.DespawnAll();
|
||||
}
|
||||
|
||||
void EnterCombat(Unit* /*who*/)
|
||||
{
|
||||
Talk(SAY_AGGRO);
|
||||
DoZoneInCombat();
|
||||
events.Reset();
|
||||
events.RescheduleEvent(EVENT_SPELL_ARCANE_BARRAGE_VOLLEY, urand(16000,20000));
|
||||
events.RescheduleEvent(EVENT_SUMMON_SPHERES, 10000);
|
||||
}
|
||||
void EnterCombat(Unit* /*who*/)
|
||||
{
|
||||
Talk(SAY_AGGRO);
|
||||
DoZoneInCombat();
|
||||
events.Reset();
|
||||
events.RescheduleEvent(EVENT_SPELL_ARCANE_BARRAGE_VOLLEY, urand(16000,20000));
|
||||
events.RescheduleEvent(EVENT_SUMMON_SPHERES, 10000);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff)
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
void UpdateAI(uint32 diff)
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
events.Update(diff);
|
||||
events.Update(diff);
|
||||
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
|
||||
switch(events.GetEvent())
|
||||
{
|
||||
case 0:
|
||||
break;
|
||||
case EVENT_SPELL_ARCANE_BARRAGE_VOLLEY:
|
||||
me->CastSpell((Unit*)NULL, SPELL_ARCANE_BARRAGE_VOLLEY, false);
|
||||
events.RepeatEvent(20000);
|
||||
break;
|
||||
case EVENT_SPELL_ARCANE_BUFFET:
|
||||
me->CastSpell(me->GetVictim(), SPELL_ARCANE_BUFFET, false);
|
||||
events.PopEvent();
|
||||
break;
|
||||
case EVENT_SUMMON_SPHERES:
|
||||
{
|
||||
Talk(SAY_SUMMON_ENERGY);
|
||||
spheres.DespawnAll();
|
||||
uint32 entry1 = RAND(SPELL_SUMMON_ETHEREAL_SPHERE_1, SPELL_SUMMON_ETHEREAL_SPHERE_2, SPELL_SUMMON_ETHEREAL_SPHERE_3);
|
||||
me->CastSpell((Unit*)NULL, entry1, true);
|
||||
if (IsHeroic())
|
||||
{
|
||||
uint32 entry2;
|
||||
do { entry2 = RAND(SPELL_SUMMON_ETHEREAL_SPHERE_1, SPELL_SUMMON_ETHEREAL_SPHERE_2, SPELL_SUMMON_ETHEREAL_SPHERE_3); } while (entry1 == entry2);
|
||||
me->CastSpell((Unit*)NULL, entry2, true);
|
||||
}
|
||||
events.RepeatEvent(45000);
|
||||
events.RescheduleEvent(EVENT_SPELL_ARCANE_BUFFET, 5000);
|
||||
events.RescheduleEvent(EVENT_CHECK_DISTANCE, 6000);
|
||||
}
|
||||
break;
|
||||
case EVENT_CHECK_DISTANCE:
|
||||
{
|
||||
bool found = false;
|
||||
if (pInstance)
|
||||
for (std::list<uint64>::iterator itr = spheres.begin(); itr != spheres.end(); ++itr)
|
||||
if (Creature* c = pInstance->instance->GetCreature(*itr))
|
||||
if (me->GetDistance(c) < 3.0f)
|
||||
{
|
||||
c->CastSpell(me, SPELL_ARCANE_POWER, false);
|
||||
c->DespawnOrUnsummon(8000);
|
||||
found = true;
|
||||
}
|
||||
if (found)
|
||||
{
|
||||
Talk(SAY_CHARGED);
|
||||
events.RepeatEvent(9000);
|
||||
events.RescheduleEvent(EVENT_SUMMON_SPHERES, 10000);
|
||||
}
|
||||
else
|
||||
events.RepeatEvent(2000);
|
||||
}
|
||||
break;
|
||||
}
|
||||
switch(events.GetEvent())
|
||||
{
|
||||
case 0:
|
||||
break;
|
||||
case EVENT_SPELL_ARCANE_BARRAGE_VOLLEY:
|
||||
me->CastSpell((Unit*)NULL, SPELL_ARCANE_BARRAGE_VOLLEY, false);
|
||||
events.RepeatEvent(20000);
|
||||
break;
|
||||
case EVENT_SPELL_ARCANE_BUFFET:
|
||||
me->CastSpell(me->GetVictim(), SPELL_ARCANE_BUFFET, false);
|
||||
events.PopEvent();
|
||||
break;
|
||||
case EVENT_SUMMON_SPHERES:
|
||||
{
|
||||
Talk(SAY_SUMMON_ENERGY);
|
||||
spheres.DespawnAll();
|
||||
uint32 entry1 = RAND(SPELL_SUMMON_ETHEREAL_SPHERE_1, SPELL_SUMMON_ETHEREAL_SPHERE_2, SPELL_SUMMON_ETHEREAL_SPHERE_3);
|
||||
me->CastSpell((Unit*)NULL, entry1, true);
|
||||
if (IsHeroic())
|
||||
{
|
||||
uint32 entry2;
|
||||
do { entry2 = RAND(SPELL_SUMMON_ETHEREAL_SPHERE_1, SPELL_SUMMON_ETHEREAL_SPHERE_2, SPELL_SUMMON_ETHEREAL_SPHERE_3); } while (entry1 == entry2);
|
||||
me->CastSpell((Unit*)NULL, entry2, true);
|
||||
}
|
||||
events.RepeatEvent(45000);
|
||||
events.RescheduleEvent(EVENT_SPELL_ARCANE_BUFFET, 5000);
|
||||
events.RescheduleEvent(EVENT_CHECK_DISTANCE, 6000);
|
||||
}
|
||||
break;
|
||||
case EVENT_CHECK_DISTANCE:
|
||||
{
|
||||
bool found = false;
|
||||
if (pInstance)
|
||||
for (std::list<uint64>::iterator itr = spheres.begin(); itr != spheres.end(); ++itr)
|
||||
if (Creature* c = pInstance->instance->GetCreature(*itr))
|
||||
if (me->GetDistance(c) < 3.0f)
|
||||
{
|
||||
c->CastSpell(me, SPELL_ARCANE_POWER, false);
|
||||
c->DespawnOrUnsummon(8000);
|
||||
found = true;
|
||||
}
|
||||
if (found)
|
||||
{
|
||||
Talk(SAY_CHARGED);
|
||||
events.RepeatEvent(9000);
|
||||
events.RescheduleEvent(EVENT_SUMMON_SPHERES, 10000);
|
||||
}
|
||||
else
|
||||
events.RepeatEvent(2000);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
void JustSummoned(Creature* pSummoned)
|
||||
{
|
||||
if (pSummoned)
|
||||
{
|
||||
pSummoned->GetMotionMaster()->MoveFollow(me, 0.0f, 0.0f);
|
||||
pSummoned->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING);
|
||||
spheres.Summon(pSummoned);
|
||||
if (pInstance)
|
||||
pInstance->SetData64(DATA_ADD_TRASH_MOB, pSummoned->GetGUID());
|
||||
}
|
||||
if (pSummoned)
|
||||
{
|
||||
pSummoned->GetMotionMaster()->MoveFollow(me, 0.0f, 0.0f);
|
||||
pSummoned->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING);
|
||||
spheres.Summon(pSummoned);
|
||||
if (pInstance)
|
||||
pInstance->SetData64(DATA_ADD_TRASH_MOB, pSummoned->GetGUID());
|
||||
}
|
||||
}
|
||||
|
||||
void SummonedCreatureDespawn(Creature *pSummoned)
|
||||
{
|
||||
if (pSummoned)
|
||||
{
|
||||
spheres.Despawn(pSummoned);
|
||||
if (pInstance)
|
||||
pInstance->SetData64(DATA_DELETE_TRASH_MOB, pSummoned->GetGUID());
|
||||
}
|
||||
}
|
||||
void SummonedCreatureDespawn(Creature *pSummoned)
|
||||
{
|
||||
if (pSummoned)
|
||||
{
|
||||
spheres.Despawn(pSummoned);
|
||||
if (pInstance)
|
||||
pInstance->SetData64(DATA_DELETE_TRASH_MOB, pSummoned->GetGUID());
|
||||
}
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/)
|
||||
{
|
||||
Talk(SAY_DEATH);
|
||||
spheres.DespawnAll();
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_BOSS_DIED, 0);
|
||||
}
|
||||
void JustDied(Unit* /*killer*/)
|
||||
{
|
||||
Talk(SAY_DEATH);
|
||||
spheres.DespawnAll();
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_BOSS_DIED, 0);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* pVictim)
|
||||
void KilledUnit(Unit* pVictim)
|
||||
{
|
||||
if (pVictim && pVictim->GetGUID() == me->GetGUID())
|
||||
return;
|
||||
@@ -185,20 +185,20 @@ public:
|
||||
Talk(SAY_SLAY);
|
||||
}
|
||||
|
||||
void MoveInLineOfSight(Unit* /*who*/) {}
|
||||
void MoveInLineOfSight(Unit* /*who*/) {}
|
||||
|
||||
void EnterEvadeMode()
|
||||
{
|
||||
ScriptedAI::EnterEvadeMode();
|
||||
events.Reset();
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_FAILED, 1);
|
||||
}
|
||||
};
|
||||
void EnterEvadeMode()
|
||||
{
|
||||
ScriptedAI::EnterEvadeMode();
|
||||
events.Reset();
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_FAILED, 1);
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
void AddSC_boss_xevozz()
|
||||
{
|
||||
new boss_xevozz();
|
||||
new boss_xevozz();
|
||||
}
|
||||
|
||||
@@ -19,230 +19,230 @@ enum Yells
|
||||
|
||||
enum eSpells
|
||||
{
|
||||
SPELL_SHROUD_OF_DARKNESS_N = 54524,
|
||||
SPELL_SHROUD_OF_DARKNESS_H = 59745,
|
||||
SPELL_VOID_SHIFT_N = 54361,
|
||||
SPELL_VOID_SHIFT_H = 59743,
|
||||
SPELL_SUMMON_VOID_SENTRY = 54369,
|
||||
SPELL_SUMMON_VOID_SENTRY_BALL = 58650,
|
||||
SPELL_SHROUD_OF_DARKNESS_N = 54524,
|
||||
SPELL_SHROUD_OF_DARKNESS_H = 59745,
|
||||
SPELL_VOID_SHIFT_N = 54361,
|
||||
SPELL_VOID_SHIFT_H = 59743,
|
||||
SPELL_SUMMON_VOID_SENTRY = 54369,
|
||||
SPELL_SUMMON_VOID_SENTRY_BALL = 58650,
|
||||
|
||||
//SPELL_ZURAMAT_ADD_2_N = 54342,
|
||||
//SPELL_ZURAMAT_ADD_2_H = 59747,
|
||||
//SPELL_ZURAMAT_ADD_2_N = 54342,
|
||||
//SPELL_ZURAMAT_ADD_2_H = 59747,
|
||||
};
|
||||
|
||||
#define NPC_VOID_SENTRY_BALL 29365
|
||||
#define SPELL_SHROUD_OF_DARKNESS DUNGEON_MODE(SPELL_SHROUD_OF_DARKNESS_N, SPELL_SHROUD_OF_DARKNESS_H)
|
||||
#define SPELL_VOID_SHIFT DUNGEON_MODE(SPELL_VOID_SHIFT_N, SPELL_VOID_SHIFT_H)
|
||||
#define NPC_VOID_SENTRY_BALL 29365
|
||||
#define SPELL_SHROUD_OF_DARKNESS DUNGEON_MODE(SPELL_SHROUD_OF_DARKNESS_N, SPELL_SHROUD_OF_DARKNESS_H)
|
||||
#define SPELL_VOID_SHIFT DUNGEON_MODE(SPELL_VOID_SHIFT_N, SPELL_VOID_SHIFT_H)
|
||||
|
||||
enum eEvents
|
||||
{
|
||||
EVENT_SPELL_SHROUD_OF_DARKNESS = 1,
|
||||
EVENT_SPELL_VOID_SHIFT,
|
||||
EVENT_SPELL_SUMMON_VOID_SENTRY,
|
||||
EVENT_SPELL_SHROUD_OF_DARKNESS = 1,
|
||||
EVENT_SPELL_VOID_SHIFT,
|
||||
EVENT_SPELL_SUMMON_VOID_SENTRY,
|
||||
};
|
||||
|
||||
class boss_zuramat : public CreatureScript
|
||||
{
|
||||
public:
|
||||
boss_zuramat() : CreatureScript("boss_zuramat") { }
|
||||
boss_zuramat() : CreatureScript("boss_zuramat") { }
|
||||
|
||||
CreatureAI* GetAI(Creature* pCreature) const
|
||||
{
|
||||
return new boss_zuramatAI (pCreature);
|
||||
}
|
||||
CreatureAI* GetAI(Creature* pCreature) const
|
||||
{
|
||||
return new boss_zuramatAI (pCreature);
|
||||
}
|
||||
|
||||
struct boss_zuramatAI : public ScriptedAI
|
||||
{
|
||||
boss_zuramatAI(Creature *c) : ScriptedAI(c), summons(me)
|
||||
{
|
||||
pInstance = c->GetInstanceScript();
|
||||
}
|
||||
struct boss_zuramatAI : public ScriptedAI
|
||||
{
|
||||
boss_zuramatAI(Creature *c) : ScriptedAI(c), summons(me)
|
||||
{
|
||||
pInstance = c->GetInstanceScript();
|
||||
}
|
||||
|
||||
InstanceScript* pInstance;
|
||||
EventMap events;
|
||||
SummonList summons;
|
||||
InstanceScript* pInstance;
|
||||
EventMap events;
|
||||
SummonList summons;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
events.Reset();
|
||||
summons.DespawnAll();
|
||||
}
|
||||
void Reset()
|
||||
{
|
||||
events.Reset();
|
||||
summons.DespawnAll();
|
||||
}
|
||||
|
||||
void EnterCombat(Unit* /*who*/)
|
||||
{
|
||||
void EnterCombat(Unit* /*who*/)
|
||||
{
|
||||
Talk(SAY_AGGRO);
|
||||
DoZoneInCombat();
|
||||
events.Reset();
|
||||
events.RescheduleEvent(EVENT_SPELL_SHROUD_OF_DARKNESS, urand(5000,7000));
|
||||
events.RescheduleEvent(EVENT_SPELL_VOID_SHIFT, urand(23000,25000));
|
||||
events.RescheduleEvent(EVENT_SPELL_SUMMON_VOID_SENTRY, 10000);
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_ACHIEV, 1);
|
||||
}
|
||||
DoZoneInCombat();
|
||||
events.Reset();
|
||||
events.RescheduleEvent(EVENT_SPELL_SHROUD_OF_DARKNESS, urand(5000,7000));
|
||||
events.RescheduleEvent(EVENT_SPELL_VOID_SHIFT, urand(23000,25000));
|
||||
events.RescheduleEvent(EVENT_SPELL_SUMMON_VOID_SENTRY, 10000);
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_ACHIEV, 1);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff)
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
void UpdateAI(uint32 diff)
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
events.Update(diff);
|
||||
events.Update(diff);
|
||||
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
|
||||
switch(events.GetEvent())
|
||||
{
|
||||
case 0:
|
||||
break;
|
||||
case EVENT_SPELL_SHROUD_OF_DARKNESS:
|
||||
me->CastSpell(me, SPELL_SHROUD_OF_DARKNESS, false);
|
||||
Talk(SAY_SHIELD);
|
||||
events.RepeatEvent(20000);
|
||||
break;
|
||||
case EVENT_SPELL_VOID_SHIFT:
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 60.0f, true))
|
||||
{
|
||||
me->CastSpell(target, SPELL_VOID_SHIFT, false);
|
||||
me->MonsterWhisper("Gaze... into the void.", target->ToPlayer(), false);
|
||||
}
|
||||
events.RepeatEvent(urand(18000,22000));
|
||||
break;
|
||||
case EVENT_SPELL_SUMMON_VOID_SENTRY:
|
||||
me->CastSpell((Unit*)NULL, SPELL_SUMMON_VOID_SENTRY, false);
|
||||
events.RepeatEvent(12000);
|
||||
break;
|
||||
}
|
||||
switch(events.GetEvent())
|
||||
{
|
||||
case 0:
|
||||
break;
|
||||
case EVENT_SPELL_SHROUD_OF_DARKNESS:
|
||||
me->CastSpell(me, SPELL_SHROUD_OF_DARKNESS, false);
|
||||
Talk(SAY_SHIELD);
|
||||
events.RepeatEvent(20000);
|
||||
break;
|
||||
case EVENT_SPELL_VOID_SHIFT:
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 60.0f, true))
|
||||
{
|
||||
me->CastSpell(target, SPELL_VOID_SHIFT, false);
|
||||
me->MonsterWhisper("Gaze... into the void.", target->ToPlayer(), false);
|
||||
}
|
||||
events.RepeatEvent(urand(18000,22000));
|
||||
break;
|
||||
case EVENT_SPELL_SUMMON_VOID_SENTRY:
|
||||
me->CastSpell((Unit*)NULL, SPELL_SUMMON_VOID_SENTRY, false);
|
||||
events.RepeatEvent(12000);
|
||||
break;
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/)
|
||||
{
|
||||
summons.DespawnAll();
|
||||
void JustDied(Unit* /*killer*/)
|
||||
{
|
||||
summons.DespawnAll();
|
||||
Talk(SAY_DEATH);
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_BOSS_DIED, 0);
|
||||
}
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_BOSS_DIED, 0);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit * victim)
|
||||
{
|
||||
if (victim && victim->GetGUID() == me->GetGUID())
|
||||
if (victim && victim->GetGUID() == me->GetGUID())
|
||||
return;
|
||||
|
||||
Talk(SAY_SLAY);
|
||||
}
|
||||
|
||||
void JustSummoned(Creature* pSummoned)
|
||||
{
|
||||
if (pSummoned)
|
||||
{
|
||||
summons.Summon(pSummoned);
|
||||
pSummoned->SetPhaseMask(16, true);
|
||||
if (pInstance)
|
||||
pInstance->SetData64(DATA_ADD_TRASH_MOB, pSummoned->GetGUID());
|
||||
}
|
||||
}
|
||||
void JustSummoned(Creature* pSummoned)
|
||||
{
|
||||
if (pSummoned)
|
||||
{
|
||||
summons.Summon(pSummoned);
|
||||
pSummoned->SetPhaseMask(16, true);
|
||||
if (pInstance)
|
||||
pInstance->SetData64(DATA_ADD_TRASH_MOB, pSummoned->GetGUID());
|
||||
}
|
||||
}
|
||||
|
||||
void SummonedCreatureDespawn(Creature *pSummoned)
|
||||
{
|
||||
if (pSummoned)
|
||||
{
|
||||
summons.Despawn(pSummoned);
|
||||
if (pSummoned->IsAIEnabled)
|
||||
pSummoned->AI()->DoAction(-1337);
|
||||
if (pInstance)
|
||||
pInstance->SetData64(DATA_DELETE_TRASH_MOB, pSummoned->GetGUID());
|
||||
}
|
||||
}
|
||||
void SummonedCreatureDespawn(Creature *pSummoned)
|
||||
{
|
||||
if (pSummoned)
|
||||
{
|
||||
summons.Despawn(pSummoned);
|
||||
if (pSummoned->IsAIEnabled)
|
||||
pSummoned->AI()->DoAction(-1337);
|
||||
if (pInstance)
|
||||
pInstance->SetData64(DATA_DELETE_TRASH_MOB, pSummoned->GetGUID());
|
||||
}
|
||||
}
|
||||
|
||||
void MoveInLineOfSight(Unit* /*who*/) {}
|
||||
void MoveInLineOfSight(Unit* /*who*/) {}
|
||||
|
||||
void EnterEvadeMode()
|
||||
{
|
||||
ScriptedAI::EnterEvadeMode();
|
||||
events.Reset();
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_FAILED, 1);
|
||||
}
|
||||
};
|
||||
void EnterEvadeMode()
|
||||
{
|
||||
ScriptedAI::EnterEvadeMode();
|
||||
events.Reset();
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_FAILED, 1);
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
class npc_vh_void_sentry : public CreatureScript
|
||||
{
|
||||
public:
|
||||
npc_vh_void_sentry() : CreatureScript("npc_vh_void_sentry") { }
|
||||
npc_vh_void_sentry() : CreatureScript("npc_vh_void_sentry") { }
|
||||
|
||||
CreatureAI* GetAI(Creature* pCreature) const
|
||||
{
|
||||
return new npc_vh_void_sentryAI (pCreature);
|
||||
}
|
||||
CreatureAI* GetAI(Creature* pCreature) const
|
||||
{
|
||||
return new npc_vh_void_sentryAI (pCreature);
|
||||
}
|
||||
|
||||
struct npc_vh_void_sentryAI : public NullCreatureAI
|
||||
{
|
||||
npc_vh_void_sentryAI(Creature *c) : NullCreatureAI(c)
|
||||
{
|
||||
pInstance = c->GetInstanceScript();
|
||||
SummonedGUID = 0;
|
||||
checkTimer = 5000;
|
||||
//me->CastSpell(me, SPELL_SUMMON_VOID_SENTRY_BALL, true);
|
||||
if (Creature* pSummoned = me->SummonCreature(NPC_VOID_SENTRY_BALL, *me, TEMPSUMMON_TIMED_DESPAWN, 300000))
|
||||
{
|
||||
pSummoned->SetPhaseMask(1, true);
|
||||
SummonedGUID = pSummoned->GetGUID();
|
||||
pInstance->SetData64(DATA_ADD_TRASH_MOB, pSummoned->GetGUID());
|
||||
}
|
||||
}
|
||||
struct npc_vh_void_sentryAI : public NullCreatureAI
|
||||
{
|
||||
npc_vh_void_sentryAI(Creature *c) : NullCreatureAI(c)
|
||||
{
|
||||
pInstance = c->GetInstanceScript();
|
||||
SummonedGUID = 0;
|
||||
checkTimer = 5000;
|
||||
//me->CastSpell(me, SPELL_SUMMON_VOID_SENTRY_BALL, true);
|
||||
if (Creature* pSummoned = me->SummonCreature(NPC_VOID_SENTRY_BALL, *me, TEMPSUMMON_TIMED_DESPAWN, 300000))
|
||||
{
|
||||
pSummoned->SetPhaseMask(1, true);
|
||||
SummonedGUID = pSummoned->GetGUID();
|
||||
pInstance->SetData64(DATA_ADD_TRASH_MOB, pSummoned->GetGUID());
|
||||
}
|
||||
}
|
||||
|
||||
InstanceScript* pInstance;
|
||||
uint64 SummonedGUID;
|
||||
uint16 checkTimer;
|
||||
InstanceScript* pInstance;
|
||||
uint64 SummonedGUID;
|
||||
uint16 checkTimer;
|
||||
|
||||
void DoAction(int32 a)
|
||||
{
|
||||
if (a == -1337)
|
||||
if (Creature* c = pInstance->instance->GetCreature(SummonedGUID))
|
||||
c->DespawnOrUnsummon();
|
||||
}
|
||||
void DoAction(int32 a)
|
||||
{
|
||||
if (a == -1337)
|
||||
if (Creature* c = pInstance->instance->GetCreature(SummonedGUID))
|
||||
c->DespawnOrUnsummon();
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/)
|
||||
{
|
||||
if (pInstance)
|
||||
{
|
||||
pInstance->SetData(DATA_ACHIEV, 0);
|
||||
if (Creature* c = pInstance->instance->GetCreature(SummonedGUID))
|
||||
c->DespawnOrUnsummon();
|
||||
}
|
||||
me->DespawnOrUnsummon(5000);
|
||||
}
|
||||
void JustDied(Unit* /*killer*/)
|
||||
{
|
||||
if (pInstance)
|
||||
{
|
||||
pInstance->SetData(DATA_ACHIEV, 0);
|
||||
if (Creature* c = pInstance->instance->GetCreature(SummonedGUID))
|
||||
c->DespawnOrUnsummon();
|
||||
}
|
||||
me->DespawnOrUnsummon(5000);
|
||||
}
|
||||
|
||||
void SummonedCreatureDespawn(Creature *pSummoned)
|
||||
{
|
||||
if (pSummoned)
|
||||
pInstance->SetData64(DATA_DELETE_TRASH_MOB, pSummoned->GetGUID());
|
||||
}
|
||||
void SummonedCreatureDespawn(Creature *pSummoned)
|
||||
{
|
||||
if (pSummoned)
|
||||
pInstance->SetData64(DATA_DELETE_TRASH_MOB, pSummoned->GetGUID());
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff)
|
||||
{
|
||||
if (checkTimer <= diff)
|
||||
{
|
||||
checkTimer = 5000;
|
||||
bool good = false;
|
||||
if (me->IsSummon())
|
||||
if (Unit* s = me->ToTempSummon()->GetSummoner())
|
||||
if (s->IsAlive())
|
||||
good = true;
|
||||
if (!good)
|
||||
Unit::Kill(me, me);
|
||||
}
|
||||
else
|
||||
checkTimer -= diff;
|
||||
}
|
||||
};
|
||||
void UpdateAI(uint32 diff)
|
||||
{
|
||||
if (checkTimer <= diff)
|
||||
{
|
||||
checkTimer = 5000;
|
||||
bool good = false;
|
||||
if (me->IsSummon())
|
||||
if (Unit* s = me->ToTempSummon()->GetSummoner())
|
||||
if (s->IsAlive())
|
||||
good = true;
|
||||
if (!good)
|
||||
Unit::Kill(me, me);
|
||||
}
|
||||
else
|
||||
checkTimer -= diff;
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
void AddSC_boss_zuramat()
|
||||
{
|
||||
new boss_zuramat();
|
||||
new npc_vh_void_sentry();
|
||||
new boss_zuramat();
|
||||
new npc_vh_void_sentry();
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -9,127 +9,127 @@ REWRITTEN FROM SCRATCH BY PUSSYWIZARD, IT OWNS NOW!
|
||||
|
||||
enum Creatures
|
||||
{
|
||||
NPC_TELEPORTATION_PORTAL = 31011,
|
||||
NPC_DEFENSE_SYSTEM = 30837,
|
||||
NPC_PRISON_DOOR_SEAL = 30896,
|
||||
NPC_DEFENSE_DUMMY_TARGET = 30857,
|
||||
NPC_TELEPORTATION_PORTAL = 31011,
|
||||
NPC_DEFENSE_SYSTEM = 30837,
|
||||
NPC_PRISON_DOOR_SEAL = 30896,
|
||||
NPC_DEFENSE_DUMMY_TARGET = 30857,
|
||||
|
||||
NPC_SINCLARI = 30658,
|
||||
NPC_VIOLET_HOLD_GUARD = 30659,
|
||||
NPC_SABOTEOUR = 31079,
|
||||
NPC_SINCLARI = 30658,
|
||||
NPC_VIOLET_HOLD_GUARD = 30659,
|
||||
NPC_SABOTEOUR = 31079,
|
||||
|
||||
NPC_XEVOZZ = 29266,
|
||||
NPC_LAVANTHOR = 29312,
|
||||
NPC_ICHORON = 29313,
|
||||
NPC_ZURAMAT = 29314,
|
||||
NPC_EREKEM = 29315,
|
||||
NPC_EREKEM_GUARD = 29395,
|
||||
NPC_MORAGG = 29316,
|
||||
NPC_CYANIGOSA = 31134,
|
||||
NPC_XEVOZZ = 29266,
|
||||
NPC_LAVANTHOR = 29312,
|
||||
NPC_ICHORON = 29313,
|
||||
NPC_ZURAMAT = 29314,
|
||||
NPC_EREKEM = 29315,
|
||||
NPC_EREKEM_GUARD = 29395,
|
||||
NPC_MORAGG = 29316,
|
||||
NPC_CYANIGOSA = 31134,
|
||||
|
||||
NPC_PORTAL_GUARDIAN = 30660,
|
||||
NPC_PORTAL_KEEPER = 30695,
|
||||
NPC_AZURE_INVADER_1 = 30661,
|
||||
NPC_AZURE_INVADER_2 = 30961,
|
||||
NPC_AZURE_SPELLBREAKER_1 = 30662,
|
||||
NPC_AZURE_SPELLBREAKER_2 = 30962,
|
||||
NPC_AZURE_BINDER_1 = 30663,
|
||||
NPC_AZURE_BINDER_2 = 30918,
|
||||
NPC_AZURE_MAGE_SLAYER_1 = 30664,
|
||||
NPC_AZURE_MAGE_SLAYER_2 = 30963,
|
||||
NPC_AZURE_CAPTAIN = 30666,
|
||||
NPC_AZURE_SORCEROR = 30667,
|
||||
NPC_AZURE_RAIDER = 30668,
|
||||
NPC_AZURE_STALKER = 32191,
|
||||
NPC_PORTAL_GUARDIAN = 30660,
|
||||
NPC_PORTAL_KEEPER = 30695,
|
||||
NPC_AZURE_INVADER_1 = 30661,
|
||||
NPC_AZURE_INVADER_2 = 30961,
|
||||
NPC_AZURE_SPELLBREAKER_1 = 30662,
|
||||
NPC_AZURE_SPELLBREAKER_2 = 30962,
|
||||
NPC_AZURE_BINDER_1 = 30663,
|
||||
NPC_AZURE_BINDER_2 = 30918,
|
||||
NPC_AZURE_MAGE_SLAYER_1 = 30664,
|
||||
NPC_AZURE_MAGE_SLAYER_2 = 30963,
|
||||
NPC_AZURE_CAPTAIN = 30666,
|
||||
NPC_AZURE_SORCEROR = 30667,
|
||||
NPC_AZURE_RAIDER = 30668,
|
||||
NPC_AZURE_STALKER = 32191,
|
||||
};
|
||||
|
||||
enum GameObjects
|
||||
{
|
||||
GO_MAIN_DOOR = 191723,
|
||||
GO_XEVOZZ_DOOR = 191556,
|
||||
GO_LAVANTHOR_DOOR = 191566,
|
||||
GO_ICHORON_DOOR = 191722,
|
||||
GO_ZURAMAT_DOOR = 191565,
|
||||
GO_EREKEM_DOOR = 191564,
|
||||
GO_EREKEM_GUARD_1_DOOR = 191563,
|
||||
GO_EREKEM_GUARD_2_DOOR = 191562,
|
||||
GO_MORAGG_DOOR = 191606,
|
||||
GO_INTRO_ACTIVATION_CRYSTAL = 193615,
|
||||
GO_ACTIVATION_CRYSTAL = 193611,
|
||||
GO_MAIN_DOOR = 191723,
|
||||
GO_XEVOZZ_DOOR = 191556,
|
||||
GO_LAVANTHOR_DOOR = 191566,
|
||||
GO_ICHORON_DOOR = 191722,
|
||||
GO_ZURAMAT_DOOR = 191565,
|
||||
GO_EREKEM_DOOR = 191564,
|
||||
GO_EREKEM_GUARD_1_DOOR = 191563,
|
||||
GO_EREKEM_GUARD_2_DOOR = 191562,
|
||||
GO_MORAGG_DOOR = 191606,
|
||||
GO_INTRO_ACTIVATION_CRYSTAL = 193615,
|
||||
GO_ACTIVATION_CRYSTAL = 193611,
|
||||
};
|
||||
|
||||
enum Bosses
|
||||
{
|
||||
BOSS_NONE,
|
||||
BOSS_MORAGG,
|
||||
BOSS_EREKEM,
|
||||
BOSS_ICHORON,
|
||||
BOSS_LAVANTHOR,
|
||||
BOSS_XEVOZZ,
|
||||
BOSS_ZURAMAT,
|
||||
BOSS_CYANIGOSA
|
||||
BOSS_NONE,
|
||||
BOSS_MORAGG,
|
||||
BOSS_EREKEM,
|
||||
BOSS_ICHORON,
|
||||
BOSS_LAVANTHOR,
|
||||
BOSS_XEVOZZ,
|
||||
BOSS_ZURAMAT,
|
||||
BOSS_CYANIGOSA
|
||||
};
|
||||
|
||||
enum VHWorldStates
|
||||
{
|
||||
WORLD_STATE_VH_SHOW = 3816,
|
||||
WORLD_STATE_VH_PRISON_STATE = 3815,
|
||||
WORLD_STATE_VH_WAVE_COUNT = 3810,
|
||||
WORLD_STATE_VH_SHOW = 3816,
|
||||
WORLD_STATE_VH_PRISON_STATE = 3815,
|
||||
WORLD_STATE_VH_WAVE_COUNT = 3810,
|
||||
};
|
||||
|
||||
enum Spells
|
||||
{
|
||||
SPELL_CONTROL_CRYSTAL_ACTIVATION= 57804,
|
||||
SPELL_ARCANE_LIGHTNING = 57912,
|
||||
SPELL_ARCANE_LIGHTNING_VISUAL = 57930,
|
||||
SPELL_PORTAL_CHANNEL = 58012,
|
||||
SPELL_DESTROY_DOOR_SEAL = 58040,
|
||||
SPELL_CYANIGOSA_TRANSFORM = 58668,
|
||||
SPELL_CYANIGOSA_BLUE_AURA = 45870,
|
||||
SPELL_CONTROL_CRYSTAL_ACTIVATION= 57804,
|
||||
SPELL_ARCANE_LIGHTNING = 57912,
|
||||
SPELL_ARCANE_LIGHTNING_VISUAL = 57930,
|
||||
SPELL_PORTAL_CHANNEL = 58012,
|
||||
SPELL_DESTROY_DOOR_SEAL = 58040,
|
||||
SPELL_CYANIGOSA_TRANSFORM = 58668,
|
||||
SPELL_CYANIGOSA_BLUE_AURA = 45870,
|
||||
};
|
||||
|
||||
enum Events
|
||||
{
|
||||
EVENT_CHECK_PLAYERS = 1,
|
||||
EVENT_GUARDS_FALL_BACK,
|
||||
EVENT_GUARDS_DISAPPEAR,
|
||||
EVENT_SINCLARI_FALL_BACK,
|
||||
EVENT_START_ENCOUNTER,
|
||||
EVENT_SUMMON_PORTAL,
|
||||
EVENT_CYANIGOSSA_TRANSFORM,
|
||||
EVENT_CYANIGOSA_ATTACK,
|
||||
EVENT_CHECK_PLAYERS = 1,
|
||||
EVENT_GUARDS_FALL_BACK,
|
||||
EVENT_GUARDS_DISAPPEAR,
|
||||
EVENT_SINCLARI_FALL_BACK,
|
||||
EVENT_START_ENCOUNTER,
|
||||
EVENT_SUMMON_PORTAL,
|
||||
EVENT_CYANIGOSSA_TRANSFORM,
|
||||
EVENT_CYANIGOSA_ATTACK,
|
||||
};
|
||||
|
||||
enum Data
|
||||
{
|
||||
DATA_ACTIVATE_DEFENSE_SYSTEM = 1,
|
||||
DATA_ENCOUNTER_STATUS,
|
||||
DATA_START_INSTANCE,
|
||||
DATA_ADD_TRASH_MOB,
|
||||
DATA_DELETE_TRASH_MOB,
|
||||
DATA_PORTAL_DEFEATED,
|
||||
DATA_WAVE_COUNT,
|
||||
DATA_PORTAL_LOCATION,
|
||||
DATA_TELEPORTATION_PORTAL_GUID,
|
||||
DATA_DOOR_SEAL_GUID,
|
||||
DATA_FIRST_BOSS_NUMBER,
|
||||
DATA_SECOND_BOSS_NUMBER,
|
||||
DATA_RELEASE_BOSS,
|
||||
DATA_DECRASE_DOOR_HEALTH,
|
||||
DATA_BOSS_DIED,
|
||||
DATA_FAILED,
|
||||
DATA_EREKEM_GUID,
|
||||
DATA_EREKEM_GUARD_1_GUID,
|
||||
DATA_EREKEM_GUARD_2_GUID,
|
||||
DATA_ICHORON_GUID,
|
||||
DATA_ACHIEV,
|
||||
DATA_ACTIVATE_DEFENSE_SYSTEM = 1,
|
||||
DATA_ENCOUNTER_STATUS,
|
||||
DATA_START_INSTANCE,
|
||||
DATA_ADD_TRASH_MOB,
|
||||
DATA_DELETE_TRASH_MOB,
|
||||
DATA_PORTAL_DEFEATED,
|
||||
DATA_WAVE_COUNT,
|
||||
DATA_PORTAL_LOCATION,
|
||||
DATA_TELEPORTATION_PORTAL_GUID,
|
||||
DATA_DOOR_SEAL_GUID,
|
||||
DATA_FIRST_BOSS_NUMBER,
|
||||
DATA_SECOND_BOSS_NUMBER,
|
||||
DATA_RELEASE_BOSS,
|
||||
DATA_DECRASE_DOOR_HEALTH,
|
||||
DATA_BOSS_DIED,
|
||||
DATA_FAILED,
|
||||
DATA_EREKEM_GUID,
|
||||
DATA_EREKEM_GUARD_1_GUID,
|
||||
DATA_EREKEM_GUARD_2_GUID,
|
||||
DATA_ICHORON_GUID,
|
||||
DATA_ACHIEV,
|
||||
};
|
||||
|
||||
enum AchievCriteria
|
||||
{
|
||||
CRITERIA_DEFENSELESS = 6803,
|
||||
CRITERIA_A_VOID_DANCE = 7587,
|
||||
CRITERIA_DEHYDRATION = 7320,
|
||||
CRITERIA_DEFENSELESS = 6803,
|
||||
CRITERIA_A_VOID_DANCE = 7587,
|
||||
CRITERIA_DEHYDRATION = 7320,
|
||||
};
|
||||
|
||||
/**************
|
||||
@@ -157,12 +157,12 @@ const uint8 PLocWPCount[6] = {6,9,8,9,6,4};
|
||||
|
||||
const Position PortalLocations[] =
|
||||
{
|
||||
{1877.51f, 850.104f, 44.6599f, 4.78220f},
|
||||
{1918.37f, 853.437f, 47.1624f, 4.12294f},
|
||||
{1936.07f, 803.198f, 53.3749f, 3.12414f},
|
||||
{1927.61f, 758.436f, 51.4533f, 2.20891f},
|
||||
{1890.64f, 753.471f, 48.7224f, 1.71042f},
|
||||
{1908.31f, 809.657f, 38.7037f, 3.08701f},
|
||||
{1877.51f, 850.104f, 44.6599f, 4.78220f},
|
||||
{1918.37f, 853.437f, 47.1624f, 4.12294f},
|
||||
{1936.07f, 803.198f, 53.3749f, 3.12414f},
|
||||
{1927.61f, 758.436f, 51.4533f, 2.20891f},
|
||||
{1890.64f, 753.471f, 48.7224f, 1.71042f},
|
||||
{1908.31f, 809.657f, 38.7037f, 3.08701f},
|
||||
};
|
||||
|
||||
const float FirstPortalTrashWPs [6][3] =
|
||||
|
||||
Reference in New Issue
Block a user