*Halls of Stone: Sjonnir The Ironshaper, blizzlike add spawning, by Tartalo

--HG--
branch : trunk
This commit is contained in:
maximius
2009-10-14 14:24:33 -07:00
parent ae71c40669
commit 0f1d8513b2
@@ -45,6 +45,11 @@ enum Creatures
CREATURE_FORGED_IRON_DWARF = 27982 CREATURE_FORGED_IRON_DWARF = 27982
}; };
enum Misc
{
DATA_TIME_BEFORE_OOZE = 150000 //2min 30 secs
};
struct Locations struct Locations
{ {
float x, y, z; float x, y, z;
@@ -56,6 +61,8 @@ static Locations PipeLocations[] =
{1297.7, 595.6, 199.9} //right {1297.7, 595.6, 199.9} //right
}; };
static Locations CenterPoint = {295.21, 667.157, 189.691};
struct TRINITY_DLL_DECL boss_sjonnirAI : public ScriptedAI struct TRINITY_DLL_DECL boss_sjonnirAI : public ScriptedAI
{ {
boss_sjonnirAI(Creature *c) : ScriptedAI(c) boss_sjonnirAI(Creature *c) : ScriptedAI(c)
@@ -71,6 +78,7 @@ struct TRINITY_DLL_DECL boss_sjonnirAI : public ScriptedAI
uint32 uiLightningRingTimer; uint32 uiLightningRingTimer;
uint32 uiSummonTimer; uint32 uiSummonTimer;
uint32 uiFrenzyTimer; uint32 uiFrenzyTimer;
uint32 uiEncounterTimer;
ScriptedInstance* pInstance; ScriptedInstance* pInstance;
@@ -78,6 +86,7 @@ struct TRINITY_DLL_DECL boss_sjonnirAI : public ScriptedAI
{ {
bIsFrenzy = false; bIsFrenzy = false;
uiEncounterTimer = 0;
uiChainLightningTimer = 3000 + rand()%5000; uiChainLightningTimer = 3000 + rand()%5000;
uiLightningShieldTimer = 20000 + rand()%5000; uiLightningShieldTimer = 20000 + rand()%5000;
uiStaticChargeTimer = 20000 + rand()%5000; uiStaticChargeTimer = 20000 + rand()%5000;
@@ -93,6 +102,8 @@ struct TRINITY_DLL_DECL boss_sjonnirAI : public ScriptedAI
{ {
DoScriptText(SAY_AGGRO, m_creature); DoScriptText(SAY_AGGRO, m_creature);
uiEncounterTimer = 0;
if (pInstance) if (pInstance)
pInstance->SetData(DATA_SJONNIR_EVENT, IN_PROGRESS); pInstance->SetData(DATA_SJONNIR_EVENT, IN_PROGRESS);
} }
@@ -136,7 +147,8 @@ struct TRINITY_DLL_DECL boss_sjonnirAI : public ScriptedAI
if (uiSummonTimer < diff) if (uiSummonTimer < diff)
{ {
uint32 uiSummonPipe = rand()%2; uint32 uiSummonPipe = rand()%2;
m_creature->SummonCreature(RAND(CREATURE_FORGED_IRON_DWARF,CREATURE_FORGED_IRON_TROGG,CREATURE_MALFORMED_OOZE), m_creature->SummonCreature(uiEncounterTimer > DATA_TIME_BEFORE_OOZE ? CREATURE_MALFORMED_OOZE :
RAND(CREATURE_FORGED_IRON_DWARF,CREATURE_FORGED_IRON_TROGG),
PipeLocations[uiSummonPipe].x, PipeLocations[uiSummonPipe].y, PipeLocations[uiSummonPipe].z, 0.0f, PipeLocations[uiSummonPipe].x, PipeLocations[uiSummonPipe].y, PipeLocations[uiSummonPipe].z, 0.0f,
TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30000); TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30000);
uiSummonTimer = 20000; uiSummonTimer = 20000;
@@ -152,16 +164,19 @@ struct TRINITY_DLL_DECL boss_sjonnirAI : public ScriptedAI
else uiFrenzyTimer -= diff; else uiFrenzyTimer -= diff;
} }
uiEncounterTimer +=diff;
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
} }
void JustSummoned(Creature* summon) void JustSummoned(Creature* summon)
{ {
summon->GetMotionMaster()->MovePoint(0, CenterPoint.x, CenterPoint.y, CenterPoint.z);
Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0); Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0);
while (pTarget && pTarget->GetTypeId() != TYPEID_PLAYER) /*while (pTarget && pTarget->GetTypeId() != TYPEID_PLAYER)
pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0); pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0);
if (pTarget) if (pTarget)
summon->AI()->AttackStart(pTarget); summon->AI()->AttackStart(pTarget);*/
} }
void JustDied(Unit* killer) void JustDied(Unit* killer)