Core/Scripts: Minor fixes in Baltharus The Warborn (#18550)

* Core/Scripts: Minor fixes in Baltharus The Warborn

* go away travis
This commit is contained in:
Keader authored and Aokromes committed 2016-12-28 16:04:03 +01:00
1 parent 867084435b
commit 75ad9b01fd
2 files changed
+77 -73

No files matched your search

@@ -27,7 +27,7 @@ enum Texts
SAY_AGGRO = 1, // Ah, the entertainment has arrived.
SAY_KILL = 2, // Baltharus leaves no survivors! - This world has enough heroes.
SAY_CLONE = 3, // Twice the pain and half the fun.
SAY_DEATH = 4, // I... didn't see that coming....
SAY_DEATH = 4 // I... didn't see that coming....
};
enum Spells
@@ -40,28 +40,28 @@ enum Spells
SPELL_CLONE = 74511,
SPELL_REPELLING_WAVE = 74509,
SPELL_CLEAR_DEBUFFS = 34098,
SPELL_SPAWN_EFFECT = 64195,
SPELL_SPAWN_EFFECT = 64195
};
enum Events
{
EVENT_BLADE_TEMPEST = 1,
EVENT_CLEAVE = 2,
EVENT_ENERVATING_BRAND = 3,
EVENT_INTRO_TALK = 4,
EVENT_OOC_CHANNEL = 5,
EVENT_BLADE_TEMPEST = 1,
EVENT_CLEAVE,
EVENT_ENERVATING_BRAND,
EVENT_INTRO_TALK,
EVENT_SUMMONS_ATTACK
};
enum Actions
{
ACTION_CLONE = 1,
ACTION_CLONE = 1
};
enum Phases
{
PHASE_ALL = 0,
PHASE_INTRO = 1,
PHASE_COMBAT = 2
PHASE_ALL = 0,
PHASE_INTRO,
PHASE_COMBAT
};
class boss_baltharus_the_warborn : public CreatureScript
@@ -71,13 +71,7 @@ class boss_baltharus_the_warborn : public CreatureScript
struct boss_baltharus_the_warbornAI : public BossAI
{
boss_baltharus_the_warbornAI(Creature* creature) : BossAI(creature, DATA_BALTHARUS_THE_WARBORN)
{
Initialize();
_introDone = false;
}
void Initialize()
boss_baltharus_the_warbornAI(Creature* creature) : BossAI(creature, DATA_BALTHARUS_THE_WARBORN), _introDone(false)
{
_cloneCount = RAID_MODE<uint8>(1, 2, 2, 2);
}
@@ -86,9 +80,9 @@ class boss_baltharus_the_warborn : public CreatureScript
{
_Reset();
events.SetPhase(PHASE_INTRO);
events.ScheduleEvent(EVENT_OOC_CHANNEL, 0, 0, PHASE_INTRO);
Initialize();
instance->SetData(DATA_BALTHARUS_SHARED_HEALTH, me->GetMaxHealth());
if (Creature* channelTarget = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_CRYSTAL_CHANNEL_TARGET)))
DoCast(channelTarget, SPELL_BARRIER_CHANNEL);
}
void DoAction(int32 action) override
@@ -100,13 +94,13 @@ class boss_baltharus_the_warborn : public CreatureScript
return;
_introDone = true;
me->setActive(true);
events.ScheduleEvent(EVENT_INTRO_TALK, 7000, 0, PHASE_INTRO);
events.ScheduleEvent(EVENT_INTRO_TALK, Seconds(7), 0, PHASE_INTRO);
break;
case ACTION_CLONE:
{
DoCast(me, SPELL_CLEAR_DEBUFFS);
DoCast(me, SPELL_CLONE);
DoCast(me, SPELL_REPELLING_WAVE);
DoCastSelf(SPELL_CLEAR_DEBUFFS);
DoCastSelf(SPELL_CLONE);
DoCastSelf(SPELL_REPELLING_WAVE);
Talk(SAY_CLONE);
--_cloneCount;
break;
@@ -122,9 +116,9 @@ class boss_baltharus_the_warborn : public CreatureScript
_EnterCombat();
events.Reset();
events.SetPhase(PHASE_COMBAT);
events.ScheduleEvent(EVENT_CLEAVE, 11000, 0, PHASE_COMBAT);
events.ScheduleEvent(EVENT_ENERVATING_BRAND, 13000, 0, PHASE_COMBAT);
events.ScheduleEvent(EVENT_BLADE_TEMPEST, 15000, 0, PHASE_COMBAT);
events.ScheduleEvent(EVENT_CLEAVE, Seconds(13), 0, PHASE_COMBAT);
events.ScheduleEvent(EVENT_ENERVATING_BRAND, Seconds(13), 0, PHASE_COMBAT);
events.ScheduleEvent(EVENT_BLADE_TEMPEST, Seconds(18), 0, PHASE_COMBAT);
Talk(SAY_AGGRO);
}
@@ -146,7 +140,7 @@ class boss_baltharus_the_warborn : public CreatureScript
{
summons.Summon(summon);
summon->SetHealth(me->GetHealth());
summon->CastSpell(summon, SPELL_SPAWN_EFFECT, true);
events.ScheduleEvent(EVENT_SUMMONS_ATTACK, Seconds(2));
}
void DamageTaken(Unit* /*attacker*/, uint32& damage) override
@@ -168,10 +162,18 @@ class boss_baltharus_the_warborn : public CreatureScript
instance->SetData(DATA_BALTHARUS_SHARED_HEALTH, me->GetHealth() - damage);
}
void EnterEvadeMode(EvadeReason /*why*/) override
{
summons.DespawnAll();
events.Reset();
_DespawnAtEvade();
}
void UpdateAI(uint32 diff) override
{
bool introPhase = events.IsInPhase(PHASE_INTRO);
if (!UpdateVictim() && !introPhase)
if (!introPhase && !UpdateVictim())
return;
if (!introPhase)
@@ -179,7 +181,7 @@ class boss_baltharus_the_warborn : public CreatureScript
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING) && !introPhase)
if (!introPhase && me->HasUnitState(UNIT_STATE_CASTING))
return;
while (uint32 eventId = events.ExecuteEvent())
@@ -189,30 +191,28 @@ class boss_baltharus_the_warborn : public CreatureScript
case EVENT_INTRO_TALK:
Talk(SAY_BALTHARUS_INTRO);
break;
case EVENT_OOC_CHANNEL:
if (Creature* channelTarget = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_CRYSTAL_CHANNEL_TARGET)))
DoCast(channelTarget, SPELL_BARRIER_CHANNEL);
events.ScheduleEvent(EVENT_OOC_CHANNEL, 7000, 0, PHASE_INTRO);
break;
case EVENT_CLEAVE:
DoCastVictim(SPELL_CLEAVE);
events.ScheduleEvent(EVENT_CLEAVE, 24000, 0, PHASE_COMBAT);
events.Repeat(Seconds(20), Seconds(24));
break;
case EVENT_BLADE_TEMPEST:
DoCast(me, SPELL_BLADE_TEMPEST);
events.ScheduleEvent(EVENT_BLADE_TEMPEST, 24000, 0, PHASE_COMBAT);
DoCastSelf(SPELL_BLADE_TEMPEST);
events.Repeat(Seconds(24));
break;
case EVENT_ENERVATING_BRAND:
for (uint8 i = 0; i < RAID_MODE<uint8>(4, 8, 8, 10); i++)
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 45.0f, true))
DoCast(target, SPELL_ENERVATING_BRAND);
events.ScheduleEvent(EVENT_ENERVATING_BRAND, 26000, 0, PHASE_COMBAT);
events.Repeat(Seconds(26));
break;
case EVENT_SUMMONS_ATTACK:
summons.DoZoneInCombat(NPC_BALTHARUS_THE_WARBORN_CLONE);
break;
default:
break;
}
if (me->HasUnitState(UNIT_STATE_CASTING) && !introPhase)
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
}
@@ -235,33 +235,38 @@ class npc_baltharus_the_warborn_clone : public CreatureScript
public:
npc_baltharus_the_warborn_clone() : CreatureScript("npc_baltharus_the_warborn_clone") { }
struct npc_baltharus_the_warborn_cloneAI : public ScriptedAI
struct npc_baltharus_the_warborn_cloneAI : public BossAI
{
npc_baltharus_the_warborn_cloneAI(Creature* creature) : ScriptedAI(creature),
_instance(creature->GetInstanceScript())
npc_baltharus_the_warborn_cloneAI(Creature* creature) : BossAI(creature, DATA_BALTHARUS_CLONE) { }
void Reset() override
{
DoCastSelf(SPELL_SPAWN_EFFECT);
me->SetReactState(REACT_DEFENSIVE);
}
void EnterCombat(Unit* /*who*/) override
{
DoZoneInCombat();
_events.Reset();
_events.ScheduleEvent(EVENT_CLEAVE, urand(5000, 10000));
_events.ScheduleEvent(EVENT_BLADE_TEMPEST, urand(18000, 25000));
_events.ScheduleEvent(EVENT_ENERVATING_BRAND, urand(10000, 15000));
events.Reset();
events.ScheduleEvent(EVENT_CLEAVE, Seconds(11));
events.ScheduleEvent(EVENT_BLADE_TEMPEST, Seconds(15));
events.ScheduleEvent(EVENT_ENERVATING_BRAND, Seconds(10));
}
void EnterEvadeMode(EvadeReason /*why*/) override { }
void DamageTaken(Unit* /*attacker*/, uint32& damage) override
{
// Setting DATA_BALTHARUS_SHARED_HEALTH to 0 when killed would bug the boss.
if (me->GetHealth() > damage)
_instance->SetData(DATA_BALTHARUS_SHARED_HEALTH, me->GetHealth() - damage);
instance->SetData(DATA_BALTHARUS_SHARED_HEALTH, me->GetHealth() - damage);
}
void JustDied(Unit* killer) override
{
// This is here because DamageTaken wont trigger if the damage is deadly.
if (Creature* baltharus = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_BALTHARUS_THE_WARBORN)))
if (Creature* baltharus = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_BALTHARUS_THE_WARBORN)))
killer->Kill(baltharus);
}
@@ -270,42 +275,41 @@ class npc_baltharus_the_warborn_clone : public CreatureScript
if (!UpdateVictim())
return;
me->SetHealth(_instance->GetData(DATA_BALTHARUS_SHARED_HEALTH));
me->SetHealth(instance->GetData(DATA_BALTHARUS_SHARED_HEALTH));
_events.Update(diff);
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
while (uint32 eventId = _events.ExecuteEvent())
while (uint32 eventId = events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_CLEAVE:
DoCastVictim(SPELL_CLEAVE);
_events.ScheduleEvent(EVENT_CLEAVE, 24000);
events.Repeat(Seconds(20), Seconds(24));
break;
case EVENT_BLADE_TEMPEST:
DoCastVictim(SPELL_BLADE_TEMPEST);
_events.ScheduleEvent(EVENT_BLADE_TEMPEST, 24000);
break;
events.Repeat(Seconds(24));
break;
case EVENT_ENERVATING_BRAND:
for (uint8 i = 0; i < RAID_MODE<uint8>(4, 8, 8, 10); i++)
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 45.0f, true))
DoCast(target, SPELL_ENERVATING_BRAND);
_events.ScheduleEvent(EVENT_ENERVATING_BRAND, 26000);
events.Repeat(Seconds(26));
break;
default:
break;
}
}
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
}
DoMeleeAttackIfReady();
}
private:
EventMap _events;
InstanceScript* _instance;
};
CreatureAI* GetAI(Creature* creature) const override
@@ -314,6 +318,7 @@ class npc_baltharus_the_warborn_clone : public CreatureScript
}
};
// 74505 - Enervating Brand
class spell_baltharus_enervating_brand_trigger : public SpellScriptLoader
{
public:
@@ -325,11 +330,9 @@ class spell_baltharus_enervating_brand_trigger : public SpellScriptLoader
void CheckDistance()
{
if (Unit* caster = GetOriginalCaster())
{
if (Unit* target = GetHitUnit())
target->CastSpell(caster, SPELL_SIPHONED_MIGHT, true);
}
Unit* caster = GetCaster();
Unit* target = GetHitUnit();
target->CastSpell(caster, SPELL_SIPHONED_MIGHT, true);
}
void Register() override
@@ -49,6 +49,7 @@ enum RSDataTypes
DATA_BURNING_TREE_4 = 16,
DATA_FLAME_RING = 17,
DATA_TWILIGHT_FLAME_RING = 18,
DATA_BALTHARUS_CLONE = 19
};
enum RSSharedActions
@@ -56,7 +57,7 @@ enum RSSharedActions
ACTION_INTRO_BALTHARUS = -3975101,
ACTION_BALTHARUS_DEATH = -3975102,
ACTION_INTRO_HALION = -4014601,
ACTION_INTRO_HALION_2 = -4014602,
ACTION_INTRO_HALION_2 = -4014602
};
enum RSCreaturesIds
@@ -97,7 +98,7 @@ enum RSCreaturesIds
NPC_COMBAT_STALKER = 40151, // Seen in sniffs but not used, so no wonder.
// Xerestrasza
NPC_XERESTRASZA = 40429,
NPC_XERESTRASZA = 40429
};
enum RSGameObjectsIds
@@ -112,19 +113,19 @@ enum RSGameObjectsIds
GO_BURNING_TREE_1 = 203034,
GO_BURNING_TREE_2 = 203035,
GO_BURNING_TREE_3 = 203036,
GO_BURNING_TREE_4 = 203037,
GO_BURNING_TREE_4 = 203037
};
enum RSWorldStates
{
WORLDSTATE_CORPOREALITY_MATERIAL = 5049,
WORLDSTATE_CORPOREALITY_TWILIGHT = 5050,
WORLDSTATE_CORPOREALITY_TOGGLE = 5051,
WORLDSTATE_CORPOREALITY_TOGGLE = 5051
};
enum RSInstanceSpell
{
SPELL_BERSERK = 26662,
SPELL_BERSERK = 26662
};
template<class AI>
@@ -134,7 +135,7 @@ CreatureAI* GetRubySanctumAI(Creature* creature)
if (instance->GetInstanceScript())
if (instance->GetScriptId() == sObjectMgr->GetScriptId(RSScriptName))
return new AI(creature);
return NULL;
return nullptr;
}
template<class AI>
@@ -145,7 +146,7 @@ GameObjectAI* GetRubySanctumAI(GameObject* go)
if (instance->GetScriptId() == sObjectMgr->GetScriptId(RSScriptName))
return new AI(go);
return NULL;
return nullptr;
}
#endif // RUBY_SANCTUM_H_