mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-02-06 17:08:23 +01:00
Scripts/BFD: Update scripts to new register model (#26791)
(cherry picked from commit 97140cd195)
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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_
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user