*Add the second part of the previous commit.

--HG--
branch : trunk
This commit is contained in:
Anubisss
2009-05-01 01:07:09 +02:00
parent 16913c63c3
commit f72cd39122
52 changed files with 388 additions and 215 deletions
@@ -65,10 +65,10 @@ struct TRINITY_DLL_DECL boss_golemaggAI : public ScriptedAI
void JustDied(Unit* Killer) void JustDied(Unit* Killer)
{ {
if(pInstance) if(pInstance)
pInstance->SetData(DATA_GOLEMAGG_DEATH, 0); pInstance->SetData(DATA_GOLEMAGG_DEATH, 0);
} }
void UpdateAI(const uint32 diff) void UpdateAI(const uint32 diff)
{ {
if (!UpdateVictim()) if (!UpdateVictim())
@@ -224,9 +224,13 @@ struct TRINITY_DLL_DECL boss_ragnarosAI : public Scripted_NoMovementAI
for(int i = 0; i < 9;i++) for(int i = 0; i < 9;i++)
{ {
target = SelectUnit(SELECT_TARGET_RANDOM,0); target = SelectUnit(SELECT_TARGET_RANDOM,0);
if(target)
{
Summoned = m_creature->SummonCreature(12143,target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(),0,TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN,900000); Summoned = m_creature->SummonCreature(12143,target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(),0,TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN,900000);
if(Summoned)
((CreatureAI*)Summoned->AI())->AttackStart(target); ((CreatureAI*)Summoned->AI())->AttackStart(target);
} }
}
HasSubmergedOnce = true; HasSubmergedOnce = true;
WasBanished = true; WasBanished = true;
@@ -241,9 +245,13 @@ struct TRINITY_DLL_DECL boss_ragnarosAI : public Scripted_NoMovementAI
for(int i = 0; i < 9;i++) for(int i = 0; i < 9;i++)
{ {
target = SelectUnit(SELECT_TARGET_RANDOM,0); target = SelectUnit(SELECT_TARGET_RANDOM,0);
if(target)
{
Summoned = m_creature->SummonCreature(12143,target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(),0,TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN,900000); Summoned = m_creature->SummonCreature(12143,target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(),0,TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN,900000);
if(Summoned)
((CreatureAI*)Summoned->AI())->AttackStart(target); ((CreatureAI*)Summoned->AI())->AttackStart(target);
} }
}
WasBanished = true; WasBanished = true;
DoCast(m_creature,SPELL_RAGSUBMERGE); DoCast(m_creature,SPELL_RAGSUBMERGE);
@@ -157,6 +157,7 @@ struct TRINITY_DLL_DECL mob_lumpAI : public ScriptedAI
EnterEvadeMode(); EnterEvadeMode();
bReset = false; bReset = false;
m_creature->setFaction(1711); //hostile m_creature->setFaction(1711); //hostile
return;
} }
else Reset_Timer -= diff; else Reset_Timer -= diff;
} }
@@ -75,6 +75,7 @@ struct TRINITY_DLL_DECL mob_webwrapAI : public ScriptedAI
{ {
Unit* victim = NULL; Unit* victim = NULL;
victim = Unit::GetUnit((*m_creature), victimGUID); victim = Unit::GetUnit((*m_creature), victimGUID);
if(victim)
victim->RemoveAurasDueToSpell(SPELL_WEBTRAP); victim->RemoveAurasDueToSpell(SPELL_WEBTRAP);
} }
} }
@@ -115,9 +115,12 @@ struct TRINITY_DLL_DECL boss_amnennar_the_coldbringerAI : public ScriptedAI
Unit* target = NULL; Unit* target = NULL;
target = SelectUnit(SELECT_TARGET_RANDOM,0); target = SelectUnit(SELECT_TARGET_RANDOM,0);
if(target)
{
SummonSpectrals(target); SummonSpectrals(target);
SummonSpectrals(target); SummonSpectrals(target);
SummonSpectrals(target); SummonSpectrals(target);
}
Spectrals = true; Spectrals = true;
} }
@@ -224,6 +224,7 @@ struct TRINITY_DLL_DECL mob_headAI : public ScriptedAI
DoScriptText(textEntry, m_creature, target); DoScriptText(textEntry, m_creature, target);
//DoCast(m_creature,SPELL_HEAD_SPEAKS,true); //DoCast(m_creature,SPELL_HEAD_SPEAKS,true);
Creature *speaker = DoSpawnCreature(HELPER,0,0,0,0,TEMPSUMMON_TIMED_DESPAWN,1000); Creature *speaker = DoSpawnCreature(HELPER,0,0,0,0,TEMPSUMMON_TIMED_DESPAWN,1000);
if(speaker)
speaker->CastSpell(speaker,SPELL_HEAD_SPEAKS,false); speaker->CastSpell(speaker,SPELL_HEAD_SPEAKS,false);
laugh += 3000; laugh += 3000;
} }
@@ -295,6 +296,7 @@ struct TRINITY_DLL_DECL mob_headAI : public ScriptedAI
DoPlaySoundToSet(m_creature, RandomLaught[rand()%3]); DoPlaySoundToSet(m_creature, RandomLaught[rand()%3]);
//DoCast(m_creature,SPELL_HEAD_SPEAKS,true); //this spell remove buff "head" //DoCast(m_creature,SPELL_HEAD_SPEAKS,true); //this spell remove buff "head"
Creature *speaker = DoSpawnCreature(HELPER,0,0,0,0,TEMPSUMMON_TIMED_DESPAWN,1000); Creature *speaker = DoSpawnCreature(HELPER,0,0,0,0,TEMPSUMMON_TIMED_DESPAWN,1000);
if(speaker)
speaker->CastSpell(speaker,SPELL_HEAD_SPEAKS,false); speaker->CastSpell(speaker,SPELL_HEAD_SPEAKS,false);
DoTextEmote("laughts",NULL); DoTextEmote("laughts",NULL);
} else laugh -= diff; } else laugh -= diff;
@@ -421,6 +423,7 @@ struct TRINITY_DLL_DECL boss_headless_horsemanAI : public ScriptedAI
m_creature->SetVisibility(VISIBILITY_ON);break; m_creature->SetVisibility(VISIBILITY_ON);break;
case 1: { case 1: {
Creature *smoke = m_creature->SummonCreature(HELPER,Spawn[1].x,Spawn[1].y,Spawn[1].z,0,TEMPSUMMON_TIMED_DESPAWN,20000); Creature *smoke = m_creature->SummonCreature(HELPER,Spawn[1].x,Spawn[1].y,Spawn[1].z,0,TEMPSUMMON_TIMED_DESPAWN,20000);
if(smoke)
((mob_wisp_invisAI*)smoke->AI())->SetType(3); ((mob_wisp_invisAI*)smoke->AI())->SetType(3);
DoCast(m_creature,SPELL_RHYME_BIG); DoCast(m_creature,SPELL_RHYME_BIG);
break;} break;}
@@ -515,8 +518,10 @@ struct TRINITY_DLL_DECL boss_headless_horsemanAI : public ScriptedAI
//m_creature->GetMotionMaster()->MoveIdle(); test //m_creature->GetMotionMaster()->MoveIdle(); test
SaySound(SAY_DEATH); SaySound(SAY_DEATH);
Creature *flame = DoSpawnCreature(HELPER,0,0,0,0,TEMPSUMMON_TIMED_DESPAWN,60000); Creature *flame = DoSpawnCreature(HELPER,0,0,0,0,TEMPSUMMON_TIMED_DESPAWN,60000);
if(flame)
flame->CastSpell(flame,SPELL_BODY_FLAME,false); flame->CastSpell(flame,SPELL_BODY_FLAME,false);
Creature *wisp = DoSpawnCreature(WISP_INVIS,0,0,0,0,TEMPSUMMON_TIMED_DESPAWN,60000); Creature *wisp = DoSpawnCreature(WISP_INVIS,0,0,0,0,TEMPSUMMON_TIMED_DESPAWN,60000);
if(wisp)
((mob_wisp_invisAI*)wisp->AI())->SetType(4); ((mob_wisp_invisAI*)wisp->AI())->SetType(4);
if(pInstance) if(pInstance)
pInstance->SetData(DATA_HORSEMAN_EVENT, DONE); pInstance->SetData(DATA_HORSEMAN_EVENT, DONE);
@@ -592,11 +597,15 @@ struct TRINITY_DLL_DECL boss_headless_horsemanAI : public ScriptedAI
say_timer = 3000; say_timer = 3000;
Player *plr = SelectRandomPlayer(100.0f,false); Player *plr = SelectRandomPlayer(100.0f,false);
if (count < 3) if (count < 3)
if(plr)
plr->Say(Text[count].text,0); plr->Say(Text[count].text,0);
else { else {
DoCast(m_creature,SPELL_RHYME_BIG); DoCast(m_creature,SPELL_RHYME_BIG);
if(plr)
{
plr->Say(Text[count].text,0); plr->Say(Text[count].text,0);
plr->HandleEmoteCommand(ANIM_EMOTE_SHOUT); plr->HandleEmoteCommand(ANIM_EMOTE_SHOUT);
}
wp_reached = true; wp_reached = true;
IsFlying = true; IsFlying = true;
count = 0; count = 0;
@@ -618,6 +627,7 @@ struct TRINITY_DLL_DECL boss_headless_horsemanAI : public ScriptedAI
if(burn < diff) if(burn < diff)
{ {
Creature *flame = m_creature->SummonCreature(HELPER,Spawn[0].x,Spawn[0].y,Spawn[0].z,0,TEMPSUMMON_TIMED_DESPAWN,17000); Creature *flame = m_creature->SummonCreature(HELPER,Spawn[0].x,Spawn[0].y,Spawn[0].z,0,TEMPSUMMON_TIMED_DESPAWN,17000);
if(flame)
((mob_wisp_invisAI*)flame->AI())->SetType(2); ((mob_wisp_invisAI*)flame->AI())->SetType(2);
burned = true; burned = true;
}else burn -= diff; }else burn -= diff;
@@ -727,10 +737,13 @@ struct TRINITY_DLL_DECL mob_pulsing_pumpkinAI : public ScriptedAI
m_creature->Relocate(x,y,z + 0.35f); m_creature->Relocate(x,y,z + 0.35f);
Despawn(); Despawn();
Creature *debuff = DoSpawnCreature(HELPER,0,0,0,0,TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN,14500); Creature *debuff = DoSpawnCreature(HELPER,0,0,0,0,TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN,14500);
if(debuff)
{
debuff->SetDisplayId(m_creature->GetDisplayId()); debuff->SetDisplayId(m_creature->GetDisplayId());
debuff->CastSpell(debuff,SPELL_PUMPKIN_AURA_GREEN,false); debuff->CastSpell(debuff,SPELL_PUMPKIN_AURA_GREEN,false);
((mob_wisp_invisAI*)debuff->AI())->SetType(1); ((mob_wisp_invisAI*)debuff->AI())->SetType(1);
debuffGUID = debuff->GetGUID(); debuffGUID = debuff->GetGUID();
}
sprouted = false; sprouted = false;
DoCast(m_creature,SPELL_PUMPKIN_AURA,true); DoCast(m_creature,SPELL_PUMPKIN_AURA,true);
DoCast(m_creature,SPELL_SPROUTING); DoCast(m_creature,SPELL_SPROUTING);
@@ -792,8 +805,11 @@ bool GOHello_go_loosely_turned_soil(Player *plr, GameObject* soil)
{ */ { */
plr->AreaExploredOrEventHappens(11405); plr->AreaExploredOrEventHappens(11405);
Creature *horseman = soil->SummonCreature(HH_MOUNTED,FlightPoint[20].x,FlightPoint[20].y,FlightPoint[20].z,0,TEMPSUMMON_MANUAL_DESPAWN,0); Creature *horseman = soil->SummonCreature(HH_MOUNTED,FlightPoint[20].x,FlightPoint[20].y,FlightPoint[20].z,0,TEMPSUMMON_MANUAL_DESPAWN,0);
if(horseman)
{
((boss_headless_horsemanAI*)horseman->AI())->playerGUID = plr->GetGUID(); ((boss_headless_horsemanAI*)horseman->AI())->playerGUID = plr->GetGUID();
((boss_headless_horsemanAI*)horseman->AI())->FlyMode(); ((boss_headless_horsemanAI*)horseman->AI())->FlyMode();
}
//} //}
return true; return true;
} }
@@ -113,59 +113,79 @@ struct TRINITY_DLL_DECL boss_darkmaster_gandlingAI : public ScriptedAI
case 0: case 0:
DoTeleportPlayer(target, 250.0696,0.3921,84.8408,3.149); DoTeleportPlayer(target, 250.0696,0.3921,84.8408,3.149);
Summoned = m_creature->SummonCreature(16119,254.2325,0.3417,84.8407,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000); Summoned = m_creature->SummonCreature(16119,254.2325,0.3417,84.8407,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);
if(Summoned)
((CreatureAI*)Summoned->AI())->AttackStart(target); ((CreatureAI*)Summoned->AI())->AttackStart(target);
Summoned = m_creature->SummonCreature(16119,257.7133,4.0226,84.8407,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000); Summoned = m_creature->SummonCreature(16119,257.7133,4.0226,84.8407,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);
if(Summoned)
((CreatureAI*)Summoned->AI())->AttackStart(target); ((CreatureAI*)Summoned->AI())->AttackStart(target);
Summoned = m_creature->SummonCreature(16119,258.6702,-2.60656,84.8407,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000); Summoned = m_creature->SummonCreature(16119,258.6702,-2.60656,84.8407,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);
if(Summoned)
((CreatureAI*)Summoned->AI())->AttackStart(target); ((CreatureAI*)Summoned->AI())->AttackStart(target);
break; break;
case 1: case 1:
DoTeleportPlayer(target, 181.4220,-91.9481,84.8410,1.608); DoTeleportPlayer(target, 181.4220,-91.9481,84.8410,1.608);
Summoned = m_creature->SummonCreature(16119,184.0519,-73.5649,84.8407,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000); Summoned = m_creature->SummonCreature(16119,184.0519,-73.5649,84.8407,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);
if(Summoned)
((CreatureAI*)Summoned->AI())->AttackStart(target); ((CreatureAI*)Summoned->AI())->AttackStart(target);
Summoned = m_creature->SummonCreature(16119,179.5951,-73.7045,84.8407,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000); Summoned = m_creature->SummonCreature(16119,179.5951,-73.7045,84.8407,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);
if(Summoned)
((CreatureAI*)Summoned->AI())->AttackStart(target); ((CreatureAI*)Summoned->AI())->AttackStart(target);
Summoned = m_creature->SummonCreature(16119,180.6452,-78.2143,84.8407,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000); Summoned = m_creature->SummonCreature(16119,180.6452,-78.2143,84.8407,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);
if(Summoned)
((CreatureAI*)Summoned->AI())->AttackStart(target); ((CreatureAI*)Summoned->AI())->AttackStart(target);
Summoned = m_creature->SummonCreature(16119,283.2274,-78.1518,84.8407,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000); Summoned = m_creature->SummonCreature(16119,283.2274,-78.1518,84.8407,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);
if(Summoned)
((CreatureAI*)Summoned->AI())->AttackStart(target); ((CreatureAI*)Summoned->AI())->AttackStart(target);
break; break;
case 2: case 2:
DoTeleportPlayer(target, 95.1547,-1.8173,85.2289,0.043); DoTeleportPlayer(target, 95.1547,-1.8173,85.2289,0.043);
Summoned = m_creature->SummonCreature(16119,100.9404,-1.8016,85.2289,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000); Summoned = m_creature->SummonCreature(16119,100.9404,-1.8016,85.2289,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);
if(Summoned)
((CreatureAI*)Summoned->AI())->AttackStart(target); ((CreatureAI*)Summoned->AI())->AttackStart(target);
Summoned = m_creature->SummonCreature(16119,101.3729,0.4882,85.2289,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000); Summoned = m_creature->SummonCreature(16119,101.3729,0.4882,85.2289,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);
if(Summoned)
((CreatureAI*)Summoned->AI())->AttackStart(target); ((CreatureAI*)Summoned->AI())->AttackStart(target);
Summoned = m_creature->SummonCreature(16119,101.4596,-4.4740,85.2289,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000); Summoned = m_creature->SummonCreature(16119,101.4596,-4.4740,85.2289,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);
if(Summoned)
((CreatureAI*)Summoned->AI())->AttackStart(target); ((CreatureAI*)Summoned->AI())->AttackStart(target);
break; break;
case 3: case 3:
DoTeleportPlayer(target, 250.0696,0.3921,72.6722,3.149); DoTeleportPlayer(target, 250.0696,0.3921,72.6722,3.149);
Summoned = m_creature->SummonCreature(16119,240.34481,0.7368,72.6722,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000); Summoned = m_creature->SummonCreature(16119,240.34481,0.7368,72.6722,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);
if(Summoned)
((CreatureAI*)Summoned->AI())->AttackStart(target); ((CreatureAI*)Summoned->AI())->AttackStart(target);
Summoned = m_creature->SummonCreature(16119,240.3633,-2.9520,72.6722,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000); Summoned = m_creature->SummonCreature(16119,240.3633,-2.9520,72.6722,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);
if(Summoned)
((CreatureAI*)Summoned->AI())->AttackStart(target); ((CreatureAI*)Summoned->AI())->AttackStart(target);
Summoned = m_creature->SummonCreature(16119,240.6702,3.34949,72.6722,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000); Summoned = m_creature->SummonCreature(16119,240.6702,3.34949,72.6722,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);
if(Summoned)
((CreatureAI*)Summoned->AI())->AttackStart(target); ((CreatureAI*)Summoned->AI())->AttackStart(target);
break; break;
case 4: case 4:
DoTeleportPlayer(target, 181.4220,-91.9481,70.7734,1.608); DoTeleportPlayer(target, 181.4220,-91.9481,70.7734,1.608);
Summoned = m_creature->SummonCreature(16119,184.0519,-73.5649,70.7734,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000); Summoned = m_creature->SummonCreature(16119,184.0519,-73.5649,70.7734,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);
if(Summoned)
((CreatureAI*)Summoned->AI())->AttackStart(target); ((CreatureAI*)Summoned->AI())->AttackStart(target);
Summoned = m_creature->SummonCreature(16119,179.5951,-73.7045,70.7734,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000); Summoned = m_creature->SummonCreature(16119,179.5951,-73.7045,70.7734,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);
if(Summoned)
((CreatureAI*)Summoned->AI())->AttackStart(target); ((CreatureAI*)Summoned->AI())->AttackStart(target);
Summoned = m_creature->SummonCreature(16119,180.6452,-78.2143,70.7734,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000); Summoned = m_creature->SummonCreature(16119,180.6452,-78.2143,70.7734,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);
if(Summoned)
((CreatureAI*)Summoned->AI())->AttackStart(target); ((CreatureAI*)Summoned->AI())->AttackStart(target);
Summoned = m_creature->SummonCreature(16119,283.2274,-78.1518,70.7734,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000); Summoned = m_creature->SummonCreature(16119,283.2274,-78.1518,70.7734,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);
if(Summoned)
((CreatureAI*)Summoned->AI())->AttackStart(target); ((CreatureAI*)Summoned->AI())->AttackStart(target);
break; break;
case 5: case 5:
DoTeleportPlayer(target, 106.1541,-1.8994,75.3663,0.043); DoTeleportPlayer(target, 106.1541,-1.8994,75.3663,0.043);
Summoned = m_creature->SummonCreature(16119,115.3945,-1.5555,75.3663,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000); Summoned = m_creature->SummonCreature(16119,115.3945,-1.5555,75.3663,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);
if(Summoned)
((CreatureAI*)Summoned->AI())->AttackStart(target); ((CreatureAI*)Summoned->AI())->AttackStart(target);
Summoned = m_creature->SummonCreature(16119,257.7133,1.8066,75.3663,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000); Summoned = m_creature->SummonCreature(16119,257.7133,1.8066,75.3663,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);
if(Summoned)
((CreatureAI*)Summoned->AI())->AttackStart(target); ((CreatureAI*)Summoned->AI())->AttackStart(target);
Summoned = m_creature->SummonCreature(16119,258.6702,-5.1001,75.3663,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000); Summoned = m_creature->SummonCreature(16119,258.6702,-5.1001,75.3663,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);
if(Summoned)
((CreatureAI*)Summoned->AI())->AttackStart(target); ((CreatureAI*)Summoned->AI())->AttackStart(target);
break; break;
} }
@@ -122,6 +122,7 @@ struct TRINITY_DLL_DECL boss_jandicebarovAI : public ScriptedAI
for(int i = 0; i < 10;i++) for(int i = 0; i < 10;i++)
{ {
target = SelectUnit(SELECT_TARGET_RANDOM,0); target = SelectUnit(SELECT_TARGET_RANDOM,0);
if(target)
SummonIllusions(target); SummonIllusions(target);
} }
Invisible = true; Invisible = true;
@@ -74,6 +74,7 @@ struct TRINITY_DLL_DECL boss_kormokAI : public ScriptedAI
} }
Rand1 = 0; Rand1 = 0;
SummonedMinions = DoSpawnCreature(16119, Rand1X, Rand1Y, 0, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 120000); SummonedMinions = DoSpawnCreature(16119, Rand1X, Rand1Y, 0, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 120000);
if(SummonedMinions)
((CreatureAI*)SummonedMinions->AI())->AttackStart(victim); ((CreatureAI*)SummonedMinions->AI())->AttackStart(victim);
} }
@@ -94,6 +95,7 @@ struct TRINITY_DLL_DECL boss_kormokAI : public ScriptedAI
} }
Rand2 = 0; Rand2 = 0;
SummonedMages = DoSpawnCreature(16120, Rand2X, Rand2Y, 0, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 120000); SummonedMages = DoSpawnCreature(16120, Rand2X, Rand2Y, 0, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 120000);
if(SummonedMages)
((CreatureAI*)SummonedMages->AI())->AttackStart(victim); ((CreatureAI*)SummonedMages->AI())->AttackStart(victim);
} }
@@ -140,8 +140,10 @@ struct TRINITY_DLL_DECL mob_mature_netherwing_drakeAI : public ScriptedAI
if(Evade) if(Evade)
if(ResetTimer < diff) if(ResetTimer < diff)
{
EnterEvadeMode(); EnterEvadeMode();
else ResetTimer -= diff; return;
}else ResetTimer -= diff;
if(!UpdateVictim()) if(!UpdateVictim())
return; return;
@@ -695,11 +697,15 @@ struct TRINITY_DLL_DECL npc_overlord_morghorAI : public ScriptedAI
m_creature->SetUInt32Value(UNIT_NPC_FLAGS, 0); m_creature->SetUInt32Value(UNIT_NPC_FLAGS, 0);
m_creature->SetUInt32Value(UNIT_FIELD_BYTES_1,0); m_creature->SetUInt32Value(UNIT_FIELD_BYTES_1,0);
Unit* Illidan = m_creature->SummonCreature(C_ILLIDAN, -5107.83, 602.584, 85.2393, 4.92598, TEMPSUMMON_CORPSE_DESPAWN, 0); Unit* Illidan = m_creature->SummonCreature(C_ILLIDAN, -5107.83, 602.584, 85.2393, 4.92598, TEMPSUMMON_CORPSE_DESPAWN, 0);
if(Illidan)
{
IllidanGUID = Illidan->GetGUID(); IllidanGUID = Illidan->GetGUID();
Illidan->SetVisibility(VISIBILITY_OFF); Illidan->SetVisibility(VISIBILITY_OFF);
}
if(PlayerGUID) if(PlayerGUID)
{ {
Player* player = Unit::GetPlayer(PlayerGUID); Player* player = Unit::GetPlayer(PlayerGUID);
if(player)
DoScriptText(OVERLORD_SAY_1, m_creature, player); DoScriptText(OVERLORD_SAY_1, m_creature, player);
} }
ConversationTimer = 4200; ConversationTimer = 4200;
@@ -77,6 +77,7 @@ struct TRINITY_DLL_DECL mob_yennikuAI : public ScriptedAI
EnterEvadeMode(); EnterEvadeMode();
bReset = false; bReset = false;
m_creature->setFaction(28); //troll, bloodscalp m_creature->setFaction(28); //troll, bloodscalp
return;
} }
else Reset_Timer -= diff; else Reset_Timer -= diff;
@@ -177,7 +177,6 @@ CreatureAI* GetAI_boss_baron_rivendare(Creature *_Creature)
return new boss_baron_rivendareAI (_Creature); return new boss_baron_rivendareAI (_Creature);
} }
void AddSC_boss_baron_rivendare() void AddSC_boss_baron_rivendare()
{ {
Script *newscript; Script *newscript;
@@ -116,7 +116,6 @@ CreatureAI* GetAI_boss_baroness_anastari(Creature *_Creature)
return new boss_baroness_anastariAI (_Creature); return new boss_baroness_anastariAI (_Creature);
} }
void AddSC_boss_baroness_anastari() void AddSC_boss_baroness_anastari()
{ {
Script *newscript; Script *newscript;
@@ -210,7 +210,6 @@ CreatureAI* GetAI_boss_cannon_master_willey(Creature *_Creature)
return new boss_cannon_master_willeyAI (_Creature); return new boss_cannon_master_willeyAI (_Creature);
} }
void AddSC_boss_cannon_master_willey() void AddSC_boss_cannon_master_willey()
{ {
Script *newscript; Script *newscript;
@@ -122,7 +122,6 @@ CreatureAI* GetAI_boss_magistrate_barthilas(Creature *_Creature)
return new boss_magistrate_barthilasAI (_Creature); return new boss_magistrate_barthilasAI (_Creature);
} }
void AddSC_boss_magistrate_barthilas() void AddSC_boss_magistrate_barthilas()
{ {
Script *newscript; Script *newscript;
@@ -97,7 +97,6 @@ CreatureAI* GetAI_boss_maleki_the_pallid(Creature *_Creature)
return new boss_maleki_the_pallidAI (_Creature); return new boss_maleki_the_pallidAI (_Creature);
} }
void AddSC_boss_maleki_the_pallid() void AddSC_boss_maleki_the_pallid()
{ {
Script *newscript; Script *newscript;
@@ -94,9 +94,7 @@ struct TRINITY_DLL_DECL boss_nerubenkanAI : public ScriptedAI
//EncasingWebs //EncasingWebs
if (EncasingWebs_Timer < diff) if (EncasingWebs_Timer < diff)
{ {
DoCast(m_creature->getVictim(),SPELL_ENCASINGWEBS); DoCast(m_creature->getVictim(),SPELL_ENCASINGWEBS);
EncasingWebs_Timer = 30000; EncasingWebs_Timer = 30000;
}else EncasingWebs_Timer -= diff; }else EncasingWebs_Timer -= diff;
@@ -105,7 +103,6 @@ struct TRINITY_DLL_DECL boss_nerubenkanAI : public ScriptedAI
{ {
if (rand()%100 < 75) if (rand()%100 < 75)
DoCast(m_creature->getVictim(),SPELL_PIERCEARMOR); DoCast(m_creature->getVictim(),SPELL_PIERCEARMOR);
PierceArmor_Timer = 35000; PierceArmor_Timer = 35000;
}else PierceArmor_Timer -= diff; }else PierceArmor_Timer -= diff;
@@ -131,7 +128,6 @@ CreatureAI* GetAI_boss_nerubenkan(Creature *_Creature)
return new boss_nerubenkanAI (_Creature); return new boss_nerubenkanAI (_Creature);
} }
void AddSC_boss_nerubenkan() void AddSC_boss_nerubenkan()
{ {
Script *newscript; Script *newscript;
@@ -145,10 +145,6 @@ CreatureAI* GetAI_boss_silver_hand_bossesAI(Creature *_Creature)
return new boss_silver_hand_bossesAI (_Creature); return new boss_silver_hand_bossesAI (_Creature);
} }
/*#####
#
#####*/
void AddSC_boss_order_of_silver_hand() void AddSC_boss_order_of_silver_hand()
{ {
Script *newscript; Script *newscript;
@@ -133,7 +133,6 @@ CreatureAI* GetAI_boss_postmaster_malown(Creature *_Creature)
return new boss_postmaster_malownAI (_Creature); return new boss_postmaster_malownAI (_Creature);
} }
void AddSC_boss_postmaster_malown() void AddSC_boss_postmaster_malown()
{ {
Script *newscript; Script *newscript;
@@ -88,7 +88,6 @@ CreatureAI* GetAI_boss_ramstein_the_gorger(Creature *_Creature)
return new boss_ramstein_the_gorgerAI (_Creature); return new boss_ramstein_the_gorgerAI (_Creature);
} }
void AddSC_boss_ramstein_the_gorger() void AddSC_boss_ramstein_the_gorger()
{ {
Script *newscript; Script *newscript;
@@ -72,7 +72,6 @@ CreatureAI* GetAI_boss_timmy_the_cruel(Creature *_Creature)
return new boss_timmy_the_cruelAI (_Creature); return new boss_timmy_the_cruelAI (_Creature);
} }
void AddSC_boss_timmy_the_cruel() void AddSC_boss_timmy_the_cruel()
{ {
Script *newscript; Script *newscript;
@@ -262,6 +262,7 @@ struct TRINITY_DLL_DECL boss_sacrolashAI : public ScriptedAI
m_creature->InterruptSpell(CURRENT_GENERIC_SPELL); m_creature->InterruptSpell(CURRENT_GENERIC_SPELL);
Unit* target = NULL; Unit* target = NULL;
target = SelectUnit(SELECT_TARGET_RANDOM, 0); target = SelectUnit(SELECT_TARGET_RANDOM, 0);
if(target)
DoCast(target, SPELL_CONFLAGRATION); DoCast(target, SPELL_CONFLAGRATION);
ConflagrationTimer = 30000+(rand()%5000); ConflagrationTimer = 30000+(rand()%5000);
} }
@@ -275,10 +276,12 @@ struct TRINITY_DLL_DECL boss_sacrolashAI : public ScriptedAI
{ {
Unit* target = NULL; Unit* target = NULL;
target = SelectUnit(SELECT_TARGET_RANDOM, 0); target = SelectUnit(SELECT_TARGET_RANDOM, 0);
if(target)
DoCast(target, SPELL_SHADOW_NOVA); DoCast(target, SPELL_SHADOW_NOVA);
if(!SisterDeath) if(!SisterDeath)
{ {
if(target)
DoScriptText(EMOTE_SHADOW_NOVA, m_creature, target); DoScriptText(EMOTE_SHADOW_NOVA, m_creature, target);
DoScriptText(YELL_SHADOW_NOVA, m_creature); DoScriptText(YELL_SHADOW_NOVA, m_creature);
} }
@@ -293,6 +296,7 @@ struct TRINITY_DLL_DECL boss_sacrolashAI : public ScriptedAI
{ {
Unit* target = NULL; Unit* target = NULL;
target = SelectUnit(SELECT_TARGET_RANDOM, 0); target = SelectUnit(SELECT_TARGET_RANDOM, 0);
if(target)
DoCast(target, SPELL_CONFOUNDING_BLOW); DoCast(target, SPELL_CONFOUNDING_BLOW);
ConfoundingblowTimer = 20000 + (rand()%5000); ConfoundingblowTimer = 20000 + (rand()%5000);
} }
@@ -306,6 +310,7 @@ struct TRINITY_DLL_DECL boss_sacrolashAI : public ScriptedAI
{ {
target = SelectUnit(SELECT_TARGET_RANDOM, 0); target = SelectUnit(SELECT_TARGET_RANDOM, 0);
temp = DoSpawnCreature(MOB_SHADOW_IMAGE,0,0,0,0,TEMPSUMMON_CORPSE_DESPAWN,10000); temp = DoSpawnCreature(MOB_SHADOW_IMAGE,0,0,0,0,TEMPSUMMON_CORPSE_DESPAWN,10000);
if(temp && target)
temp->AI()->AttackStart(target); temp->AI()->AttackStart(target);
} }
ShadowimageTimer = 20000; ShadowimageTimer = 20000;
@@ -595,6 +600,7 @@ struct TRINITY_DLL_DECL boss_alythessAI : public Scripted_NoMovementAI
{ {
Unit* target = NULL; Unit* target = NULL;
target = SelectUnit(SELECT_TARGET_RANDOM, 0); target = SelectUnit(SELECT_TARGET_RANDOM, 0);
if(target)
DoCast(target, SPELL_SHADOW_NOVA); DoCast(target, SPELL_SHADOW_NOVA);
ShadownovaTimer= 30000+(rand()%5000); ShadownovaTimer= 30000+(rand()%5000);
} }
@@ -609,11 +615,13 @@ struct TRINITY_DLL_DECL boss_alythessAI : public Scripted_NoMovementAI
m_creature->InterruptSpell(CURRENT_GENERIC_SPELL); m_creature->InterruptSpell(CURRENT_GENERIC_SPELL);
Unit* target = NULL; Unit* target = NULL;
target = SelectUnit(SELECT_TARGET_RANDOM, 0); target = SelectUnit(SELECT_TARGET_RANDOM, 0);
if(target)
DoCast(target, SPELL_CONFLAGRATION); DoCast(target, SPELL_CONFLAGRATION);
ConflagrationTimer = 30000+(rand()%5000); ConflagrationTimer = 30000+(rand()%5000);
if(!SisterDeath) if(!SisterDeath)
{ {
if(target)
DoScriptText(EMOTE_CONFLAGRATION, m_creature, target); DoScriptText(EMOTE_CONFLAGRATION, m_creature, target);
DoScriptText(YELL_CANFLAGRATION, m_creature); DoScriptText(YELL_CANFLAGRATION, m_creature);
} }
@@ -318,7 +318,12 @@ struct TRINITY_DLL_DECL boss_felmystAI : public ScriptedAI
m_creature->CastSpell(Vapor, SPELL_VAPOR_CHANNEL, false); // core bug m_creature->CastSpell(Vapor, SPELL_VAPOR_CHANNEL, false); // core bug
Vapor->CastSpell(Vapor, SPELL_VAPOR_TRIGGER, true); Vapor->CastSpell(Vapor, SPELL_VAPOR_TRIGGER, true);
} }
}else EnterEvadeMode(); }
else
{
EnterEvadeMode();
return;
}
Timer[EVENT_FLIGHT_SEQUENCE] = 10000; Timer[EVENT_FLIGHT_SEQUENCE] = 10000;
break;} break;}
case 3: { case 3: {
@@ -339,7 +344,12 @@ struct TRINITY_DLL_DECL boss_felmystAI : public ScriptedAI
m_creature->CastSpell(Vapor, SPELL_VAPOR_CHANNEL, false); // core bug m_creature->CastSpell(Vapor, SPELL_VAPOR_CHANNEL, false); // core bug
Vapor->CastSpell(Vapor, SPELL_VAPOR_TRIGGER, true); Vapor->CastSpell(Vapor, SPELL_VAPOR_TRIGGER, true);
} }
}else EnterEvadeMode(); }
else
{
EnterEvadeMode();
return;
}
Timer[EVENT_FLIGHT_SEQUENCE] = 10000; Timer[EVENT_FLIGHT_SEQUENCE] = 10000;
break;} break;}
case 4: case 4:
@@ -357,7 +367,11 @@ struct TRINITY_DLL_DECL boss_felmystAI : public ScriptedAI
float x, y, z; float x, y, z;
target->GetContactPoint(m_creature, x, y, z, 70); target->GetContactPoint(m_creature, x, y, z, 70);
m_creature->GetMotionMaster()->MovePoint(0, x, y, z+10); m_creature->GetMotionMaster()->MovePoint(0, x, y, z+10);
}else EnterEvadeMode(); }else
{
EnterEvadeMode();
return;
}
Timer[EVENT_FLIGHT_SEQUENCE] = 0; Timer[EVENT_FLIGHT_SEQUENCE] = 0;
break;} break;}
case 6: case 6:
@@ -391,7 +405,12 @@ struct TRINITY_DLL_DECL boss_felmystAI : public ScriptedAI
float x, y, z; float x, y, z;
target->GetContactPoint(m_creature, x, y, z); target->GetContactPoint(m_creature, x, y, z);
m_creature->GetMotionMaster()->MovePoint(0, x, y, z); m_creature->GetMotionMaster()->MovePoint(0, x, y, z);
}else EnterEvadeMode(); }
else
{
EnterEvadeMode();
return;
}
Timer[EVENT_FLIGHT_SEQUENCE] = 0; Timer[EVENT_FLIGHT_SEQUENCE] = 0;
break; break;
case 10: case 10:
@@ -396,6 +396,7 @@ struct TRINITY_DLL_DECL boss_sathrovarrAI : public ScriptedAI
{ {
DoTextEmote("is unable to find Kalecgos", NULL); DoTextEmote("is unable to find Kalecgos", NULL);
EnterEvadeMode(); EnterEvadeMode();
return;
} }
} }
CheckTimer = 1000; CheckTimer = 1000;
@@ -594,6 +595,7 @@ void boss_kalecgosAI::UpdateAI(const uint32 diff)
{ {
error_log("TSCR: Didn't find Shathrowar. Kalecgos event reseted."); error_log("TSCR: Didn't find Shathrowar. Kalecgos event reseted.");
EnterEvadeMode(); EnterEvadeMode();
return;
} }
} }
CheckTimer = 1000; CheckTimer = 1000;
@@ -627,7 +629,7 @@ void boss_kalecgosAI::UpdateAI(const uint32 diff)
{ {
//this is a hack. we need to find a victim without aura in core //this is a hack. we need to find a victim without aura in core
Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0); Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0);
if( ( target != m_creature->getVictim() ) && target->isAlive() && !(target->HasAura(AURA_SPECTRAL_EXHAUSTION, 0)) ) if( ( target && target != m_creature->getVictim() ) && target->isAlive() && !(target->HasAura(AURA_SPECTRAL_EXHAUSTION, 0)) )
{ {
DoCast(target, SPELL_SPECTRAL_BLAST); DoCast(target, SPELL_SPECTRAL_BLAST);
SpectralBlastTimer = 20000+(rand()%5000); SpectralBlastTimer = 20000+(rand()%5000);
@@ -545,6 +545,7 @@ struct TRINITY_DLL_DECL boss_kiljaedenAI : public Scripted_NoMovementAI
} }
target->GetPosition(x,y,z); target->GetPosition(x,y,z);
Creature* SinisterReflection = m_creature->SummonCreature(CREATURE_SINISTER_REFLECTION, x,y,z,0, TEMPSUMMON_CORPSE_DESPAWN, 0); Creature* SinisterReflection = m_creature->SummonCreature(CREATURE_SINISTER_REFLECTION, x,y,z,0, TEMPSUMMON_CORPSE_DESPAWN, 0);
if(SinisterReflection)
SinisterReflection->AI()->AttackStart(target); SinisterReflection->AI()->AttackStart(target);
} }
} }
@@ -276,8 +276,12 @@ struct TRINITY_DLL_DECL boss_alarAI : public ScriptedAI
m_creature->Relocate(target->GetPositionX(), target->GetPositionY(), target->GetPositionZ()); m_creature->Relocate(target->GetPositionX(), target->GetPositionY(), target->GetPositionZ());
m_creature->StopMoving(); m_creature->StopMoving();
WaitEvent = WE_LAND; WaitEvent = WE_LAND;
}else EnterEvadeMode(); }
else
{
EnterEvadeMode();
return; return;
}
case WE_LAND: case WE_LAND:
WaitEvent = WE_SUMMON; WaitEvent = WE_SUMMON;
WaitTimer = 2000; WaitTimer = 2000;
@@ -349,6 +353,7 @@ struct TRINITY_DLL_DECL boss_alarAI : public ScriptedAI
if(Charge_Timer < diff) if(Charge_Timer < diff)
{ {
Unit *target= SelectUnit(SELECT_TARGET_RANDOM, 1, GetSpellMaxRange(SPELL_CHARGE), true); Unit *target= SelectUnit(SELECT_TARGET_RANDOM, 1, GetSpellMaxRange(SPELL_CHARGE), true);
if(target)
DoCast(target, SPELL_CHARGE); DoCast(target, SPELL_CHARGE);
Charge_Timer = 30000; Charge_Timer = 30000;
}else Charge_Timer -= diff; }else Charge_Timer -= diff;
@@ -405,7 +410,7 @@ struct TRINITY_DLL_DECL boss_alarAI : public ScriptedAI
else else
{ {
Unit *target = NULL; Unit *target = NULL;
if(Phase1 && (target = m_creature->SelectNearestTarget(5))) if(Phase1 && target && (target = m_creature->SelectNearestTarget(5)))
m_creature->AI()->AttackStart(target); m_creature->AI()->AttackStart(target);
else else
{ {
@@ -383,6 +383,7 @@ struct TRINITY_DLL_DECL boss_high_astromancer_solarianAI : public ScriptedAI
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_VOIDWALKER); m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_VOIDWALKER);
m_creature->SetFloatValue(OBJECT_FIELD_SCALE_X, defaultsize*2.5f); m_creature->SetFloatValue(OBJECT_FIELD_SCALE_X, defaultsize*2.5f);
} }
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
} }
}; };
@@ -258,6 +258,8 @@ struct TRINITY_DLL_DECL advisorbase_ai : public ScriptedAI
if (!Target) if (!Target)
Target = m_creature->getVictim(); Target = m_creature->getVictim();
DoResetThreat(); DoResetThreat();
if(!Target)
return;
AttackStart(Target); AttackStart(Target);
m_creature->GetMotionMaster()->Clear(); m_creature->GetMotionMaster()->Clear();
m_creature->GetMotionMaster()->MoveChase(Target); m_creature->GetMotionMaster()->MoveChase(Target);
@@ -436,6 +438,7 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
{ {
summoned->setFaction(m_creature->getFaction()); summoned->setFaction(m_creature->getFaction());
Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0); Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0);
if(target)
summoned->AI()->AttackStart(target); summoned->AI()->AttackStart(target);
} }
summons.Summon(summoned); summons.Summon(summoned);
@@ -730,7 +733,8 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
Advisor = (Creature*)(Unit::GetUnit((*m_creature), AdvisorGuid[i])); Advisor = (Creature*)(Unit::GetUnit((*m_creature), AdvisorGuid[i]));
if (!Advisor) if (!Advisor)
error_log("TSCR: Kael'Thas Advisor %u does not exist. Possibly despawned? Incorrectly Killed?", i); error_log("TSCR: Kael'Thas Advisor %u does not exist. Possibly despawned? Incorrectly Killed?", i);
else ((advisorbase_ai*)Advisor->AI())->Revive(Target); else if(Target)
((advisorbase_ai*)Advisor->AI())->Revive(Target);
} }
PhaseSubphase = 1; PhaseSubphase = 1;
@@ -815,6 +819,7 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
Unit* target =SelectUnit(SELECT_TARGET_RANDOM, 1, 70, true); Unit* target =SelectUnit(SELECT_TARGET_RANDOM, 1, 70, true);
if(!target) target = m_creature->getVictim(); if(!target) target = m_creature->getVictim();
debug_log("TSCR: Kael'Thas mind control not supported."); debug_log("TSCR: Kael'Thas mind control not supported.");
if(target)
DoCast(target, SPELL_MIND_CONTROL); DoCast(target, SPELL_MIND_CONTROL);
} }
@@ -1078,8 +1083,11 @@ struct TRINITY_DLL_DECL boss_thaladred_the_darkenerAI : public advisorbase_ai
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0, 100, true)) if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0, 100, true))
{ {
DoResetThreat(); DoResetThreat();
if(target)
{
m_creature->AddThreat(target, 5000000.0f); m_creature->AddThreat(target, 5000000.0f);
DoScriptText(EMOTE_THALADRED_GAZE, m_creature, target); DoScriptText(EMOTE_THALADRED_GAZE, m_creature, target);
}
Gaze_Timer = 8500; Gaze_Timer = 8500;
} }
}else Gaze_Timer -= diff; }else Gaze_Timer -= diff;
@@ -100,7 +100,6 @@ struct TRINITY_DLL_DECL boss_nethermancer_sepethreaAI : public ScriptedAI
void UpdateAI(const uint32 diff) void UpdateAI(const uint32 diff)
{ {
//Return since we have no target //Return since we have no target
if (!UpdateVictim() ) if (!UpdateVictim() )
return; return;
@@ -151,7 +150,6 @@ struct TRINITY_DLL_DECL boss_nethermancer_sepethreaAI : public ScriptedAI
}else solarburn_Timer -= diff; }else solarburn_Timer -= diff;
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
} }
}; };
@@ -216,7 +216,6 @@ struct TRINITY_DLL_DECL mob_nether_wraithAI : public ScriptedAI
DoCast(m_creature,SPELL_DETONATION); DoCast(m_creature,SPELL_DETONATION);
Detonation = true; Detonation = true;
}else Detonation_Timer -= diff; }else Detonation_Timer -= diff;
} }
if (Detonation) if (Detonation)
@@ -228,7 +227,6 @@ struct TRINITY_DLL_DECL mob_nether_wraithAI : public ScriptedAI
}else Die_Timer -= diff; }else Die_Timer -= diff;
} }
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
} }
@@ -239,7 +239,7 @@ struct TRINITY_DLL_DECL boss_yaujAI : public ScriptedAI
{ {
Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0); Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0);
Creature* Summoned = m_creature->SummonCreature(15621,m_creature->GetPositionX(), m_creature->GetPositionY(), m_creature->GetPositionZ(),0,TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN,90000); Creature* Summoned = m_creature->SummonCreature(15621,m_creature->GetPositionX(), m_creature->GetPositionY(), m_creature->GetPositionZ(),0,TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN,90000);
if(Summoned) if(Summoned && target)
((CreatureAI*)Summoned->AI())->AttackStart(target); ((CreatureAI*)Summoned->AI())->AttackStart(target);
} }
} }
@@ -58,6 +58,9 @@ struct TRINITY_DLL_DECL boss_fankrissAI : public ScriptedAI
void SummonSpawn(Unit* victim) void SummonSpawn(Unit* victim)
{ {
if(!victim)
return;
Rand = 10 + (rand()%10); Rand = 10 + (rand()%10);
switch (rand()%2) switch (rand()%2)
{ {
@@ -135,34 +138,46 @@ struct TRINITY_DLL_DECL boss_fankrissAI : public ScriptedAI
case 0: case 0:
DoTeleportPlayer(target, -8106.0142,1289.2900,-74.419533,5.112); DoTeleportPlayer(target, -8106.0142,1289.2900,-74.419533,5.112);
Hatchling = m_creature->SummonCreature(15962, target->GetPositionX()-3, target->GetPositionY()-3, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); Hatchling = m_creature->SummonCreature(15962, target->GetPositionX()-3, target->GetPositionY()-3, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
if(Hatchling)
((CreatureAI*)Hatchling->AI())->AttackStart(target); ((CreatureAI*)Hatchling->AI())->AttackStart(target);
Hatchling = m_creature->SummonCreature(15962, target->GetPositionX()-3, target->GetPositionY()+3, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); Hatchling = m_creature->SummonCreature(15962, target->GetPositionX()-3, target->GetPositionY()+3, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
if(Hatchling)
((CreatureAI*)Hatchling->AI())->AttackStart(target); ((CreatureAI*)Hatchling->AI())->AttackStart(target);
Hatchling = m_creature->SummonCreature(15962, target->GetPositionX()-5, target->GetPositionY()-5, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); Hatchling = m_creature->SummonCreature(15962, target->GetPositionX()-5, target->GetPositionY()-5, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
if(Hatchling)
((CreatureAI*)Hatchling->AI())->AttackStart(target); ((CreatureAI*)Hatchling->AI())->AttackStart(target);
Hatchling = m_creature->SummonCreature(15962, target->GetPositionX()-5, target->GetPositionY()+5, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); Hatchling = m_creature->SummonCreature(15962, target->GetPositionX()-5, target->GetPositionY()+5, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
if(Hatchling)
((CreatureAI*)Hatchling->AI())->AttackStart(target); ((CreatureAI*)Hatchling->AI())->AttackStart(target);
break; break;
case 1: case 1:
DoTeleportPlayer(target, -7990.135354,1155.1907,-78.849319,2.608); DoTeleportPlayer(target, -7990.135354,1155.1907,-78.849319,2.608);
Hatchling = m_creature->SummonCreature(15962, target->GetPositionX()-3, target->GetPositionY()-3, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); Hatchling = m_creature->SummonCreature(15962, target->GetPositionX()-3, target->GetPositionY()-3, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
if(Hatchling)
((CreatureAI*)Hatchling->AI())->AttackStart(target); ((CreatureAI*)Hatchling->AI())->AttackStart(target);
Hatchling = m_creature->SummonCreature(15962, target->GetPositionX()-3, target->GetPositionY()+3, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); Hatchling = m_creature->SummonCreature(15962, target->GetPositionX()-3, target->GetPositionY()+3, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
if(Hatchling)
((CreatureAI*)Hatchling->AI())->AttackStart(target); ((CreatureAI*)Hatchling->AI())->AttackStart(target);
Hatchling = m_creature->SummonCreature(15962, target->GetPositionX()-5, target->GetPositionY()-5, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); Hatchling = m_creature->SummonCreature(15962, target->GetPositionX()-5, target->GetPositionY()-5, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
if(Hatchling)
((CreatureAI*)Hatchling->AI())->AttackStart(target); ((CreatureAI*)Hatchling->AI())->AttackStart(target);
Hatchling = m_creature->SummonCreature(15962, target->GetPositionX()-5, target->GetPositionY()+5, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); Hatchling = m_creature->SummonCreature(15962, target->GetPositionX()-5, target->GetPositionY()+5, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
if(Hatchling)
((CreatureAI*)Hatchling->AI())->AttackStart(target); ((CreatureAI*)Hatchling->AI())->AttackStart(target);
break; break;
case 2: case 2:
DoTeleportPlayer(target,-8159.7753,1127.9064,-76.868660,0.675); DoTeleportPlayer(target,-8159.7753,1127.9064,-76.868660,0.675);
Hatchling = m_creature->SummonCreature(15962, target->GetPositionX()-3, target->GetPositionY()-3, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); Hatchling = m_creature->SummonCreature(15962, target->GetPositionX()-3, target->GetPositionY()-3, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
if(Hatchling)
((CreatureAI*)Hatchling->AI())->AttackStart(target); ((CreatureAI*)Hatchling->AI())->AttackStart(target);
Hatchling = m_creature->SummonCreature(15962, target->GetPositionX()-3, target->GetPositionY()+3, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); Hatchling = m_creature->SummonCreature(15962, target->GetPositionX()-3, target->GetPositionY()+3, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
if(Hatchling)
((CreatureAI*)Hatchling->AI())->AttackStart(target); ((CreatureAI*)Hatchling->AI())->AttackStart(target);
Hatchling = m_creature->SummonCreature(15962, target->GetPositionX()-5, target->GetPositionY()-5, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); Hatchling = m_creature->SummonCreature(15962, target->GetPositionX()-5, target->GetPositionY()-5, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
if(Hatchling)
((CreatureAI*)Hatchling->AI())->AttackStart(target); ((CreatureAI*)Hatchling->AI())->AttackStart(target);
Hatchling = m_creature->SummonCreature(15962, target->GetPositionX()-5, target->GetPositionY()+5, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); Hatchling = m_creature->SummonCreature(15962, target->GetPositionX()-5, target->GetPositionY()+5, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
if(Hatchling)
((CreatureAI*)Hatchling->AI())->AttackStart(target); ((CreatureAI*)Hatchling->AI())->AttackStart(target);
break; break;
} }
@@ -103,6 +103,7 @@ struct TRINITY_DLL_DECL boss_ouroAI : public ScriptedAI
Unit* target = NULL; Unit* target = NULL;
target = SelectUnit(SELECT_TARGET_RANDOM,0); target = SelectUnit(SELECT_TARGET_RANDOM,0);
if(target)
DoTeleportTo(target->GetPositionX(), target->GetPositionY(), target->GetPositionZ()); DoTeleportTo(target->GetPositionX(), target->GetPositionY(), target->GetPositionZ());
ChangeTarget_Timer = 10000 + rand()%10000; ChangeTarget_Timer = 10000 + rand()%10000;
@@ -161,7 +161,6 @@ struct TRINITY_DLL_DECL boss_sarturaAI : public ScriptedAI
} }
}; };
struct TRINITY_DLL_DECL mob_sartura_royal_guardAI : public ScriptedAI struct TRINITY_DLL_DECL mob_sartura_royal_guardAI : public ScriptedAI
{ {
mob_sartura_royal_guardAI(Creature *c) : ScriptedAI(c) {} mob_sartura_royal_guardAI(Creature *c) : ScriptedAI(c) {}
@@ -187,7 +186,6 @@ struct TRINITY_DLL_DECL mob_sartura_royal_guardAI : public ScriptedAI
WhirlWind = false; WhirlWind = false;
AggroReset = false; AggroReset = false;
} }
void Aggro(Unit *who) void Aggro(Unit *who)
@@ -274,12 +274,16 @@ struct TRINITY_DLL_DECL boss_skeramAI : public ScriptedAI
Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0); Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0);
Image1 = m_creature->SummonCreature(15263, i1->x, i1->y, i1->z, i1->r, TEMPSUMMON_CORPSE_DESPAWN, 30000); Image1 = m_creature->SummonCreature(15263, i1->x, i1->y, i1->z, i1->r, TEMPSUMMON_CORPSE_DESPAWN, 30000);
if(!Image1)
return;
Image1->SetMaxHealth(m_creature->GetMaxHealth() / 5); Image1->SetMaxHealth(m_creature->GetMaxHealth() / 5);
Image1->SetHealth(m_creature->GetHealth() / 5); Image1->SetHealth(m_creature->GetHealth() / 5);
if (target) if (target)
Image1->AI()->AttackStart(target); Image1->AI()->AttackStart(target);
Image2 = m_creature->SummonCreature(15263,i2->x, i2->y, i2->z, i2->r, TEMPSUMMON_CORPSE_DESPAWN, 30000); Image2 = m_creature->SummonCreature(15263,i2->x, i2->y, i2->z, i2->r, TEMPSUMMON_CORPSE_DESPAWN, 30000);
if(!Image2)
return;
Image2->SetMaxHealth(m_creature->GetMaxHealth() / 5); Image2->SetMaxHealth(m_creature->GetMaxHealth() / 5);
Image2->SetHealth(m_creature->GetHealth() / 5); Image2->SetHealth(m_creature->GetHealth() / 5);
if (target) if (target)
@@ -266,8 +266,11 @@ struct TRINITY_DLL_DECL boss_twinemperorsAI : public ScriptedAI
m_creature->clearUnitState(UNIT_STAT_STUNNED); m_creature->clearUnitState(UNIT_STAT_STUNNED);
Unit *nearu = m_creature->SelectNearestTarget(100); Unit *nearu = m_creature->SelectNearestTarget(100);
//DoYell(nearu->GetName(), LANG_UNIVERSAL, 0); //DoYell(nearu->GetName(), LANG_UNIVERSAL, 0);
if(nearu)
{
AttackStart(nearu); AttackStart(nearu);
m_creature->getThreatManager().addThreat(nearu, 10000); m_creature->getThreatManager().addThreat(nearu, 10000);
}
return true; return true;
} }
else else
@@ -346,7 +349,7 @@ struct TRINITY_DLL_DECL boss_twinemperorsAI : public ScriptedAI
for(std::list<Creature*>::iterator iter = unitList.begin(); iter != unitList.end(); ++iter) for(std::list<Creature*>::iterator iter = unitList.begin(); iter != unitList.end(); ++iter)
{ {
Creature *c = (Creature *)(*iter); Creature *c = (Creature *)(*iter);
if (c->isDead()) if (c && c->isDead())
{ {
c->Respawn(); c->Respawn();
c->setFaction(7); c->setFaction(7);
@@ -120,6 +120,7 @@ struct TRINITY_DLL_DECL mob_unkor_the_ruthlessAI : public ScriptedAI
if( UnkorUnfriendly_Timer < diff ) if( UnkorUnfriendly_Timer < diff )
{ {
EnterEvadeMode(); EnterEvadeMode();
return;
}else UnkorUnfriendly_Timer -= diff; }else UnkorUnfriendly_Timer -= diff;
} }
} }
@@ -120,6 +120,8 @@ struct TRINITY_DLL_DECL boss_archaedasAI : public ScriptedAI
void UpdateAI(const uint32 diff) void UpdateAI(const uint32 diff)
{ {
if(!pInstance)
return;
// we're still doing awaken animation // we're still doing awaken animation
if (wakingUp && Awaken_Timer >= 0) { if (wakingUp && Awaken_Timer >= 0) {
Awaken_Timer -= diff; Awaken_Timer -= diff;
@@ -180,9 +182,12 @@ struct TRINITY_DLL_DECL boss_archaedasAI : public ScriptedAI
} }
void JustDied (Unit *killer) { void JustDied (Unit *killer) {
if(pInstance)
{
pInstance->SetData(NULL,3); // open the vault door pInstance->SetData(NULL,3); // open the vault door
pInstance->SetData(NULL,4); // deactivate his minions pInstance->SetData(NULL,4); // deactivate his minions
} }
}
}; };
@@ -389,6 +394,7 @@ struct TRINITY_DLL_DECL mob_stonekeepersAI : public ScriptedAI
void DamageTaken (Unit *attacker, uint32 &damage) { void DamageTaken (Unit *attacker, uint32 &damage) {
if (damage > m_creature->GetHealth()) { if (damage > m_creature->GetHealth()) {
DoCast (m_creature, SPELL_SELF_DESTRUCT,true); DoCast (m_creature, SPELL_SELF_DESTRUCT,true);
if(pInstance)
pInstance->SetData(NULL, 1); // activate next stonekeeper pInstance->SetData(NULL, 1); // activate next stonekeeper
} }
} }
@@ -189,7 +189,10 @@ struct TRINITY_DLL_DECL boss_hexlord_addAI : public ScriptedAI
void UpdateAI(const uint32 diff) void UpdateAI(const uint32 diff)
{ {
if(pInstance && pInstance->GetData(DATA_HEXLORDEVENT) != IN_PROGRESS) if(pInstance && pInstance->GetData(DATA_HEXLORDEVENT) != IN_PROGRESS)
{
EnterEvadeMode(); EnterEvadeMode();
return;
}
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
} }
@@ -383,7 +386,11 @@ struct TRINITY_DLL_DECL boss_hex_lord_malacrassAI : public ScriptedAI
{ {
Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0, 70, true); Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0, 70, true);
Unit *trigger = DoSpawnCreature(MOB_TEMP_TRIGGER, 0, 0, 0, 0, TEMPSUMMON_TIMED_DESPAWN, 30000); Unit *trigger = DoSpawnCreature(MOB_TEMP_TRIGGER, 0, 0, 0, 0, TEMPSUMMON_TIMED_DESPAWN, 30000);
if(!target || !trigger) EnterEvadeMode(); if(!target || !trigger)
{
EnterEvadeMode();
return;
}
else else
{ {
trigger->SetUInt32Value(UNIT_FIELD_DISPLAYID, 11686); trigger->SetUInt32Value(UNIT_FIELD_DISPLAYID, 11686);
@@ -407,6 +407,7 @@ struct TRINITY_DLL_DECL boss_nalorakkAI : public ScriptedAI
DoYell(YELL_SURGE, LANG_UNIVERSAL, NULL); DoYell(YELL_SURGE, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature, SOUND_YELL_SURGE); DoPlaySoundToSet(m_creature, SOUND_YELL_SURGE);
Unit *target = SelectUnit(SELECT_TARGET_RANDOM, 1, GetSpellMaxRange(SPELL_SURGE), true); Unit *target = SelectUnit(SELECT_TARGET_RANDOM, 1, GetSpellMaxRange(SPELL_SURGE), true);
if(target)
DoCast(target, SPELL_SURGE); DoCast(target, SPELL_SURGE);
Surge_Timer = 15000 + rand()%5000; Surge_Timer = 15000 + rand()%5000;
}else Surge_Timer -= diff; }else Surge_Timer -= diff;
@@ -487,7 +487,12 @@ struct TRINITY_DLL_DECL boss_zuljinAI : public ScriptedAI
else else
Claw_Loop_Timer = 500; Claw_Loop_Timer = 500;
} }
}else EnterEvadeMode(); // if(target) }
else
{
EnterEvadeMode(); // if(target)
return;
}
}else Claw_Loop_Timer -= diff; }else Claw_Loop_Timer -= diff;
} //if(TankGUID) } //if(TankGUID)
}else Claw_Rage_Timer -= diff; }else Claw_Rage_Timer -= diff;
@@ -529,7 +534,12 @@ struct TRINITY_DLL_DECL boss_zuljinAI : public ScriptedAI
else else
AttackStart(SelectUnit(SELECT_TARGET_RANDOM, 0)); AttackStart(SelectUnit(SELECT_TARGET_RANDOM, 0));
} }
}else EnterEvadeMode(); // if(target) }
else
{
EnterEvadeMode(); // if(target)
return;
}
} //if(TankGUID) } //if(TankGUID)
}else Lynx_Rush_Timer -= diff; }else Lynx_Rush_Timer -= diff;
@@ -125,13 +125,13 @@ struct TRINITY_DLL_DECL boss_arlokkAI : public ScriptedAI
{ {
DoScriptText(SAY_FEAST_PANTHER, m_creature, markedTarget); DoScriptText(SAY_FEAST_PANTHER, m_creature, markedTarget);
Panther ->AI()->AttackStart(markedTarget); Panther ->AI()->AttackStart(markedTarget);
}else Panther ->AI()->AttackStart(target); }else if(Panther && target) Panther ->AI()->AttackStart(target);
Panther = m_creature->SummonCreature(15101,-11532.9970,-1606.4840,41.2979,0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); Panther = m_creature->SummonCreature(15101,-11532.9970,-1606.4840,41.2979,0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
if(markedTarget && Panther ) if(markedTarget && Panther )
Panther ->AI()->AttackStart(markedTarget); Panther ->AI()->AttackStart(markedTarget);
else else if(Panther && target)
Panther ->AI()->AttackStart(target); Panther ->AI()->AttackStart(target);
Counter++; Counter++;
@@ -164,6 +164,7 @@ struct TRINITY_DLL_DECL boss_arlokkAI : public ScriptedAI
m_creature->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (cinfo->mindmg +((cinfo->mindmg/100) * 35))); m_creature->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (cinfo->mindmg +((cinfo->mindmg/100) * 35)));
m_creature->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (cinfo->maxdmg +((cinfo->maxdmg/100) * 35))); m_creature->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (cinfo->maxdmg +((cinfo->maxdmg/100) * 35)));
m_creature->UpdateDamagePhysical(BASE_ATTACK); m_creature->UpdateDamagePhysical(BASE_ATTACK);
if(target)
AttackStart(target); AttackStart(target);
//The Panther Model //The Panther Model
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,15215); m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,15215);
@@ -75,7 +75,11 @@ struct TRINITY_DLL_DECL boss_hazzarahAI : public ScriptedAI
for(int i = 0; i < 3;i++) for(int i = 0; i < 3;i++)
{ {
target = SelectUnit(SELECT_TARGET_RANDOM,0); target = SelectUnit(SELECT_TARGET_RANDOM,0);
if(!target)
return;
Illusion = m_creature->SummonCreature(15163,target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(),0,TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN,30000); Illusion = m_creature->SummonCreature(15163,target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(),0,TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN,30000);
if(Illusion)
((CreatureAI*)Illusion->AI())->AttackStart(target); ((CreatureAI*)Illusion->AI())->AttackStart(target);
} }
@@ -184,13 +184,12 @@ struct TRINITY_DLL_DECL boss_jeklikAI : public ScriptedAI
if(SpawnFlyingBats_Timer < diff) if(SpawnFlyingBats_Timer < diff)
{ {
Unit *target = SelectUnit(SELECT_TARGET_RANDOM, 0); Unit *target = SelectUnit(SELECT_TARGET_RANDOM, 0);
if(!target)
return;
Creature* FlyingBat = m_creature->SummonCreature(14965, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ()+15, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); Creature* FlyingBat = m_creature->SummonCreature(14965, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ()+15, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
if(FlyingBat) if(FlyingBat)
{
if(target)
FlyingBat->AI()->AttackStart(target); FlyingBat->AI()->AttackStart(target);
}
SpawnFlyingBats_Timer = 10000 + rand()%5000; SpawnFlyingBats_Timer = 10000 + rand()%5000;
}else SpawnFlyingBats_Timer -=diff; }else SpawnFlyingBats_Timer -=diff;
@@ -111,6 +111,7 @@ struct TRINITY_DLL_DECL boss_jindoAI : public ScriptedAI
DoCast(target, SPELL_DELUSIONSOFJINDO); DoCast(target, SPELL_DELUSIONSOFJINDO);
Shade = m_creature->SummonCreature(14986, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); Shade = m_creature->SummonCreature(14986, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
if(Shade)
Shade->AI()->AttackStart(target); Shade->AI()->AttackStart(target);
} }
@@ -130,22 +131,31 @@ struct TRINITY_DLL_DECL boss_jindoAI : public ScriptedAI
DoModifyThreatPercent(target,-100); DoModifyThreatPercent(target,-100);
Skeletons = m_creature->SummonCreature(14826, target->GetPositionX()+2, target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); Skeletons = m_creature->SummonCreature(14826, target->GetPositionX()+2, target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
if(Skeletons)
Skeletons->AI()->AttackStart(target); Skeletons->AI()->AttackStart(target);
Skeletons = m_creature->SummonCreature(14826, target->GetPositionX()-2, target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); Skeletons = m_creature->SummonCreature(14826, target->GetPositionX()-2, target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
if(Skeletons)
Skeletons->AI()->AttackStart(target); Skeletons->AI()->AttackStart(target);
Skeletons = m_creature->SummonCreature(14826, target->GetPositionX()+4, target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); Skeletons = m_creature->SummonCreature(14826, target->GetPositionX()+4, target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
if(Skeletons)
Skeletons->AI()->AttackStart(target); Skeletons->AI()->AttackStart(target);
Skeletons = m_creature->SummonCreature(14826, target->GetPositionX()-4, target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); Skeletons = m_creature->SummonCreature(14826, target->GetPositionX()-4, target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
if(Skeletons)
Skeletons->AI()->AttackStart(target); Skeletons->AI()->AttackStart(target);
Skeletons = m_creature->SummonCreature(14826, target->GetPositionX(), target->GetPositionY()+2, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); Skeletons = m_creature->SummonCreature(14826, target->GetPositionX(), target->GetPositionY()+2, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
if(Skeletons)
Skeletons->AI()->AttackStart(target); Skeletons->AI()->AttackStart(target);
Skeletons = m_creature->SummonCreature(14826, target->GetPositionX(), target->GetPositionY()-2, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); Skeletons = m_creature->SummonCreature(14826, target->GetPositionX(), target->GetPositionY()-2, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
if(Skeletons)
Skeletons->AI()->AttackStart(target); Skeletons->AI()->AttackStart(target);
Skeletons = m_creature->SummonCreature(14826, target->GetPositionX(), target->GetPositionY()+4, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); Skeletons = m_creature->SummonCreature(14826, target->GetPositionX(), target->GetPositionY()+4, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
if(Skeletons)
Skeletons->AI()->AttackStart(target); Skeletons->AI()->AttackStart(target);
Skeletons = m_creature->SummonCreature(14826, target->GetPositionX(), target->GetPositionY()-4, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); Skeletons = m_creature->SummonCreature(14826, target->GetPositionX(), target->GetPositionY()-4, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
if(Skeletons)
Skeletons->AI()->AttackStart(target); Skeletons->AI()->AttackStart(target);
Skeletons = m_creature->SummonCreature(14826, target->GetPositionX()+3, target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); Skeletons = m_creature->SummonCreature(14826, target->GetPositionX()+3, target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
if(Skeletons)
Skeletons->AI()->AttackStart(target); Skeletons->AI()->AttackStart(target);
} }
@@ -185,6 +195,7 @@ struct TRINITY_DLL_DECL mob_healing_wardAI : public ScriptedAI
if(pInstance) if(pInstance)
{ {
Unit *pJindo = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_JINDO)); Unit *pJindo = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_JINDO));
if(pJindo)
DoCast(pJindo, SPELL_HEAL); DoCast(pJindo, SPELL_HEAL);
} }
Heal_Timer = 3000; Heal_Timer = 3000;
@@ -112,15 +112,21 @@ struct TRINITY_DLL_DECL boss_marliAI : public ScriptedAI
DoScriptText(SAY_SPIDER_SPAWN, m_creature); DoScriptText(SAY_SPIDER_SPAWN, m_creature);
Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0); Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0);
if(!target)
return;
Spider = m_creature->SummonCreature(15041,target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(),0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); Spider = m_creature->SummonCreature(15041,target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(),0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
if(target && Spider ) Spider ->AI()->AttackStart(target); if(Spider)
Spider->AI()->AttackStart(target);
Spider = m_creature->SummonCreature(15041,target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(),0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); Spider = m_creature->SummonCreature(15041,target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(),0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
if(target && Spider ) Spider ->AI()->AttackStart(target); if(Spider)
Spider->AI()->AttackStart(target);
Spider = m_creature->SummonCreature(15041,target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(),0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); Spider = m_creature->SummonCreature(15041,target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(),0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
if(target && Spider ) Spider ->AI()->AttackStart(target); if(Spider)
Spider->AI()->AttackStart(target);
Spider = m_creature->SummonCreature(15041,target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(),0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); Spider = m_creature->SummonCreature(15041,target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(),0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
if(target && Spider ) Spider ->AI()->AttackStart(target); if(Spider)
Spider->AI()->AttackStart(target);
Spawned = true; Spawned = true;
}else SpawnStartSpiders_Timer -= diff; }else SpawnStartSpiders_Timer -= diff;
@@ -128,10 +134,12 @@ struct TRINITY_DLL_DECL boss_marliAI : public ScriptedAI
if (SpawnSpider_Timer < diff) if (SpawnSpider_Timer < diff)
{ {
Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0); Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0);
if(!target)
return;
Spider = m_creature->SummonCreature(15041,target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(),0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); Spider = m_creature->SummonCreature(15041,target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(),0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
if (target && Spider ) if(Spider)
Spider ->AI()->AttackStart(target); Spider->AI()->AttackStart(target);
SpawnSpider_Timer = 12000 + rand()%5000; SpawnSpider_Timer = 12000 + rand()%5000;
}else SpawnSpider_Timer -= diff; }else SpawnSpider_Timer -= diff;
@@ -118,22 +118,28 @@ struct TRINITY_DLL_DECL boss_thekalAI : public ScriptedAI
{ {
//Resurrect LorKhan //Resurrect LorKhan
Unit *pLorKhan = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_LORKHAN)); Unit *pLorKhan = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_LORKHAN));
if(pLorKhan)
{
pLorKhan->SetUInt32Value(UNIT_FIELD_BYTES_1, 0); pLorKhan->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);
pLorKhan->setFaction(14); pLorKhan->setFaction(14);
pLorKhan->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); pLorKhan->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
pLorKhan->SetHealth(int(pLorKhan->GetMaxHealth()*1.0)); pLorKhan->SetHealth(int(pLorKhan->GetMaxHealth()*1.0));
} }
}
if(pInstance->GetData(DATA_ZATHISDEAD)) if(pInstance->GetData(DATA_ZATHISDEAD))
{ {
//Resurrect Zath //Resurrect Zath
Unit *pZath = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_ZATH)); Unit *pZath = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_ZATH));
if(pZath)
{
pZath->SetUInt32Value(UNIT_FIELD_BYTES_1, 0); pZath->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);
pZath->setFaction(14); pZath->setFaction(14);
pZath->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); pZath->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
pZath->SetHealth(int(pZath->GetMaxHealth()*1.0)); pZath->SetHealth(int(pZath->GetMaxHealth()*1.0));
} }
} }
}
Check_Timer = 5000; Check_Timer = 5000;
}else Check_Timer -= diff; }else Check_Timer -= diff;
@@ -296,6 +302,9 @@ struct TRINITY_DLL_DECL mob_zealot_lorkhanAI : public ScriptedAI
Unit *pThekal = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_THEKAL)); Unit *pThekal = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_THEKAL));
Unit *pZath = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_ZATH)); Unit *pZath = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_ZATH));
if(!pThekal || !pZath)
return;
switch(rand()%2) switch(rand()%2)
{ {
case 0: case 0:
@@ -328,22 +337,28 @@ struct TRINITY_DLL_DECL mob_zealot_lorkhanAI : public ScriptedAI
{ {
//Resurrect Thekal //Resurrect Thekal
Unit *pThekal = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_THEKAL)); Unit *pThekal = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_THEKAL));
if(pThekal)
{
pThekal->SetUInt32Value(UNIT_FIELD_BYTES_1, 0); pThekal->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);
pThekal->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); pThekal->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
pThekal->setFaction(14); pThekal->setFaction(14);
pThekal->SetHealth(int(pThekal->GetMaxHealth()*1.0)); pThekal->SetHealth(int(pThekal->GetMaxHealth()*1.0));
} }
}
if(pInstance->GetData(DATA_ZATHISDEAD)) if(pInstance->GetData(DATA_ZATHISDEAD))
{ {
//Resurrect Zath //Resurrect Zath
Unit *pZath = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_ZATH)); Unit *pZath = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_ZATH));
if(pZath)
{
pZath->SetUInt32Value(UNIT_FIELD_BYTES_1, 0); pZath->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);
pZath->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); pZath->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
pZath->setFaction(14); pZath->setFaction(14);
pZath->SetHealth(int(pZath->GetMaxHealth()*1.0)); pZath->SetHealth(int(pZath->GetMaxHealth()*1.0));
} }
} }
}
Check_Timer = 5000; Check_Timer = 5000;
}else Check_Timer -= diff; }else Check_Timer -= diff;
@@ -459,22 +474,28 @@ struct TRINITY_DLL_DECL mob_zealot_zathAI : public ScriptedAI
{ {
//Resurrect LorKhan //Resurrect LorKhan
Unit *pLorKhan = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_LORKHAN)); Unit *pLorKhan = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_LORKHAN));
if(pLorKhan)
{
pLorKhan->SetUInt32Value(UNIT_FIELD_BYTES_1, 0); pLorKhan->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);
pLorKhan->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); pLorKhan->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
pLorKhan->setFaction(14); pLorKhan->setFaction(14);
pLorKhan->SetHealth(int(pLorKhan->GetMaxHealth()*1.0)); pLorKhan->SetHealth(int(pLorKhan->GetMaxHealth()*1.0));
} }
}
if(pInstance->GetData(DATA_THEKALISFAKEDEAD)) if(pInstance->GetData(DATA_THEKALISFAKEDEAD))
{ {
//Resurrect Thekal //Resurrect Thekal
Unit *pThekal = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_THEKAL)); Unit *pThekal = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_THEKAL));
if(pThekal)
{
pThekal->SetUInt32Value(UNIT_FIELD_BYTES_1, 0); pThekal->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);
pThekal->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); pThekal->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
pThekal->setFaction(14); pThekal->setFaction(14);
pThekal->SetHealth(int(pThekal->GetMaxHealth()*1.0)); pThekal->SetHealth(int(pThekal->GetMaxHealth()*1.0));
} }
} }
}
Check_Timer = 5000; Check_Timer = 5000;
}else Check_Timer -= diff; }else Check_Timer -= diff;