Scripts/BFD: Update scripts to new register model (#26791)

(cherry picked from commit 97140cd195)
This commit is contained in:
offl
2021-08-09 14:18:02 +03:00
committed by Shauren
parent 2185692f62
commit cb645fd2f8
5 changed files with 167 additions and 232 deletions

View File

@@ -35,53 +35,31 @@ enum Spells
const Position HomePosition = {-815.817f, -145.299f, -25.870f, 0};
class go_blackfathom_altar : public GameObjectScript
struct go_blackfathom_altar : public GameObjectAI
{
public:
go_blackfathom_altar() : GameObjectScript("go_blackfathom_altar") { }
go_blackfathom_altar(GameObject* go) : GameObjectAI(go) { }
struct go_blackfathom_altarAI : public GameObjectAI
{
go_blackfathom_altarAI(GameObject* go) : GameObjectAI(go) { }
bool OnGossipHello(Player* player) override
{
if (!player->HasAura(SPELL_BLESSING_OF_BLACKFATHOM))
player->AddAura(SPELL_BLESSING_OF_BLACKFATHOM, player);
return true;
}
};
GameObjectAI* GetAI(GameObject* go) const override
{
return GetBlackfathomDeepsAI<go_blackfathom_altarAI>(go);
}
bool OnGossipHello(Player* player) override
{
if (!player->HasAura(SPELL_BLESSING_OF_BLACKFATHOM))
player->AddAura(SPELL_BLESSING_OF_BLACKFATHOM, player);
return true;
}
};
class go_blackfathom_fire : public GameObjectScript
struct go_blackfathom_fire : public GameObjectAI
{
public:
go_blackfathom_fire() : GameObjectScript("go_blackfathom_fire") { }
go_blackfathom_fire(GameObject* go) : GameObjectAI(go), instance(go->GetInstanceScript()) { }
struct go_blackfathom_fireAI : public GameObjectAI
{
go_blackfathom_fireAI(GameObject* go) : GameObjectAI(go), instance(go->GetInstanceScript()) { }
InstanceScript* instance;
InstanceScript* instance;
bool OnGossipHello(Player* /*player*/) override
{
me->SetGoState(GO_STATE_ACTIVE);
me->AddFlag(GO_FLAG_NOT_SELECTABLE);
instance->SetData(DATA_FIRE, instance->GetData(DATA_FIRE) + 1);
return true;
}
};
GameObjectAI* GetAI(GameObject* go) const override
{
return GetBlackfathomDeepsAI<go_blackfathom_fireAI>(go);
}
bool OnGossipHello(Player* /*player*/) override
{
me->SetGoState(GO_STATE_ACTIVE);
me->AddFlag(GO_FLAG_NOT_SELECTABLE);
instance->SetData(DATA_FIRE, instance->GetData(DATA_FIRE) + 1);
return true;
}
};
enum Events
@@ -189,45 +167,34 @@ enum Morridune
SAY_MORRIDUNE_2 = 1
};
class npc_morridune : public CreatureScript
struct npc_morridune : public EscortAI
{
public:
npc_morridune() : CreatureScript("npc_morridune") { }
npc_morridune(Creature* creature) : EscortAI(creature) { }
struct npc_morriduneAI : public EscortAI
void Reset() override
{
npc_morriduneAI(Creature* creature) : EscortAI(creature) { }
Talk(SAY_MORRIDUNE_1);
me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
Start(false);
}
void Reset() override
{
Talk(SAY_MORRIDUNE_1);
me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
Start(false);
}
void WaypointReached(uint32 waypointId, uint32 /*pathId*/) override
{
switch (waypointId)
{
case 4:
SetEscortPaused(true);
me->SetFacingTo(1.775791f);
me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP);
Talk(SAY_MORRIDUNE_2);
break;
}
}
bool OnGossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override
{
DoCast(player, SPELL_TELEPORT_DARNASSUS);
return false;
}
};
CreatureAI* GetAI(Creature* creature) const override
void WaypointReached(uint32 waypointId, uint32 /*pathId*/) override
{
return GetBlackfathomDeepsAI<npc_morriduneAI>(creature);
switch (waypointId)
{
case 4:
SetEscortPaused(true);
me->SetFacingTo(1.775791f);
me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP);
Talk(SAY_MORRIDUNE_2);
break;
}
}
bool OnGossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override
{
DoCast(player, SPELL_TELEPORT_DARNASSUS);
return false;
}
};
@@ -262,9 +229,9 @@ public:
void AddSC_blackfathom_deeps()
{
new go_blackfathom_altar();
new go_blackfathom_fire();
RegisterBlackfathomDeepsGameObjectAI(go_blackfathom_altar);
RegisterBlackfathomDeepsGameObjectAI(go_blackfathom_fire);
RegisterBlackfathomDeepsCreatureAI(npc_blackfathom_deeps_event);
new npc_morridune();
RegisterBlackfathomDeepsCreatureAI(npc_morridune);
new spell_subjugator_korul_darkness_calls();
}

