mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-26 20:02:25 +01:00
Core/Scripting: Some boss script fixes.
This commit is contained in:
@@ -75,9 +75,9 @@ public:
|
||||
void EnterCombat(Unit* /*who*/)
|
||||
{
|
||||
_EnterCombat();
|
||||
events.ScheduleEvent(EVENT_FIRENOVA, 6 * IN_MILLISECONDS);
|
||||
events.ScheduleEvent(EVENT_FLAMEBUFFET, 3 * IN_MILLISECONDS);
|
||||
events.ScheduleEvent(EVENT_PYROBLAST, 14 * IN_MILLISECONDS);
|
||||
events.ScheduleEvent(EVENT_FIRENOVA, 6000);
|
||||
events.ScheduleEvent(EVENT_FLAMEBUFFET, 3000);
|
||||
events.ScheduleEvent(EVENT_PYROBLAST, 14000);
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/)
|
||||
|
||||
@@ -93,17 +93,13 @@ class boss_akilzon : public CreatureScript
|
||||
|
||||
void Reset()
|
||||
{
|
||||
if (instance)
|
||||
instance->SetData(DATA_AKILZONEVENT, NOT_STARTED);
|
||||
_Reset();
|
||||
|
||||
TargetGUID = 0;
|
||||
CloudGUID = 0;
|
||||
CycloneGUID = 0;
|
||||
DespawnSummons();
|
||||
memset(BirdGUIDs, 0, sizeof(BirdGUIDs));
|
||||
|
||||
StormCount = 0;
|
||||
|
||||
isRaining = false;
|
||||
|
||||
SetWeather(WEATHER_STATE_FINE, 0.0f);
|
||||
@@ -127,9 +123,7 @@ class boss_akilzon : public CreatureScript
|
||||
void JustDied(Unit* /*killer*/)
|
||||
{
|
||||
Talk(SAY_DEATH);
|
||||
if (instance)
|
||||
instance->SetData(DATA_AKILZONEVENT, DONE);
|
||||
DespawnSummons();
|
||||
_JustDied();
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* /*victim*/)
|
||||
@@ -137,19 +131,6 @@ class boss_akilzon : public CreatureScript
|
||||
Talk(SAY_KILL);
|
||||
}
|
||||
|
||||
void DespawnSummons()
|
||||
{
|
||||
for (uint8 i = 0; i < 8; ++i)
|
||||
{
|
||||
Unit* bird = Unit::GetUnit(*me, BirdGUIDs[i]);
|
||||
if (bird && bird->IsAlive())
|
||||
{
|
||||
bird->SetVisible(false);
|
||||
bird->setDeathState(JUST_DIED);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void SetWeather(uint32 weather, float grade)
|
||||
{
|
||||
Map* map = me->GetMap();
|
||||
@@ -187,7 +168,8 @@ class boss_akilzon : public CreatureScript
|
||||
cell.Visit(p, world_unit_searcher, *me->GetMap(), *me, SIZE_OF_GRIDS);
|
||||
cell.Visit(p, grid_unit_searcher, *me->GetMap(), *me, SIZE_OF_GRIDS);
|
||||
}
|
||||
//dealdamege
|
||||
|
||||
// deal damage
|
||||
for (std::list<Unit*>::const_iterator i = tempUnitMap.begin(); i != tempUnitMap.end(); ++i)
|
||||
{
|
||||
if (Unit* target = (*i))
|
||||
@@ -196,6 +178,7 @@ class boss_akilzon : public CreatureScript
|
||||
Cloud->CastCustomSpell(target, SPELL_ZAP, &bp0, NULL, NULL, true, 0, 0, me->GetGUID());
|
||||
}
|
||||
}
|
||||
|
||||
// visual
|
||||
float x, y, z;
|
||||
z = me->GetPositionZ();
|
||||
@@ -214,7 +197,9 @@ class boss_akilzon : public CreatureScript
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
++StormCount;
|
||||
|
||||
if (StormCount > 10)
|
||||
{
|
||||
StormCount = 0; // finish
|
||||
|
||||
@@ -21,8 +21,14 @@
|
||||
|
||||
enum Spells
|
||||
{
|
||||
SPELL_POISON_CLOUD = 3815,
|
||||
SPELL_FRENZIED_RAGE = 3490
|
||||
SPELL_POISON_CLOUD = 3815,
|
||||
SPELL_FRENZIED_RAGE = 3490
|
||||
};
|
||||
|
||||
enum Events
|
||||
{
|
||||
EVENT_POISON_CLOUD = 1,
|
||||
EVENT_FRENZIED_RAGE = 2
|
||||
};
|
||||
|
||||
class boss_aku_mai : public CreatureScript
|
||||
@@ -30,41 +36,25 @@ class boss_aku_mai : public CreatureScript
|
||||
public:
|
||||
boss_aku_mai() : CreatureScript("boss_aku_mai") { }
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const
|
||||
struct boss_aku_maiAI : public BossAI
|
||||
{
|
||||
return new boss_aku_maiAI (creature);
|
||||
}
|
||||
|
||||
struct boss_aku_maiAI : public ScriptedAI
|
||||
{
|
||||
boss_aku_maiAI(Creature* creature) : ScriptedAI(creature)
|
||||
{
|
||||
instance = creature->GetInstanceScript();
|
||||
}
|
||||
|
||||
uint32 poisonCloudTimer;
|
||||
bool IsEnraged;
|
||||
|
||||
InstanceScript* instance;
|
||||
boss_aku_maiAI(Creature* creature) : BossAI(creature, TYPE_AKU_MAI) { }
|
||||
|
||||
void Reset()
|
||||
{
|
||||
poisonCloudTimer = urand(5000, 9000);
|
||||
IsEnraged = false;
|
||||
if (instance)
|
||||
instance->SetData(TYPE_AKU_MAI, NOT_STARTED);
|
||||
_Reset();
|
||||
}
|
||||
|
||||
void EnterCombat(Unit* /*who*/)
|
||||
{
|
||||
if (instance)
|
||||
instance->SetData(TYPE_AKU_MAI, IN_PROGRESS);
|
||||
events.ScheduleEvent(EVENT_POISON_CLOUD, urand(5000, 9000));
|
||||
_EnterCombat();
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/)
|
||||
{
|
||||
if (instance)
|
||||
instance->SetData(TYPE_AKU_MAI, DONE);
|
||||
_JustDied();
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff)
|
||||
@@ -72,21 +62,38 @@ public:
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
if (poisonCloudTimer < diff)
|
||||
{
|
||||
DoCastVictim(SPELL_POISON_CLOUD);
|
||||
poisonCloudTimer = urand(25000, 50000);
|
||||
} else poisonCloudTimer -= diff;
|
||||
events.Update(diff);
|
||||
|
||||
if (!IsEnraged && HealthBelowPct(30))
|
||||
{
|
||||
DoCast(me, SPELL_FRENZIED_RAGE);
|
||||
IsEnraged = true;
|
||||
}
|
||||
events.ScheduleEvent(EVENT_FRENZIED_RAGE, 100);
|
||||
|
||||
while (uint32 eventId = events.ExecuteEvent())
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_POISON_CLOUD:
|
||||
DoCastVictim(SPELL_POISON_CLOUD);
|
||||
events.ScheduleEvent(EVENT_POISON_CLOUD, urand(25000, 50000));
|
||||
break;
|
||||
case EVENT_FRENZIED_RAGE:
|
||||
DoCast(me, SPELL_FRENZIED_RAGE);
|
||||
IsEnraged = true;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
private:
|
||||
bool IsEnraged;
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const
|
||||
{
|
||||
return new boss_aku_maiAI (creature);
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_aku_mai()
|
||||
|
||||
@@ -135,12 +135,12 @@ public:
|
||||
}
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const
|
||||
{
|
||||
return new boss_aeonusAI (creature);
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const
|
||||
{
|
||||
return new boss_aeonusAI (creature);
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_aeonus()
|
||||
|
||||
@@ -140,12 +140,12 @@ public:
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const
|
||||
{
|
||||
return new boss_chrono_lord_dejaAI (creature);
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const
|
||||
{
|
||||
return new boss_chrono_lord_dejaAI (creature);
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_chrono_lord_deja()
|
||||
|
||||
@@ -138,13 +138,12 @@ public:
|
||||
}
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const
|
||||
{
|
||||
return new boss_temporusAI (creature);
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const
|
||||
{
|
||||
return new boss_temporusAI (creature);
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_temporus()
|
||||
|
||||
Reference in New Issue
Block a user