converted all tabs to 4 spaces

This commit is contained in:
Yehonal
2016-06-26 19:23:57 +02:00
parent 52f305111c
commit f6eefedcd5
717 changed files with 132388 additions and 132388 deletions

View File

@@ -9,166 +9,166 @@ REWRITTEN BY XINEF
enum Spells
{
SPELL_BELLOWING_ROAR = 22686,
SPELL_GRIEVOUS_BITE = 48920,
SPELL_MANGLING_SLASH = 48873,
SPELL_FEARSOME_ROAR = 48849,
SPELL_PIERCING_SLASH = 48878,
SPELL_RAPTOR_CALL = 59416
SPELL_BELLOWING_ROAR = 22686,
SPELL_GRIEVOUS_BITE = 48920,
SPELL_MANGLING_SLASH = 48873,
SPELL_FEARSOME_ROAR = 48849,
SPELL_PIERCING_SLASH = 48878,
SPELL_RAPTOR_CALL = 59416
};
enum Misc
{
NPC_DRAKKARI_SCYTHECLAW = 26628,
NPC_DRAKKARI_GUTRIPPER = 26641,
NPC_DRAKKARI_SCYTHECLAW = 26628,
NPC_DRAKKARI_GUTRIPPER = 26641,
SAY_CLAW_EMOTE = 0,
SAY_CLAW_EMOTE = 0,
EVENT_SPELL_BELLOWING_ROAR = 1,
EVENT_SPELL_GRIEVOUS_BITE = 2,
EVENT_SPELL_MANGLING_SLASH = 3,
EVENT_SPELL_FEARSOME_ROAR = 4,
EVENT_SPELL_PIERCING_SLASH = 5,
EVENT_SPELL_RAPTOR_CALL = 6,
EVENT_MENACING_CLAW = 7
EVENT_SPELL_BELLOWING_ROAR = 1,
EVENT_SPELL_GRIEVOUS_BITE = 2,
EVENT_SPELL_MANGLING_SLASH = 3,
EVENT_SPELL_FEARSOME_ROAR = 4,
EVENT_SPELL_PIERCING_SLASH = 5,
EVENT_SPELL_RAPTOR_CALL = 6,
EVENT_MENACING_CLAW = 7
};
class boss_dred : public CreatureScript
{
public:
boss_dred() : CreatureScript("boss_dred") {}
public:
boss_dred() : CreatureScript("boss_dred") {}
CreatureAI *GetAI(Creature *creature) const
{
return GetInstanceAI<boss_dredAI>(creature);
}
CreatureAI *GetAI(Creature *creature) const
{
return GetInstanceAI<boss_dredAI>(creature);
}
struct boss_dredAI : public BossAI
{
boss_dredAI(Creature* creature) : BossAI(creature, DATA_DRED)
{
}
struct boss_dredAI : public BossAI
{
boss_dredAI(Creature* creature) : BossAI(creature, DATA_DRED)
{
}
void Reset()
{
BossAI::Reset();
_raptorCount = 0;
}
void Reset()
{
BossAI::Reset();
_raptorCount = 0;
}
uint32 GetData(uint32 data) const
{
if (data == me->GetEntry())
return uint32(_raptorCount >= _raptorCount);
return 0;
}
uint32 GetData(uint32 data) const
{
if (data == me->GetEntry())
return uint32(_raptorCount >= _raptorCount);
return 0;
}
void SetData(uint32 type, uint32)
{
if (type == me->GetEntry())
++_raptorCount;
}
void SetData(uint32 type, uint32)
{
if (type == me->GetEntry())
++_raptorCount;
}
void EnterCombat(Unit* who)
{
BossAI::EnterCombat(who);
_raptorCount = 0;
void EnterCombat(Unit* who)
{
BossAI::EnterCombat(who);
_raptorCount = 0;
events.ScheduleEvent(EVENT_SPELL_BELLOWING_ROAR, 33000);
events.ScheduleEvent(EVENT_SPELL_GRIEVOUS_BITE, 20000);
events.ScheduleEvent(EVENT_SPELL_MANGLING_SLASH, 18500);
events.ScheduleEvent(EVENT_SPELL_FEARSOME_ROAR, urand(10000,20000));
events.ScheduleEvent(EVENT_SPELL_PIERCING_SLASH, 17000);
if (IsHeroic())
{
events.ScheduleEvent(EVENT_MENACING_CLAW, 21000);
events.ScheduleEvent(EVENT_SPELL_RAPTOR_CALL, urand(20000,25000));
}
}
events.ScheduleEvent(EVENT_SPELL_BELLOWING_ROAR, 33000);
events.ScheduleEvent(EVENT_SPELL_GRIEVOUS_BITE, 20000);
events.ScheduleEvent(EVENT_SPELL_MANGLING_SLASH, 18500);
events.ScheduleEvent(EVENT_SPELL_FEARSOME_ROAR, urand(10000,20000));
events.ScheduleEvent(EVENT_SPELL_PIERCING_SLASH, 17000);
if (IsHeroic())
{
events.ScheduleEvent(EVENT_MENACING_CLAW, 21000);
events.ScheduleEvent(EVENT_SPELL_RAPTOR_CALL, urand(20000,25000));
}
}
void UpdateAI(uint32 diff)
{
if (!UpdateVictim())
return;
void UpdateAI(uint32 diff)
{
if (!UpdateVictim())
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
switch (events.ExecuteEvent())
{
case EVENT_SPELL_BELLOWING_ROAR:
me->CastSpell(me, SPELL_BELLOWING_ROAR, false);
events.ScheduleEvent(EVENT_SPELL_BELLOWING_ROAR, 40000);
break;
case EVENT_SPELL_GRIEVOUS_BITE:
me->CastSpell(me->GetVictim(), SPELL_GRIEVOUS_BITE, false);
events.ScheduleEvent(EVENT_SPELL_GRIEVOUS_BITE, 20000);
break;
case EVENT_SPELL_MANGLING_SLASH:
me->CastSpell(me->GetVictim(), SPELL_MANGLING_SLASH, false);
events.ScheduleEvent(EVENT_SPELL_MANGLING_SLASH, 20000);
break;
case EVENT_SPELL_FEARSOME_ROAR:
me->CastSpell(me, SPELL_FEARSOME_ROAR, false);
events.ScheduleEvent(EVENT_SPELL_FEARSOME_ROAR, 17000);
break;
case EVENT_SPELL_PIERCING_SLASH:
me->CastSpell(me->GetVictim(), SPELL_PIERCING_SLASH, false);
events.ScheduleEvent(EVENT_SPELL_PIERCING_SLASH, 20000);
break;
case EVENT_SPELL_RAPTOR_CALL:
me->CastSpell(me, SPELL_RAPTOR_CALL, false);
events.ScheduleEvent(EVENT_SPELL_RAPTOR_CALL, 20000);
break;
case EVENT_MENACING_CLAW:
Talk(SAY_CLAW_EMOTE);
me->setAttackTimer(BASE_ATTACK, 2000);
me->AttackerStateUpdate(me->GetVictim());
if (me->GetVictim())
me->AttackerStateUpdate(me->GetVictim());
if (me->GetVictim())
me->AttackerStateUpdate(me->GetVictim());
events.ScheduleEvent(EVENT_MENACING_CLAW, 20000);
break;
}
switch (events.ExecuteEvent())
{
case EVENT_SPELL_BELLOWING_ROAR:
me->CastSpell(me, SPELL_BELLOWING_ROAR, false);
events.ScheduleEvent(EVENT_SPELL_BELLOWING_ROAR, 40000);
break;
case EVENT_SPELL_GRIEVOUS_BITE:
me->CastSpell(me->GetVictim(), SPELL_GRIEVOUS_BITE, false);
events.ScheduleEvent(EVENT_SPELL_GRIEVOUS_BITE, 20000);
break;
case EVENT_SPELL_MANGLING_SLASH:
me->CastSpell(me->GetVictim(), SPELL_MANGLING_SLASH, false);
events.ScheduleEvent(EVENT_SPELL_MANGLING_SLASH, 20000);
break;
case EVENT_SPELL_FEARSOME_ROAR:
me->CastSpell(me, SPELL_FEARSOME_ROAR, false);
events.ScheduleEvent(EVENT_SPELL_FEARSOME_ROAR, 17000);
break;
case EVENT_SPELL_PIERCING_SLASH:
me->CastSpell(me->GetVictim(), SPELL_PIERCING_SLASH, false);
events.ScheduleEvent(EVENT_SPELL_PIERCING_SLASH, 20000);
break;
case EVENT_SPELL_RAPTOR_CALL:
me->CastSpell(me, SPELL_RAPTOR_CALL, false);
events.ScheduleEvent(EVENT_SPELL_RAPTOR_CALL, 20000);
break;
case EVENT_MENACING_CLAW:
Talk(SAY_CLAW_EMOTE);
me->setAttackTimer(BASE_ATTACK, 2000);
me->AttackerStateUpdate(me->GetVictim());
if (me->GetVictim())
me->AttackerStateUpdate(me->GetVictim());
if (me->GetVictim())
me->AttackerStateUpdate(me->GetVictim());
events.ScheduleEvent(EVENT_MENACING_CLAW, 20000);
break;
}
DoMeleeAttackIfReady();
}
DoMeleeAttackIfReady();
}
private:
uint8 _raptorCount;
};
private:
uint8 _raptorCount;
};
};
class spell_dred_grievious_bite : public SpellScriptLoader
{
public:
spell_dred_grievious_bite() : SpellScriptLoader("spell_dred_grievious_bite") { }
public:
spell_dred_grievious_bite() : SpellScriptLoader("spell_dred_grievious_bite") { }
class spell_dred_grievious_bite_AuraScript : public AuraScript
{
PrepareAuraScript(spell_dred_grievious_bite_AuraScript);
class spell_dred_grievious_bite_AuraScript : public AuraScript
{
PrepareAuraScript(spell_dred_grievious_bite_AuraScript);
void OnPeriodic(AuraEffect const* /*aurEff*/)
{
if (Unit* target = GetTarget())
if (target->GetHealth() == target->GetMaxHealth())
{
PreventDefaultAction();
SetDuration(0);
}
}
void OnPeriodic(AuraEffect const* /*aurEff*/)
{
if (Unit* target = GetTarget())
if (target->GetHealth() == target->GetMaxHealth())
{
PreventDefaultAction();
SetDuration(0);
}
}
void Register()
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_dred_grievious_bite_AuraScript::OnPeriodic, EFFECT_1, SPELL_AURA_PERIODIC_DAMAGE);
}
};
void Register()
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_dred_grievious_bite_AuraScript::OnPeriodic, EFFECT_1, SPELL_AURA_PERIODIC_DAMAGE);
}
};
AuraScript* GetAuraScript() const
{
return new spell_dred_grievious_bite_AuraScript();
}
AuraScript* GetAuraScript() const
{
return new spell_dred_grievious_bite_AuraScript();
}
};
class spell_dred_raptor_call : public SpellScriptLoader
@@ -209,14 +209,14 @@ class achievement_better_off_dred : public AchievementCriteriaScript
if (!target)
return false;
return target->GetAI()->GetData(target->GetEntry());
return target->GetAI()->GetData(target->GetEntry());
}
};
void AddSC_boss_dred()
{
new boss_dred();
new spell_dred_grievious_bite();
new spell_dred_raptor_call();
new achievement_better_off_dred();
new boss_dred();
new spell_dred_grievious_bite();
new spell_dred_raptor_call();
new achievement_better_off_dred();
}