View File

@@ -77,5 +77,6 @@ inline AI* GetBlackfathomDeepsAI(T* obj)
}
#define RegisterBlackfathomDeepsCreatureAI(ai_name) RegisterCreatureAIWithFactory(ai_name, GetBlackfathomDeepsAI)
#define RegisterBlackfathomDeepsGameObjectAI(ai_name) RegisterGameObjectAIWithFactory(ai_name, GetBlackfathomDeepsAI)
#endif // BFD_H_

View File

@@ -31,68 +31,57 @@ enum Events
EVENT_FRENZIED_RAGE
};
class boss_aku_mai : public CreatureScript
struct boss_aku_mai : public BossAI
{
public:
boss_aku_mai() : CreatureScript("boss_aku_mai") { }
struct boss_aku_maiAI : public BossAI
boss_aku_mai(Creature* creature) : BossAI(creature, DATA_AKU_MAI)
{
boss_aku_maiAI(Creature* creature) : BossAI(creature, DATA_AKU_MAI)
{
Initialize();
}
void Initialize()
{
IsEnraged = false;
}
void Reset() override
{
Initialize();
_Reset();
}
void JustEngagedWith(Unit* who) override
{
BossAI::JustEngagedWith(who);
events.ScheduleEvent(EVENT_POISON_CLOUD, 5s, 9s);
}
void DamageTaken(Unit* /*atacker*/, uint32 &damage) override
{
if (!IsEnraged && me->HealthBelowPctDamaged(30, damage))
{
DoCast(me, SPELL_FRENZIED_RAGE);
IsEnraged = true;
}
}
void ExecuteEvent(uint32 eventId) override
{
switch (eventId)
{
case EVENT_POISON_CLOUD:
DoCastVictim(SPELL_POISON_CLOUD);
events.ScheduleEvent(EVENT_POISON_CLOUD, 25s, 50s);
break;
default:
break;
}
}
private:
bool IsEnraged;
};
CreatureAI* GetAI(Creature* creature) const override
{
return GetBlackfathomDeepsAI<boss_aku_maiAI>(creature);
Initialize();
}
void Initialize()
{
IsEnraged = false;
}
void Reset() override
{
Initialize();
_Reset();
}
void JustEngagedWith(Unit* who) override
{
BossAI::JustEngagedWith(who);
events.ScheduleEvent(EVENT_POISON_CLOUD, 5s, 9s);
}
void DamageTaken(Unit* /*atacker*/, uint32 &damage) override
{
if (!IsEnraged && me->HealthBelowPctDamaged(30, damage))
{
DoCast(me, SPELL_FRENZIED_RAGE);
IsEnraged = true;
}
}
void ExecuteEvent(uint32 eventId) override
{
switch (eventId)
{
case EVENT_POISON_CLOUD:
DoCastVictim(SPELL_POISON_CLOUD);
events.ScheduleEvent(EVENT_POISON_CLOUD, 25s, 50s);
break;
default:
break;
}
}
private:
bool IsEnraged;
};
void AddSC_boss_aku_mai()
{
new boss_aku_mai();
RegisterBlackfathomDeepsCreatureAI(boss_aku_mai);
}

View File

