Core/Scripting: Some boss script fixes.

This commit is contained in:
Malcrom
2013-06-23 11:27:33 -02:30
parent 89466f76ac
commit b669a2142e
6 changed files with 64 additions and 73 deletions

View File

@@ -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*/)

View File

@@ -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

View File

@@ -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()

View File

@@ -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()

View File

@@ -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()

View File

@@ -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()