View File

@@ -8,215 +8,215 @@ REWRITTEN BY XINEF
enum Yells
{
SAY_AGGRO = 0,
SAY_KILL = 1,
SAY_DEATH = 2,
SAY_SUMMONING_ADDS = 3,
SAY_ARCANE_FIELD = 4,
EMOTE_SUMMONING_ADDS = 5
SAY_AGGRO = 0,
SAY_KILL = 1,
SAY_DEATH = 2,
SAY_SUMMONING_ADDS = 3,
SAY_ARCANE_FIELD = 4,
EMOTE_SUMMONING_ADDS = 5
};
enum Spells
{
SPELL_BEAM_CHANNEL = 52106,
SPELL_ARCANE_BLAST = 49198,
SPELL_ARCANE_FIELD = 47346,
SPELL_SUMMON_FETID_TROLL_CORPSE = 49103,
SPELL_SUMMON_HULKING_CORPSE = 49104,
SPELL_SUMMON_RISEN_SHADOWCASTER = 49105,
SPELL_SUMMON_CRYSTAL_HANDLER = 49179,
SPELL_DESPAWN_CRYSTAL_HANDLER = 51403,
SPELL_BEAM_CHANNEL = 52106,
SPELL_ARCANE_BLAST = 49198,
SPELL_ARCANE_FIELD = 47346,
SPELL_SUMMON_FETID_TROLL_CORPSE = 49103,
SPELL_SUMMON_HULKING_CORPSE = 49104,
SPELL_SUMMON_RISEN_SHADOWCASTER = 49105,
SPELL_SUMMON_CRYSTAL_HANDLER = 49179,
SPELL_DESPAWN_CRYSTAL_HANDLER = 51403,
SPELL_SUMMON_MINIONS = 59910,
SPELL_COPY_OF_SUMMON_MINIONS = 59933,
SPELL_BLIZZARD = 49034,
SPELL_FROSTBOLT = 49037,
SPELL_TOUCH_OF_MISERY = 50090
SPELL_SUMMON_MINIONS = 59910,
SPELL_COPY_OF_SUMMON_MINIONS = 59933,
SPELL_BLIZZARD = 49034,
SPELL_FROSTBOLT = 49037,
SPELL_TOUCH_OF_MISERY = 50090
};
enum Misc
{
NPC_CRYSTAL_CHANNEL_TARGET = 26712,
NPC_CRYSTAL_HANDLER = 26627,
NPC_CRYSTAL_CHANNEL_TARGET = 26712,
NPC_CRYSTAL_HANDLER = 26627,
EVENT_SUMMON_FETID_TROLL = 1,
EVENT_SUMMON_SHADOWCASTER = 2,
EVENT_SUMMON_HULKING_CORPSE = 3,
EVENT_SUMMON_CRYSTAL_HANDLER = 4,
EVENT_CAST_OFFENSIVE_SPELL = 5,
EVENT_KILL_TALK = 6,
EVENT_CHECK_PHASE = 7,
EVENT_SPELL_SUMMON_MINIONS = 8
EVENT_SUMMON_FETID_TROLL = 1,
EVENT_SUMMON_SHADOWCASTER = 2,
EVENT_SUMMON_HULKING_CORPSE = 3,
EVENT_SUMMON_CRYSTAL_HANDLER = 4,
EVENT_CAST_OFFENSIVE_SPELL = 5,
EVENT_KILL_TALK = 6,
EVENT_CHECK_PHASE = 7,
EVENT_SPELL_SUMMON_MINIONS = 8
};
class boss_novos : public CreatureScript
{
public:
boss_novos() : CreatureScript("boss_novos") { }
public:
boss_novos() : CreatureScript("boss_novos") { }
struct boss_novosAI : public BossAI
{
boss_novosAI(Creature* creature) : BossAI(creature, DATA_NOVOS)
{
}
struct boss_novosAI : public BossAI
{
boss_novosAI(Creature* creature) : BossAI(creature, DATA_NOVOS)
{
}
void Reset()
{
BossAI::Reset();
instance->SetBossState(DATA_NOVOS_CRYSTALS, IN_PROGRESS);
instance->SetBossState(DATA_NOVOS_CRYSTALS, NOT_STARTED);
_crystalCounter = 0;
void Reset()
{
BossAI::Reset();
instance->SetBossState(DATA_NOVOS_CRYSTALS, IN_PROGRESS);
instance->SetBossState(DATA_NOVOS_CRYSTALS, NOT_STARTED);
_crystalCounter = 0;
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
_achievement = true;
}
_achievement = true;
}
uint32 GetData(uint32 data) const
{
if (data == me->GetEntry())
return uint32(_achievement);
return 0;
}
uint32 GetData(uint32 data) const
{
if (data == me->GetEntry())
return uint32(_achievement);
return 0;
}
void SetData(uint32 type, uint32)
{
if (type == me->GetEntry())
_achievement = false;
}
void SetData(uint32 type, uint32)
{
if (type == me->GetEntry())
_achievement = false;
}
void MoveInLineOfSight(Unit* who) { }
void MoveInLineOfSight(Unit* who) { }
void EnterCombat(Unit* who)
{
Talk(SAY_AGGRO);
BossAI::EnterCombat(who);
void EnterCombat(Unit* who)
{
Talk(SAY_AGGRO);
BossAI::EnterCombat(who);
events.ScheduleEvent(EVENT_SUMMON_FETID_TROLL, 3000);
events.ScheduleEvent(EVENT_SUMMON_SHADOWCASTER, 9000);
events.ScheduleEvent(EVENT_SUMMON_HULKING_CORPSE, 30000);
events.ScheduleEvent(EVENT_SUMMON_CRYSTAL_HANDLER, 20000);
events.ScheduleEvent(EVENT_CHECK_PHASE, 80000);
events.ScheduleEvent(EVENT_SUMMON_FETID_TROLL, 3000);
events.ScheduleEvent(EVENT_SUMMON_SHADOWCASTER, 9000);
events.ScheduleEvent(EVENT_SUMMON_HULKING_CORPSE, 30000);
events.ScheduleEvent(EVENT_SUMMON_CRYSTAL_HANDLER, 20000);
events.ScheduleEvent(EVENT_CHECK_PHASE, 80000);
me->CastSpell(me, SPELL_ARCANE_BLAST, true);
me->CastSpell(me, SPELL_ARCANE_FIELD, true);
me->CastSpell(me, SPELL_DESPAWN_CRYSTAL_HANDLER, true);
me->SummonCreature(NPC_CRYSTAL_CHANNEL_TARGET, -378.40f, -813.13f, 59.74f, 0.0f);
me->CastSpell(me, SPELL_ARCANE_BLAST, true);
me->CastSpell(me, SPELL_ARCANE_FIELD, true);
me->CastSpell(me, SPELL_DESPAWN_CRYSTAL_HANDLER, true);
me->SummonCreature(NPC_CRYSTAL_CHANNEL_TARGET, -378.40f, -813.13f, 59.74f, 0.0f);
me->SetUInt64Value(UNIT_FIELD_TARGET, 0);
me->RemoveAllAuras();
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
}
me->SetUInt64Value(UNIT_FIELD_TARGET, 0);
me->RemoveAllAuras();
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
}
void JustDied(Unit* killer)
{
Talk(SAY_DEATH);
BossAI::JustDied(killer);
instance->SetBossState(DATA_NOVOS_CRYSTALS, DONE);
}
void JustDied(Unit* killer)
{
Talk(SAY_DEATH);
BossAI::JustDied(killer);
instance->SetBossState(DATA_NOVOS_CRYSTALS, DONE);
}
void KilledUnit(Unit* victim)
{
if (events.GetNextEventTime(EVENT_KILL_TALK) == 0)
{
Talk(SAY_KILL);
events.ScheduleEvent(EVENT_KILL_TALK, 6000);
}
}
void KilledUnit(Unit* victim)
{
if (events.GetNextEventTime(EVENT_KILL_TALK) == 0)
{
Talk(SAY_KILL);
events.ScheduleEvent(EVENT_KILL_TALK, 6000);
}
}
void JustSummoned(Creature* summon)
{
summons.Summon(summon);
if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE) && summon->GetEntry() != NPC_CRYSTAL_CHANNEL_TARGET && summon->GetEntry() != NPC_CRYSTAL_HANDLER)
summon->SetReactState(REACT_DEFENSIVE);
else if (summon->GetEntry() != NPC_CRYSTAL_CHANNEL_TARGET)
summon->SetInCombatWithZone();
}
void JustSummoned(Creature* summon)
{
summons.Summon(summon);
if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE) && summon->GetEntry() != NPC_CRYSTAL_CHANNEL_TARGET && summon->GetEntry() != NPC_CRYSTAL_HANDLER)
summon->SetReactState(REACT_DEFENSIVE);
else if (summon->GetEntry() != NPC_CRYSTAL_CHANNEL_TARGET)
summon->SetInCombatWithZone();
}
void UpdateAI(uint32 diff)
{
if (!UpdateVictim())
return;
void UpdateAI(uint32 diff)
{
if (!UpdateVictim())
return;
events.Update(diff);
switch (events.ExecuteEvent())
{
case EVENT_SUMMON_FETID_TROLL:
if (Creature* trigger = summons.GetCreatureWithEntry(NPC_CRYSTAL_CHANNEL_TARGET))
trigger->CastSpell(trigger, SPELL_SUMMON_FETID_TROLL_CORPSE, true, NULL, NULL, me->GetGUID());
events.ScheduleEvent(EVENT_SUMMON_FETID_TROLL, 3000);
break;
case EVENT_SUMMON_HULKING_CORPSE:
if (Creature* trigger = summons.GetCreatureWithEntry(NPC_CRYSTAL_CHANNEL_TARGET))
trigger->CastSpell(trigger, SPELL_SUMMON_HULKING_CORPSE, true, NULL, NULL, me->GetGUID());
events.ScheduleEvent(EVENT_SUMMON_HULKING_CORPSE, 30000);
break;
case EVENT_SUMMON_SHADOWCASTER:
if (Creature* trigger = summons.GetCreatureWithEntry(NPC_CRYSTAL_CHANNEL_TARGET))
trigger->CastSpell(trigger, SPELL_SUMMON_RISEN_SHADOWCASTER, true, NULL, NULL, me->GetGUID());
events.ScheduleEvent(EVENT_SUMMON_SHADOWCASTER, 10000);
break;
case EVENT_SUMMON_CRYSTAL_HANDLER:
if (_crystalCounter++ < 4)
{
Talk(SAY_SUMMONING_ADDS);
Talk(EMOTE_SUMMONING_ADDS);
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 60.0f))
target->CastSpell(target, SPELL_SUMMON_CRYSTAL_HANDLER, true, NULL, NULL, me->GetGUID());
events.ScheduleEvent(EVENT_SUMMON_CRYSTAL_HANDLER, 20000);
}
break;
case EVENT_CHECK_PHASE:
if (me->HasAura(SPELL_BEAM_CHANNEL))
{
events.ScheduleEvent(EVENT_CHECK_PHASE, 2000);
break;
}
events.Reset();
events.ScheduleEvent(EVENT_CAST_OFFENSIVE_SPELL, 3000);
events.ScheduleEvent(EVENT_SPELL_SUMMON_MINIONS, 10000);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
me->InterruptNonMeleeSpells(false);
break;
case EVENT_CAST_OFFENSIVE_SPELL:
if (!me->HasUnitState(UNIT_STATE_CASTING))
if (Unit *target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
me->CastSpell(target, RAND(SPELL_BLIZZARD,SPELL_FROSTBOLT,SPELL_TOUCH_OF_MISERY), false);
events.Update(diff);
switch (events.ExecuteEvent())
{
case EVENT_SUMMON_FETID_TROLL:
if (Creature* trigger = summons.GetCreatureWithEntry(NPC_CRYSTAL_CHANNEL_TARGET))
trigger->CastSpell(trigger, SPELL_SUMMON_FETID_TROLL_CORPSE, true, NULL, NULL, me->GetGUID());
events.ScheduleEvent(EVENT_SUMMON_FETID_TROLL, 3000);
break;
case EVENT_SUMMON_HULKING_CORPSE:
if (Creature* trigger = summons.GetCreatureWithEntry(NPC_CRYSTAL_CHANNEL_TARGET))
trigger->CastSpell(trigger, SPELL_SUMMON_HULKING_CORPSE, true, NULL, NULL, me->GetGUID());
events.ScheduleEvent(EVENT_SUMMON_HULKING_CORPSE, 30000);
break;
case EVENT_SUMMON_SHADOWCASTER:
if (Creature* trigger = summons.GetCreatureWithEntry(NPC_CRYSTAL_CHANNEL_TARGET))
trigger->CastSpell(trigger, SPELL_SUMMON_RISEN_SHADOWCASTER, true, NULL, NULL, me->GetGUID());
events.ScheduleEvent(EVENT_SUMMON_SHADOWCASTER, 10000);
break;
case EVENT_SUMMON_CRYSTAL_HANDLER:
if (_crystalCounter++ < 4)
{
Talk(SAY_SUMMONING_ADDS);
Talk(EMOTE_SUMMONING_ADDS);
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 60.0f))
target->CastSpell(target, SPELL_SUMMON_CRYSTAL_HANDLER, true, NULL, NULL, me->GetGUID());
events.ScheduleEvent(EVENT_SUMMON_CRYSTAL_HANDLER, 20000);
}
break;
case EVENT_CHECK_PHASE:
if (me->HasAura(SPELL_BEAM_CHANNEL))
{
events.ScheduleEvent(EVENT_CHECK_PHASE, 2000);
break;
}
events.Reset();
events.ScheduleEvent(EVENT_CAST_OFFENSIVE_SPELL, 3000);
events.ScheduleEvent(EVENT_SPELL_SUMMON_MINIONS, 10000);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
me->InterruptNonMeleeSpells(false);
break;
case EVENT_CAST_OFFENSIVE_SPELL:
if (!me->HasUnitState(UNIT_STATE_CASTING))
if (Unit *target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
me->CastSpell(target, RAND(SPELL_BLIZZARD,SPELL_FROSTBOLT,SPELL_TOUCH_OF_MISERY), false);
events.ScheduleEvent(EVENT_CAST_OFFENSIVE_SPELL, 500);
break;
case EVENT_SPELL_SUMMON_MINIONS:
if (me->HasUnitState(UNIT_STATE_CASTING))
{
me->CastSpell(me, SPELL_SUMMON_MINIONS, false);
events.ScheduleEvent(EVENT_SPELL_SUMMON_MINIONS, 15000);
break;
}
events.ScheduleEvent(EVENT_SPELL_SUMMON_MINIONS, 500);
break;
}
events.ScheduleEvent(EVENT_CAST_OFFENSIVE_SPELL, 500);
break;
case EVENT_SPELL_SUMMON_MINIONS:
if (me->HasUnitState(UNIT_STATE_CASTING))
{
me->CastSpell(me, SPELL_SUMMON_MINIONS, false);
events.ScheduleEvent(EVENT_SPELL_SUMMON_MINIONS, 15000);
break;
}
events.ScheduleEvent(EVENT_SPELL_SUMMON_MINIONS, 500);
break;
}
EnterEvadeIfOutOfCombatArea();
}
bool CheckEvadeIfOutOfCombatArea() const
{
return !SelectTargetFromPlayerList(80.0f);
}
bool CheckEvadeIfOutOfCombatArea() const
{
return !SelectTargetFromPlayerList(80.0f);
}
private:
uint8 _crystalCounter;
bool _achievement;
};
private:
uint8 _crystalCounter;
bool _achievement;
};
CreatureAI *GetAI(Creature *creature) const
{
return GetInstanceAI<boss_novosAI>(creature);
}
CreatureAI *GetAI(Creature *creature) const
{
return GetInstanceAI<boss_novosAI>(creature);
}
};
class spell_novos_despawn_crystal_handler : public SpellScriptLoader
@@ -248,30 +248,30 @@ class spell_novos_despawn_crystal_handler : public SpellScriptLoader
class spell_novos_crystal_handler_death : public SpellScriptLoader
{
public:
spell_novos_crystal_handler_death() : SpellScriptLoader("spell_novos_crystal_handler_death") { }
public:
spell_novos_crystal_handler_death() : SpellScriptLoader("spell_novos_crystal_handler_death") { }
class spell_novos_crystal_handler_death_AuraScript : public AuraScript
{
PrepareAuraScript(spell_novos_crystal_handler_death_AuraScript)
class spell_novos_crystal_handler_death_AuraScript : public AuraScript
{
PrepareAuraScript(spell_novos_crystal_handler_death_AuraScript)
void HandleEffectApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
{
GetUnitOwner()->InterruptNonMeleeSpells(false);
if (GameObject* crystal = GetUnitOwner()->FindNearestGameObjectOfType(GAMEOBJECT_TYPE_DOOR, 5.0f))
crystal->SetGoState(GO_STATE_READY);
}
void HandleEffectApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
{
GetUnitOwner()->InterruptNonMeleeSpells(false);
if (GameObject* crystal = GetUnitOwner()->FindNearestGameObjectOfType(GAMEOBJECT_TYPE_DOOR, 5.0f))
crystal->SetGoState(GO_STATE_READY);
}
void Register()
{
OnEffectApply += AuraEffectApplyFn(spell_novos_crystal_handler_death_AuraScript::HandleEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
void Register()
{
OnEffectApply += AuraEffectApplyFn(spell_novos_crystal_handler_death_AuraScript::HandleEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
AuraScript* GetAuraScript() const
{
return new spell_novos_crystal_handler_death_AuraScript();
}
AuraScript* GetAuraScript() const
{
return new spell_novos_crystal_handler_death_AuraScript();
}
};
class spell_novos_summon_minions : public SpellScriptLoader
@@ -303,20 +303,20 @@ class spell_novos_summon_minions : public SpellScriptLoader
class achievement_oh_novos : public AchievementCriteriaScript
{
public:
achievement_oh_novos() : AchievementCriteriaScript("achievement_oh_novos") { }
public:
achievement_oh_novos() : AchievementCriteriaScript("achievement_oh_novos") { }
bool OnCheck(Player* /*player*/, Unit* target)
{
return target && target->GetAI()->GetData(target->GetEntry());
}
bool OnCheck(Player* /*player*/, Unit* target)
{
return target && target->GetAI()->GetData(target->GetEntry());
}
};
void AddSC_boss_novos()
{
new boss_novos();
new spell_novos_despawn_crystal_handler();
new spell_novos_crystal_handler_death();
new spell_novos_summon_minions();
new achievement_oh_novos();
new boss_novos();
new spell_novos_despawn_crystal_handler();
new spell_novos_crystal_handler_death();
new spell_novos_summon_minions();
new achievement_oh_novos();
}

View File

@@ -8,259 +8,259 @@ REWRITTEN BY XINEF
enum Yells
{
SAY_AGGRO = 0,
SAY_KILL = 1,
SAY_FLESH = 2,
SAY_SKELETON = 3,
SAY_DEATH = 4
SAY_AGGRO = 0,
SAY_KILL = 1,
SAY_FLESH = 2,
SAY_SKELETON = 3,
SAY_DEATH = 4
};
enum Spells
{
SPELL_CURSE_OF_LIFE = 49527,
SPELL_RAIN_OF_FIRE = 49518,
SPELL_SHADOW_VOLLEY = 49528,
SPELL_CURSE_OF_LIFE = 49527,
SPELL_RAIN_OF_FIRE = 49518,
SPELL_SHADOW_VOLLEY = 49528,
// flesh spells
SPELL_EYE_BEAM = 49544,
SPELL_LIGHTNING_BREATH = 49537,
SPELL_POISON_CLOUD = 49548,
// flesh spells
SPELL_EYE_BEAM = 49544,
SPELL_LIGHTNING_BREATH = 49537,
SPELL_POISON_CLOUD = 49548,
SPELL_TURN_FLESH = 49356,
SPELL_TURN_BONES = 53463,
SPELL_GIFT_OF_THARON_JA = 52509,
SPELL_DUMMY = 49551,
SPELL_FLESH_VISUAL = 52582,
SPELL_CLEAR_GIFT = 53242,
SPELL_TURN_FLESH = 49356,
SPELL_TURN_BONES = 53463,
SPELL_GIFT_OF_THARON_JA = 52509,
SPELL_DUMMY = 49551,
SPELL_FLESH_VISUAL = 52582,
SPELL_CLEAR_GIFT = 53242,
SPELL_ACHIEVEMENT_CHECK = 61863
SPELL_ACHIEVEMENT_CHECK = 61863
};
enum Misc
{
ACTION_TURN_BONES = 1,
ACTION_TURN_BONES = 1,
EVENT_SPELL_CURSE_OF_LIFE = 1,
EVENT_SPELL_RAIN_OF_FIRE = 2,
EVENT_SPELL_SHADOW_VOLLEY = 3,
EVENT_SPELL_EYE_BEAM = 4,
EVENT_SPELL_LIGHTNING_BREATH = 5,
EVENT_SPELL_POISON_CLOUD = 6,
EVENT_SPELL_TURN_FLESH = 7,
EVENT_TURN_FLESH_REAL = 9,
EVENT_TURN_BONES_REAL = 10,
EVENT_KILL_TALK = 11
EVENT_SPELL_CURSE_OF_LIFE = 1,
EVENT_SPELL_RAIN_OF_FIRE = 2,
EVENT_SPELL_SHADOW_VOLLEY = 3,
EVENT_SPELL_EYE_BEAM = 4,
EVENT_SPELL_LIGHTNING_BREATH = 5,
EVENT_SPELL_POISON_CLOUD = 6,
EVENT_SPELL_TURN_FLESH = 7,
EVENT_TURN_FLESH_REAL = 9,
EVENT_TURN_BONES_REAL = 10,
EVENT_KILL_TALK = 11
};
class boss_tharon_ja : public CreatureScript
{
public:
boss_tharon_ja() : CreatureScript("boss_tharon_ja") { }
public:
boss_tharon_ja() : CreatureScript("boss_tharon_ja") { }
CreatureAI *GetAI(Creature *creature) const
{
return GetInstanceAI<boss_tharon_jaAI>(creature);
}
CreatureAI *GetAI(Creature *creature) const
{
return GetInstanceAI<boss_tharon_jaAI>(creature);
}
struct boss_tharon_jaAI : public BossAI
{
boss_tharon_jaAI(Creature* creature) : BossAI(creature, DATA_THARON_JA)
{
}
struct boss_tharon_jaAI : public BossAI
{
boss_tharon_jaAI(Creature* creature) : BossAI(creature, DATA_THARON_JA)
{
}
void Reset()
{
BossAI::Reset();
me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_KNOCK_BACK, true);
me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_KNOCK_BACK_DEST, true);
me->SetDisplayId(me->GetNativeDisplayId());
me->CastSpell(me, SPELL_CLEAR_GIFT, true);
}
void Reset()
{
BossAI::Reset();
me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_KNOCK_BACK, true);
me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_KNOCK_BACK_DEST, true);
me->SetDisplayId(me->GetNativeDisplayId());
me->CastSpell(me, SPELL_CLEAR_GIFT, true);
}
void EnterCombat(Unit* who)
{
Talk(SAY_AGGRO);
BossAI::EnterCombat(who);
events.ScheduleEvent(EVENT_SPELL_CURSE_OF_LIFE, 5000);
events.ScheduleEvent(EVENT_SPELL_RAIN_OF_FIRE, urand(14000,18000));
events.ScheduleEvent(EVENT_SPELL_SHADOW_VOLLEY, urand(8000,10000));
events.ScheduleEvent(EVENT_SPELL_TURN_FLESH, 1000);
}
void EnterCombat(Unit* who)
{
Talk(SAY_AGGRO);
BossAI::EnterCombat(who);
events.ScheduleEvent(EVENT_SPELL_CURSE_OF_LIFE, 5000);
events.ScheduleEvent(EVENT_SPELL_RAIN_OF_FIRE, urand(14000,18000));
events.ScheduleEvent(EVENT_SPELL_SHADOW_VOLLEY, urand(8000,10000));
events.ScheduleEvent(EVENT_SPELL_TURN_FLESH, 1000);
}
void KilledUnit(Unit *victim)
{
if (events.GetNextEventTime(EVENT_KILL_TALK) == 0)
{
Talk(SAY_KILL);
events.ScheduleEvent(EVENT_KILL_TALK, 6000);
}
}
void KilledUnit(Unit *victim)
{
if (events.GetNextEventTime(EVENT_KILL_TALK) == 0)
{
Talk(SAY_KILL);
events.ScheduleEvent(EVENT_KILL_TALK, 6000);
}
}
void DoAction(int32 param)
{
if (param == ACTION_TURN_BONES && me->IsAlive())
{
Talk(SAY_SKELETON);
events.Reset();
events.ScheduleEvent(EVENT_TURN_BONES_REAL, 3000);
}
}
void DoAction(int32 param)
{
if (param == ACTION_TURN_BONES && me->IsAlive())
{
Talk(SAY_SKELETON);
events.Reset();
events.ScheduleEvent(EVENT_TURN_BONES_REAL, 3000);
}
}
void JustDied(Unit* killer)
{
Talk(SAY_DEATH);
BossAI::JustDied(killer);
me->CastSpell(me, SPELL_ACHIEVEMENT_CHECK, true);
me->CastSpell(me, SPELL_CLEAR_GIFT, true);
if (me->GetDisplayId() != me->GetNativeDisplayId())
{
me->SetDisplayId(me->GetNativeDisplayId());
me->CastSpell(me, SPELL_FLESH_VISUAL, true);
}
}
void JustDied(Unit* killer)
{
Talk(SAY_DEATH);
BossAI::JustDied(killer);
me->CastSpell(me, SPELL_ACHIEVEMENT_CHECK, true);
me->CastSpell(me, SPELL_CLEAR_GIFT, true);
if (me->GetDisplayId() != me->GetNativeDisplayId())
{
me->SetDisplayId(me->GetNativeDisplayId());
me->CastSpell(me, SPELL_FLESH_VISUAL, true);
}
}
void UpdateAI(uint32 diff)
{
if (!UpdateVictim())
return;
void UpdateAI(uint32 diff)
{
if (!UpdateVictim())
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
switch (events.ExecuteEvent())
{
case EVENT_SPELL_CURSE_OF_LIFE:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 30.0f, true))
me->CastSpell(target, SPELL_CURSE_OF_LIFE, false);
events.ScheduleEvent(EVENT_SPELL_CURSE_OF_LIFE, 13000);
break;
case EVENT_SPELL_RAIN_OF_FIRE:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 30.0f, true))
me->CastSpell(target, SPELL_RAIN_OF_FIRE, false);
events.ScheduleEvent(EVENT_SPELL_RAIN_OF_FIRE, 16000);
break;
case EVENT_SPELL_SHADOW_VOLLEY:
me->CastSpell(me, SPELL_SHADOW_VOLLEY, false);
events.ScheduleEvent(EVENT_SPELL_SHADOW_VOLLEY, 9000);
break;
case EVENT_SPELL_TURN_FLESH:
if (me->HealthBelowPct(50))
{
Talk(SAY_FLESH);
me->getThreatManager().resetAllAggro();
me->CastSpell((Unit*)NULL, SPELL_TURN_FLESH, false);
switch (events.ExecuteEvent())
{
case EVENT_SPELL_CURSE_OF_LIFE:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 30.0f, true))
me->CastSpell(target, SPELL_CURSE_OF_LIFE, false);
events.ScheduleEvent(EVENT_SPELL_CURSE_OF_LIFE, 13000);
break;
case EVENT_SPELL_RAIN_OF_FIRE:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 30.0f, true))
me->CastSpell(target, SPELL_RAIN_OF_FIRE, false);
events.ScheduleEvent(EVENT_SPELL_RAIN_OF_FIRE, 16000);
break;
case EVENT_SPELL_SHADOW_VOLLEY:
me->CastSpell(me, SPELL_SHADOW_VOLLEY, false);
events.ScheduleEvent(EVENT_SPELL_SHADOW_VOLLEY, 9000);
break;
case EVENT_SPELL_TURN_FLESH:
if (me->HealthBelowPct(50))
{
Talk(SAY_FLESH);
me->getThreatManager().resetAllAggro();
me->CastSpell((Unit*)NULL, SPELL_TURN_FLESH, false);
events.Reset();
events.ScheduleEvent(EVENT_TURN_FLESH_REAL, 3000);
return;
}
events.ScheduleEvent(EVENT_SPELL_TURN_FLESH, 1000);
break;
case EVENT_TURN_FLESH_REAL:
me->CastSpell(me, SPELL_DUMMY, true);
events.Reset();
events.ScheduleEvent(EVENT_TURN_FLESH_REAL, 3000);
return;
}
events.ScheduleEvent(EVENT_SPELL_TURN_FLESH, 1000);
break;
case EVENT_TURN_FLESH_REAL:
me->CastSpell(me, SPELL_DUMMY, true);
me->GetMotionMaster()->MoveChase(me->GetVictim());
events.ScheduleEvent(EVENT_SPELL_EYE_BEAM, 11000);
events.ScheduleEvent(EVENT_SPELL_LIGHTNING_BREATH, 3000);
events.ScheduleEvent(EVENT_SPELL_POISON_CLOUD, 6000);
break;
case EVENT_SPELL_EYE_BEAM:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 35.0f, true))
me->CastSpell(target, SPELL_EYE_BEAM, false);
break;
case EVENT_SPELL_LIGHTNING_BREATH:
me->CastSpell(me->GetVictim(), SPELL_LIGHTNING_BREATH, false);
events.ScheduleEvent(EVENT_SPELL_LIGHTNING_BREATH, 8000);
break;
case EVENT_SPELL_POISON_CLOUD:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 35.0f, true))
me->CastSpell(target, SPELL_POISON_CLOUD, false);
events.ScheduleEvent(EVENT_SPELL_POISON_CLOUD, 10000);
break;
case EVENT_TURN_BONES_REAL:
me->SetDisplayId(me->GetNativeDisplayId());
me->CastSpell(me, SPELL_FLESH_VISUAL, true);
me->CastSpell(me, SPELL_CLEAR_GIFT, true);
events.Reset();
events.ScheduleEvent(EVENT_SPELL_CURSE_OF_LIFE, 1000);
events.ScheduleEvent(EVENT_SPELL_RAIN_OF_FIRE, urand(12000,14000));
events.ScheduleEvent(EVENT_SPELL_SHADOW_VOLLEY, urand(8000,10000));
break;
}
me->GetMotionMaster()->MoveChase(me->GetVictim());
events.ScheduleEvent(EVENT_SPELL_EYE_BEAM, 11000);
events.ScheduleEvent(EVENT_SPELL_LIGHTNING_BREATH, 3000);
events.ScheduleEvent(EVENT_SPELL_POISON_CLOUD, 6000);
break;
case EVENT_SPELL_EYE_BEAM:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 35.0f, true))
me->CastSpell(target, SPELL_EYE_BEAM, false);
break;
case EVENT_SPELL_LIGHTNING_BREATH:
me->CastSpell(me->GetVictim(), SPELL_LIGHTNING_BREATH, false);
events.ScheduleEvent(EVENT_SPELL_LIGHTNING_BREATH, 8000);
break;
case EVENT_SPELL_POISON_CLOUD:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 35.0f, true))
me->CastSpell(target, SPELL_POISON_CLOUD, false);
events.ScheduleEvent(EVENT_SPELL_POISON_CLOUD, 10000);
break;
case EVENT_TURN_BONES_REAL:
me->SetDisplayId(me->GetNativeDisplayId());
me->CastSpell(me, SPELL_FLESH_VISUAL, true);
me->CastSpell(me, SPELL_CLEAR_GIFT, true);
events.Reset();
events.ScheduleEvent(EVENT_SPELL_CURSE_OF_LIFE, 1000);
events.ScheduleEvent(EVENT_SPELL_RAIN_OF_FIRE, urand(12000,14000));
events.ScheduleEvent(EVENT_SPELL_SHADOW_VOLLEY, urand(8000,10000));
break;
}
DoMeleeAttackIfReady();
}
};
DoMeleeAttackIfReady();
}
};
};
class spell_tharon_ja_curse_of_life : public SpellScriptLoader
{
public:
spell_tharon_ja_curse_of_life() : SpellScriptLoader("spell_tharon_ja_curse_of_life") { }
public:
spell_tharon_ja_curse_of_life() : SpellScriptLoader("spell_tharon_ja_curse_of_life") { }
class spell_tharon_ja_curse_of_life_AuraScript : public AuraScript
{
PrepareAuraScript(spell_tharon_ja_curse_of_life_AuraScript);
class spell_tharon_ja_curse_of_life_AuraScript : public AuraScript
{
PrepareAuraScript(spell_tharon_ja_curse_of_life_AuraScript);
void OnPeriodic(AuraEffect const* /*aurEff*/)
{
if (GetUnitOwner()->HealthBelowPct(50))
{
PreventDefaultAction();
SetDuration(0);
}
}
void OnPeriodic(AuraEffect const* /*aurEff*/)
{
if (GetUnitOwner()->HealthBelowPct(50))
{
PreventDefaultAction();
SetDuration(0);
}
}
void Register()
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_tharon_ja_curse_of_life_AuraScript::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE);
}
};
void Register()
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_tharon_ja_curse_of_life_AuraScript::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE);
}
};
AuraScript* GetAuraScript() const
{
return new spell_tharon_ja_curse_of_life_AuraScript();
}
AuraScript* GetAuraScript() const
{
return new spell_tharon_ja_curse_of_life_AuraScript();
}
};
class spell_tharon_ja_dummy : public SpellScriptLoader
{
public:
spell_tharon_ja_dummy() : SpellScriptLoader("spell_tharon_ja_dummy") { }
public:
spell_tharon_ja_dummy() : SpellScriptLoader("spell_tharon_ja_dummy") { }
class spell_tharon_ja_dummy_AuraScript : public AuraScript
{
PrepareAuraScript(spell_tharon_ja_dummy_AuraScript)
class spell_tharon_ja_dummy_AuraScript : public AuraScript
{
PrepareAuraScript(spell_tharon_ja_dummy_AuraScript)
void HandleEffectApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
{
PreventDefaultAction();
GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_FLESH_VISUAL, true);
GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_GIFT_OF_THARON_JA, true);
GetUnitOwner()->SetDisplayId(GetUnitOwner()->GetNativeDisplayId()+1);
}
void HandleEffectApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
{
PreventDefaultAction();
GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_FLESH_VISUAL, true);
GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_GIFT_OF_THARON_JA, true);
GetUnitOwner()->SetDisplayId(GetUnitOwner()->GetNativeDisplayId()+1);
}
void HandleEffectRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
{
PreventDefaultAction();
GetUnitOwner()->getThreatManager().resetAllAggro();
GetUnitOwner()->GetMotionMaster()->Clear();
GetUnitOwner()->CastSpell((Unit*)NULL, SPELL_TURN_BONES, false);
GetUnitOwner()->GetAI()->DoAction(ACTION_TURN_BONES);
}
void HandleEffectRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
{
PreventDefaultAction();
GetUnitOwner()->getThreatManager().resetAllAggro();
GetUnitOwner()->GetMotionMaster()->Clear();
GetUnitOwner()->CastSpell((Unit*)NULL, SPELL_TURN_BONES, false);
GetUnitOwner()->GetAI()->DoAction(ACTION_TURN_BONES);
}
void Register()
{
OnEffectApply += AuraEffectApplyFn(spell_tharon_ja_dummy_AuraScript::HandleEffectApply, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL);
OnEffectRemove += AuraEffectRemoveFn(spell_tharon_ja_dummy_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL);
}
};
void Register()
{
OnEffectApply += AuraEffectApplyFn(spell_tharon_ja_dummy_AuraScript::HandleEffectApply, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL);
OnEffectRemove += AuraEffectRemoveFn(spell_tharon_ja_dummy_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL);
}
};
AuraScript* GetAuraScript() const
{
return new spell_tharon_ja_dummy_AuraScript();
}
AuraScript* GetAuraScript() const
{
return new spell_tharon_ja_dummy_AuraScript();
}
};
class spell_tharon_ja_clear_gift_of_tharon_ja : public SpellScriptLoader
@@ -292,8 +292,8 @@ class spell_tharon_ja_clear_gift_of_tharon_ja : public SpellScriptLoader
void AddSC_boss_tharon_ja()
{
new boss_tharon_ja();
new spell_tharon_ja_curse_of_life();
new spell_tharon_ja_dummy();
new spell_tharon_ja_clear_gift_of_tharon_ja();
new boss_tharon_ja();
new spell_tharon_ja_curse_of_life();
new spell_tharon_ja_dummy();
new spell_tharon_ja_clear_gift_of_tharon_ja();
}