@@ -29,48 +29,37 @@ enum Events
EVENT_THROW_NET = 1
};
class boss_gelihast : public CreatureScript
struct boss_gelihast : public BossAI
{
public:
boss_gelihast() : CreatureScript("boss_gelihast") { }
boss_gelihast(Creature* creature) : BossAI(creature, DATA_GELIHAST) { }
struct boss_gelihastAI : public BossAI
void JustEngagedWith(Unit* who) override
{
boss_gelihastAI(Creature* creature) : BossAI(creature, DATA_GELIHAST) { }
BossAI::JustEngagedWith(who);
events.ScheduleEvent(EVENT_THROW_NET, 2s, 4s);
}
void JustEngagedWith(Unit* who) override
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
events.Update(diff);
while (uint32 eventId = events.ExecuteEvent())
{
BossAI::JustEngagedWith(who);
events.ScheduleEvent(EVENT_THROW_NET, 2s, 4s);
}
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
events.Update(diff);
while (uint32 eventId = events.ExecuteEvent())
if (eventId == EVENT_THROW_NET)
{
if (eventId == EVENT_THROW_NET)
{
DoCastVictim(SPELL_NET);
events.ScheduleEvent(EVENT_THROW_NET, 4s, 7s);
}
DoCastVictim(SPELL_NET);
events.ScheduleEvent(EVENT_THROW_NET, 4s, 7s);
}
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI(Creature* creature) const override
{
return GetBlackfathomDeepsAI<boss_gelihastAI>(creature);
DoMeleeAttackIfReady();
}
};
void AddSC_boss_gelihast()
{
new boss_gelihast();
RegisterBlackfathomDeepsCreatureAI(boss_gelihast);
}

View File

@@ -39,87 +39,76 @@ enum Events
EVENT_SLEEP
};
class boss_kelris : public CreatureScript
struct boss_kelris : public BossAI
{
public:
boss_kelris() : CreatureScript("boss_kelris") { }
boss_kelris(Creature* creature) : BossAI(creature, DATA_KELRIS) { }
struct boss_kelrisAI : public BossAI
void Reset() override
{
boss_kelrisAI(Creature* creature) : BossAI(creature, DATA_KELRIS) { }
_Reset();
DoCastSelf(SPELL_BLACKFATHOM_CHANNELING);
}
void Reset() override
void JustReachedHome() override
{
_JustReachedHome();
DoCastSelf(SPELL_BLACKFATHOM_CHANNELING);
}
void JustEngagedWith(Unit* who) override
{
BossAI::JustEngagedWith(who);
Talk(SAY_AGGRO);
me->RemoveAurasDueToSpell(SPELL_BLACKFATHOM_CHANNELING);
events.ScheduleEvent(EVENT_MIND_BLAST, 2s, 5s);
events.ScheduleEvent(EVENT_SLEEP, 9s, 12s);
}
void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
_JustDied();
}
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
while (uint32 eventId = events.ExecuteEvent())
{
_Reset();
DoCastSelf(SPELL_BLACKFATHOM_CHANNELING);
}
void JustReachedHome() override
{
_JustReachedHome();
DoCastSelf(SPELL_BLACKFATHOM_CHANNELING);
}
void JustEngagedWith(Unit* who) override
{
BossAI::JustEngagedWith(who);
Talk(SAY_AGGRO);
me->RemoveAurasDueToSpell(SPELL_BLACKFATHOM_CHANNELING);
events.ScheduleEvent(EVENT_MIND_BLAST, 2s, 5s);
events.ScheduleEvent(EVENT_SLEEP, 9s, 12s);
}
void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
_JustDied();
}
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
events.Update(diff);
switch (eventId)
{
case EVENT_MIND_BLAST:
DoCastVictim(SPELL_MIND_BLAST);
events.ScheduleEvent(EVENT_MIND_BLAST, 7s, 9s);
break;
case EVENT_SLEEP:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100, true))
{
Talk(SAY_SLEEP);
DoCast(target, SPELL_SLEEP);
}
events.ScheduleEvent(EVENT_SLEEP, 15s, 20s);
break;
default:
break;
}
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
while (uint32 eventId = events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_MIND_BLAST:
DoCastVictim(SPELL_MIND_BLAST);
events.ScheduleEvent(EVENT_MIND_BLAST, 7s, 9s);
break;
case EVENT_SLEEP:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100, true))
{
Talk(SAY_SLEEP);
DoCast(target, SPELL_SLEEP);
}
events.ScheduleEvent(EVENT_SLEEP, 15s, 20s);
break;
default:
break;
}
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
}
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI(Creature* creature) const override
{
return GetBlackfathomDeepsAI<boss_kelrisAI>(creature);
DoMeleeAttackIfReady();
}
};
void AddSC_boss_kelris()
{
new boss_kelris();
RegisterBlackfathomDeepsCreatureAI(boss_kelris);
}