View File

@@ -18,143 +18,143 @@ enum Yells
enum Spells
{
SPELL_SUMMON_INVADER_A = 49456,
SPELL_SUMMON_INVADER_B = 49457,
SPELL_SUMMON_INVADER_C = 49458,
SPELL_SUMMON_INVADER_A = 49456,
SPELL_SUMMON_INVADER_B = 49457,
SPELL_SUMMON_INVADER_C = 49458,
SPELL_INFECTED_WOUND = 49637,
SPELL_CRUSH = 49639,
SPELL_CONSUME = 49380,
SPELL_CORPSE_EXPLODE = 49555,
SPELL_INFECTED_WOUND = 49637,
SPELL_CRUSH = 49639,
SPELL_CONSUME = 49380,
SPELL_CORPSE_EXPLODE = 49555,
SPELL_CORPSE_EXPLODE_DAMAGE = 49618,
SPELL_CONSUME_AURA = 49381,
SPELL_CORPSE_EXPLODE_DAMAGE = 49618,
SPELL_CONSUME_AURA = 49381,
};
enum Events
{
EVENT_SPELL_INFECTED_WOUND = 1,
EVENT_SPELL_CRUSH = 2,
EVENT_SPELL_CONSUME = 3,
EVENT_SPELL_CORPSE_EXPLODE = 4,
EVENT_SPAWN_INVADERS = 5,
EVENT_KILL_TALK = 6
EVENT_SPELL_INFECTED_WOUND = 1,
EVENT_SPELL_CRUSH = 2,
EVENT_SPELL_CONSUME = 3,
EVENT_SPELL_CORPSE_EXPLODE = 4,
EVENT_SPAWN_INVADERS = 5,
EVENT_KILL_TALK = 6
};
class boss_trollgore : public CreatureScript
{
public:
boss_trollgore() : CreatureScript("boss_trollgore") { }
public:
boss_trollgore() : CreatureScript("boss_trollgore") { }
struct boss_trollgoreAI : public BossAI
{
boss_trollgoreAI(Creature* creature) : BossAI(creature, DATA_TROLLGORE)
{
}
struct boss_trollgoreAI : public BossAI
{
boss_trollgoreAI(Creature* creature) : BossAI(creature, DATA_TROLLGORE)
{
}
void Reset()
{
BossAI::Reset();
events2.Reset();
events2.ScheduleEvent(EVENT_SPAWN_INVADERS, 30000);
}
void Reset()
{
BossAI::Reset();
events2.Reset();
events2.ScheduleEvent(EVENT_SPAWN_INVADERS, 30000);
}
void EnterCombat(Unit* who)
{
events.ScheduleEvent(EVENT_SPELL_INFECTED_WOUND, urand(6000,10000));
events.ScheduleEvent(EVENT_SPELL_CRUSH, urand(3000,5000));
events.ScheduleEvent(EVENT_SPELL_CONSUME, 15000);
events.ScheduleEvent(EVENT_SPELL_CORPSE_EXPLODE, 35000);
events.ScheduleEvent(EVENT_SPAWN_INVADERS, 20000, 30000);
me->setActive(true);
instance->SetBossState(DATA_TROLLGORE, IN_PROGRESS);
if (who->GetTypeId() == TYPEID_PLAYER)
{
Talk(SAY_AGGRO);
me->SetInCombatWithZone();
}
}
void EnterCombat(Unit* who)
{
events.ScheduleEvent(EVENT_SPELL_INFECTED_WOUND, urand(6000,10000));
events.ScheduleEvent(EVENT_SPELL_CRUSH, urand(3000,5000));
events.ScheduleEvent(EVENT_SPELL_CONSUME, 15000);
events.ScheduleEvent(EVENT_SPELL_CORPSE_EXPLODE, 35000);
events.ScheduleEvent(EVENT_SPAWN_INVADERS, 20000, 30000);
me->setActive(true);
instance->SetBossState(DATA_TROLLGORE, IN_PROGRESS);
if (who->GetTypeId() == TYPEID_PLAYER)
{
Talk(SAY_AGGRO);
me->SetInCombatWithZone();
}
}
void JustDied(Unit* killer)
{
Talk(SAY_DEATH);
BossAI::JustDied(killer);
}
void JustDied(Unit* killer)
{
Talk(SAY_DEATH);
BossAI::JustDied(killer);
}
void KilledUnit(Unit* victim)
{
if (events.GetNextEventTime(EVENT_KILL_TALK) == 0)
{
Talk(SAY_KILL);
events.ScheduleEvent(EVENT_KILL_TALK, 6000);
}
}
void KilledUnit(Unit* victim)
{
if (events.GetNextEventTime(EVENT_KILL_TALK) == 0)
{
Talk(SAY_KILL);
events.ScheduleEvent(EVENT_KILL_TALK, 6000);
}
}
void JustSummoned(Creature* summon)
{
summons.Summon(summon);
}
void JustSummoned(Creature* summon)
{
summons.Summon(summon);
}
void UpdateAI(uint32 diff)
{
events2.Update(diff);
switch (events2.ExecuteEvent())
{
case EVENT_SPAWN_INVADERS:
me->CastSpell(me, SPELL_SUMMON_INVADER_A, true);
me->CastSpell(me, SPELL_SUMMON_INVADER_B, true);
me->CastSpell(me, SPELL_SUMMON_INVADER_C, true);
events2.ScheduleEvent(EVENT_SPAWN_INVADERS, 30000);
break;
}
void UpdateAI(uint32 diff)
{
events2.Update(diff);
switch (events2.ExecuteEvent())
{
case EVENT_SPAWN_INVADERS:
me->CastSpell(me, SPELL_SUMMON_INVADER_A, true);
me->CastSpell(me, SPELL_SUMMON_INVADER_B, true);
me->CastSpell(me, SPELL_SUMMON_INVADER_C, true);
events2.ScheduleEvent(EVENT_SPAWN_INVADERS, 30000);
break;
}
if (!UpdateVictim())
return;
if (!UpdateVictim())
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
switch(events.ExecuteEvent())
{
case EVENT_SPELL_INFECTED_WOUND:
me->CastSpell(me->GetVictim(), SPELL_INFECTED_WOUND, false);
events.ScheduleEvent(EVENT_SPELL_INFECTED_WOUND, urand(25000,35000));
break;
case EVENT_SPELL_CRUSH:
me->CastSpell(me->GetVictim(), SPELL_CRUSH, false);
events.ScheduleEvent(EVENT_SPELL_CRUSH, urand(10000,15000));
break;
case EVENT_SPELL_CONSUME:
Talk(SAY_CONSUME);
me->CastSpell(me, SPELL_CONSUME, false);
events.ScheduleEvent(EVENT_SPELL_CONSUME, 15000);
break;
case EVENT_SPELL_CORPSE_EXPLODE:
Talk(SAY_EXPLODE);
me->CastSpell(me, SPELL_CORPSE_EXPLODE, false);
events.ScheduleEvent(EVENT_SPELL_CORPSE_EXPLODE, urand(15000,19000));
break;
}
switch(events.ExecuteEvent())
{
case EVENT_SPELL_INFECTED_WOUND:
me->CastSpell(me->GetVictim(), SPELL_INFECTED_WOUND, false);
events.ScheduleEvent(EVENT_SPELL_INFECTED_WOUND, urand(25000,35000));
break;
case EVENT_SPELL_CRUSH:
me->CastSpell(me->GetVictim(), SPELL_CRUSH, false);
events.ScheduleEvent(EVENT_SPELL_CRUSH, urand(10000,15000));
break;
case EVENT_SPELL_CONSUME:
Talk(SAY_CONSUME);
me->CastSpell(me, SPELL_CONSUME, false);
events.ScheduleEvent(EVENT_SPELL_CONSUME, 15000);
break;
case EVENT_SPELL_CORPSE_EXPLODE:
Talk(SAY_EXPLODE);
me->CastSpell(me, SPELL_CORPSE_EXPLODE, false);
events.ScheduleEvent(EVENT_SPELL_CORPSE_EXPLODE, urand(15000,19000));
break;
}
DoMeleeAttackIfReady();
DoMeleeAttackIfReady();
EnterEvadeIfOutOfCombatArea();
}
bool CheckEvadeIfOutOfCombatArea() const
{
return me->GetHomePosition().GetExactDist2d(me) > 60.0f;
}
bool CheckEvadeIfOutOfCombatArea() const
{
return me->GetHomePosition().GetExactDist2d(me) > 60.0f;
}
private:
EventMap events2;
};
private:
EventMap events2;
};
CreatureAI *GetAI(Creature *creature) const
{
return GetInstanceAI<boss_trollgoreAI>(creature);
}
CreatureAI *GetAI(Creature *creature) const
{
return GetInstanceAI<boss_trollgoreAI>(creature);
}
};
class spell_trollgore_consume : public SpellScriptLoader
@@ -264,9 +264,9 @@ class achievement_consumption_junction : public AchievementCriteriaScript
void AddSC_boss_trollgore()
{
new boss_trollgore();
new spell_trollgore_consume();
new spell_trollgore_corpse_explode();
new spell_trollgore_invader_taunt();
new achievement_consumption_junction();
new boss_trollgore();
new spell_trollgore_consume();
new spell_trollgore_corpse_explode();
new spell_trollgore_invader_taunt();
new achievement_consumption_junction();
}

View File

@@ -7,33 +7,33 @@ REWRITTEN BY XINEF
enum Data
{
DATA_TROLLGORE = 0,
DATA_NOVOS = 1,
DATA_NOVOS_CRYSTALS = 2,
DATA_DRED = 3,
DATA_THARON_JA = 4,
MAX_ENCOUNTERS = 5
DATA_TROLLGORE = 0,
DATA_NOVOS = 1,
DATA_NOVOS_CRYSTALS = 2,
DATA_DRED = 3,
DATA_THARON_JA = 4,
MAX_ENCOUNTERS = 5
};
enum Creatures
{
NPC_KURZEL = 26664,
NPC_DRAKKARI_GUARDIAN = 26620,
NPC_RISEN_DRAKKARI_WARRIOR = 26635,
NPC_KURZEL = 26664,
NPC_DRAKKARI_GUARDIAN = 26620,
NPC_RISEN_DRAKKARI_WARRIOR = 26635,
};
enum GameObjects
{
GO_NOVOS_CRYSTAL_1 = 189299,
GO_NOVOS_CRYSTAL_2 = 189300,
GO_NOVOS_CRYSTAL_3 = 189301,
GO_NOVOS_CRYSTAL_4 = 189302,
GO_NOVOS_CRYSTAL_1 = 189299,
GO_NOVOS_CRYSTAL_2 = 189300,
GO_NOVOS_CRYSTAL_3 = 189301,
GO_NOVOS_CRYSTAL_4 = 189302,
};
enum DTKSpells
{
SPELL_SUMMON_DRAKKARI_SHAMAN = 49958,
SPELL_SUMMON_DRAKKARI_GUARDIAN = 49959
SPELL_SUMMON_DRAKKARI_SHAMAN = 49958,
SPELL_SUMMON_DRAKKARI_GUARDIAN = 49959
};
#endif

View File

@@ -8,117 +8,117 @@ REWRITTEN BY XINEF
DoorData const doorData[] =
{
{ GO_NOVOS_CRYSTAL_1, DATA_NOVOS_CRYSTALS, DOOR_TYPE_ROOM, BOUNDARY_NONE },
{ GO_NOVOS_CRYSTAL_2, DATA_NOVOS_CRYSTALS, DOOR_TYPE_ROOM, BOUNDARY_NONE },
{ GO_NOVOS_CRYSTAL_3, DATA_NOVOS_CRYSTALS, DOOR_TYPE_ROOM, BOUNDARY_NONE },
{ GO_NOVOS_CRYSTAL_4, DATA_NOVOS_CRYSTALS, DOOR_TYPE_ROOM, BOUNDARY_NONE },
{ 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE }
{ GO_NOVOS_CRYSTAL_1, DATA_NOVOS_CRYSTALS, DOOR_TYPE_ROOM, BOUNDARY_NONE },
{ GO_NOVOS_CRYSTAL_2, DATA_NOVOS_CRYSTALS, DOOR_TYPE_ROOM, BOUNDARY_NONE },
{ GO_NOVOS_CRYSTAL_3, DATA_NOVOS_CRYSTALS, DOOR_TYPE_ROOM, BOUNDARY_NONE },
{ GO_NOVOS_CRYSTAL_4, DATA_NOVOS_CRYSTALS, DOOR_TYPE_ROOM, BOUNDARY_NONE },
{ 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE }
};
class instance_drak_tharon_keep : public InstanceMapScript
{
public:
instance_drak_tharon_keep() : InstanceMapScript("instance_drak_tharon_keep", 600) { }
public:
instance_drak_tharon_keep() : InstanceMapScript("instance_drak_tharon_keep", 600) { }
struct instance_drak_tharon_keep_InstanceScript : public InstanceScript
{
instance_drak_tharon_keep_InstanceScript(Map* map) : InstanceScript(map)
{
SetBossNumber(MAX_ENCOUNTERS);
LoadDoorData(doorData);
}
void OnGameObjectCreate(GameObject* go)
{
switch (go->GetEntry())
{
case GO_NOVOS_CRYSTAL_1:
case GO_NOVOS_CRYSTAL_2:
case GO_NOVOS_CRYSTAL_3:
case GO_NOVOS_CRYSTAL_4:
struct instance_drak_tharon_keep_InstanceScript : public InstanceScript
{
instance_drak_tharon_keep_InstanceScript(Map* map) : InstanceScript(map)
{
SetBossNumber(MAX_ENCOUNTERS);
LoadDoorData(doorData);
}
void OnGameObjectCreate(GameObject* go)
{
switch (go->GetEntry())
{
case GO_NOVOS_CRYSTAL_1:
case GO_NOVOS_CRYSTAL_2:
case GO_NOVOS_CRYSTAL_3:
case GO_NOVOS_CRYSTAL_4:
AddDoor(go, true);
break;
}
}
void OnGameObjectRemove(GameObject* go)
{
switch (go->GetEntry())
{
case GO_NOVOS_CRYSTAL_1:
case GO_NOVOS_CRYSTAL_2:
case GO_NOVOS_CRYSTAL_3:
case GO_NOVOS_CRYSTAL_4:
break;
}
}
void OnGameObjectRemove(GameObject* go)
{
switch (go->GetEntry())
{
case GO_NOVOS_CRYSTAL_1:
case GO_NOVOS_CRYSTAL_2:
case GO_NOVOS_CRYSTAL_3:
case GO_NOVOS_CRYSTAL_4:
AddDoor(go, false);
break;
}
}
break;
}
}
std::string GetSaveData()
{
std::ostringstream saveStream;
saveStream << "D K " << GetBossSaveData();
return saveStream.str();
}
std::string GetSaveData()
{
std::ostringstream saveStream;
saveStream << "D K " << GetBossSaveData();
return saveStream.str();
}
void Load(const char* in)
{
if( !in )
return;
void Load(const char* in)
{
if( !in )
return;
char dataHead1, dataHead2;
std::istringstream loadStream(in);
loadStream >> dataHead1 >> dataHead2;
if (dataHead1 == 'D' && dataHead2 == 'K')
{
for (uint8 i = 0; i < MAX_ENCOUNTERS; ++i)
{
uint32 tmpState;
loadStream >> tmpState;
if (tmpState == IN_PROGRESS || tmpState > SPECIAL)
tmpState = NOT_STARTED;
SetBossState(i, EncounterState(tmpState));
}
}
}
};
char dataHead1, dataHead2;
std::istringstream loadStream(in);
loadStream >> dataHead1 >> dataHead2;
if (dataHead1 == 'D' && dataHead2 == 'K')
{
for (uint8 i = 0; i < MAX_ENCOUNTERS; ++i)
{
uint32 tmpState;
loadStream >> tmpState;
if (tmpState == IN_PROGRESS || tmpState > SPECIAL)
tmpState = NOT_STARTED;
SetBossState(i, EncounterState(tmpState));
}
}
}
};
InstanceScript* GetInstanceScript(InstanceMap *map) const
{
return new instance_drak_tharon_keep_InstanceScript(map);
}
InstanceScript* GetInstanceScript(InstanceMap *map) const
{
return new instance_drak_tharon_keep_InstanceScript(map);
}
};
class spell_dtk_raise_dead : public SpellScriptLoader
{
public:
spell_dtk_raise_dead() : SpellScriptLoader("spell_dtk_raise_dead") { }
public:
spell_dtk_raise_dead() : SpellScriptLoader("spell_dtk_raise_dead") { }
class spell_dtk_raise_dead_AuraScript : public AuraScript
{
PrepareAuraScript(spell_dtk_raise_dead_AuraScript)
class spell_dtk_raise_dead_AuraScript : public AuraScript
{
PrepareAuraScript(spell_dtk_raise_dead_AuraScript)
bool Load()
{
return GetUnitOwner()->GetTypeId() == TYPEID_UNIT;
}
bool Load()
{
return GetUnitOwner()->GetTypeId() == TYPEID_UNIT;
}
void HandleEffectRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
{
GetUnitOwner()->ToCreature()->DespawnOrUnsummon(1);
GetUnitOwner()->SummonCreature(NPC_RISEN_DRAKKARI_WARRIOR, *GetUnitOwner());
}
void HandleEffectRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
{
GetUnitOwner()->ToCreature()->DespawnOrUnsummon(1);
GetUnitOwner()->SummonCreature(NPC_RISEN_DRAKKARI_WARRIOR, *GetUnitOwner());
}
void Register()
{
AfterEffectRemove += AuraEffectRemoveFn(spell_dtk_raise_dead_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
void Register()
{
AfterEffectRemove += AuraEffectRemoveFn(spell_dtk_raise_dead_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
AuraScript* GetAuraScript() const
{
return new spell_dtk_raise_dead_AuraScript();
}
AuraScript* GetAuraScript() const
{
return new spell_dtk_raise_dead_AuraScript();
}
};
class spell_dtk_summon_random_drakkari : public SpellScriptLoader
@@ -149,7 +149,7 @@ class spell_dtk_summon_random_drakkari : public SpellScriptLoader
void AddSC_instance_drak_tharon_keep()
{
new instance_drak_tharon_keep();
new spell_dtk_raise_dead();
new spell_dtk_summon_random_drakkari();
new instance_drak_tharon_keep();
new spell_dtk_raise_dead();
new spell_dtk_summon_random_drakkari();
}