*Cleanup.

--HG--
branch : trunk
This commit is contained in:
maximius
2009-10-15 14:03:55 -07:00
parent 73fd09f4d6
commit 6dc187627d
22 changed files with 236 additions and 326 deletions
@@ -210,12 +210,7 @@ struct TRINITY_DLL_DECL boss_moroesAI : public ScriptedAI
{ {
Temp = Creature::GetCreature((*m_creature),AddGUID[i]); Temp = Creature::GetCreature((*m_creature),AddGUID[i]);
if (Temp && Temp->isAlive()) if (Temp && Temp->isAlive())
{ Temp->DisappearAndDie();
(*Temp).GetMotionMaster()->Clear(true);
Temp->DealDamage(Temp, Temp->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
Temp->RemoveCorpse();
}
} }
} }
} }
@@ -116,10 +116,7 @@ struct TRINITY_DLL_DECL boss_nightbaneAI : public ScriptedAI
if (pInstance) if (pInstance)
{ {
if (pInstance->GetData(TYPE_NIGHTBANE) == DONE || pInstance->GetData(TYPE_NIGHTBANE) == IN_PROGRESS) if (pInstance->GetData(TYPE_NIGHTBANE) == DONE || pInstance->GetData(TYPE_NIGHTBANE) == IN_PROGRESS)
{ m_creature->DisappearAndDie();
m_creature->DealDamage(m_creature, m_creature->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
m_creature->RemoveCorpse();
}
else else
pInstance->SetData(TYPE_NIGHTBANE, NOT_STARTED); pInstance->SetData(TYPE_NIGHTBANE, NOT_STARTED);
} }
@@ -445,8 +445,8 @@ struct TRINITY_DLL_DECL mob_felkael_flamestrikeAI : public ScriptedAI
if (FlameStrikeTimer < diff) if (FlameStrikeTimer < diff)
{ {
DoCast(m_creature, Heroic ? SPELL_FLAMESTRIKE1_HEROIC : SPELL_FLAMESTRIKE1_NORMAL, true); DoCast(m_creature, Heroic ? SPELL_FLAMESTRIKE1_HEROIC : SPELL_FLAMESTRIKE1_NORMAL, true);
m_creature->DealDamage(m_creature, m_creature->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); m_creature->Kill(m_creature);
}else FlameStrikeTimer -= diff; } else FlameStrikeTimer -= diff;
} }
}; };
@@ -580,8 +580,8 @@ struct TRINITY_DLL_DECL mob_felkael_phoenix_eggAI : public ScriptedAI
if (HatchTimer < diff) if (HatchTimer < diff)
{ {
m_creature->SummonCreature(CREATURE_PHOENIX, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 60000); m_creature->SummonCreature(CREATURE_PHOENIX, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 60000);
m_creature->DealDamage(m_creature, m_creature->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); m_creature->Kill(m_creature);
}else HatchTimer -= diff; } else HatchTimer -= diff;
} }
}; };
@@ -596,7 +596,7 @@ struct TRINITY_DLL_DECL mob_arcane_sphereAI : public ScriptedAI
void Reset() void Reset()
{ {
DespawnTimer = 30000; DespawnTimer = 30000;
ChangeTargetTimer = 6000 + rand()%6000; ChangeTargetTimer = urand(6000,12000);
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING); m_creature->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
@@ -604,10 +604,8 @@ struct TRINITY_DLL_DECL mob_arcane_sphereAI : public ScriptedAI
DoCast(m_creature, SPELL_ARCANE_SPHERE_PASSIVE, true); DoCast(m_creature, SPELL_ARCANE_SPHERE_PASSIVE, true);
} }
void EnterCombat(Unit* who) {} void EnterCombat(Unit* who) {}
void UpdateAI(const uint32 diff) void UpdateAI(const uint32 diff)
{ {
if (DespawnTimer < diff) if (DespawnTimer < diff)
@@ -628,7 +626,7 @@ struct TRINITY_DLL_DECL mob_arcane_sphereAI : public ScriptedAI
} }
ChangeTargetTimer = urand(5000,15000); ChangeTargetTimer = urand(5000,15000);
}else ChangeTargetTimer -= diff; } else ChangeTargetTimer -= diff;
} }
}; };
@@ -226,7 +226,7 @@ struct TRINITY_DLL_DECL mob_headAI : public ScriptedAI
die = false; die = false;
withbody = true; withbody = true;
wait = 1000; wait = 1000;
laugh = 15000 + rand()%16 * 1000; laugh = urand(15000,30000);
} }
void EnterCombat(Unit *who) {} void EnterCombat(Unit *who) {}
@@ -324,8 +324,8 @@ struct TRINITY_DLL_DECL mob_headAI : public ScriptedAI
{ {
die = false; die = false;
if (Unit *body = Unit::GetUnit((*m_creature), bodyGUID)) if (Unit *body = Unit::GetUnit((*m_creature), bodyGUID))
body->DealDamage(body, body->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); body->Kill(body);
m_creature->setDeathState(JUST_DIED); m_creature->Kill(m_creature);
} else wait -= diff; } else wait -= diff;
} }
} }
@@ -400,11 +400,9 @@ struct TRINITY_DLL_DECL boss_headless_horsemanAI : public ScriptedAI
DoCast(m_creature,SPELL_HEAD); DoCast(m_creature,SPELL_HEAD);
if (headGUID) if (headGUID)
{ {
if (Unit* Head = Unit::GetUnit((*m_creature), headGUID)) if (Creature* Head = Unit::GetCreature((*m_creature), headGUID))
{ Head->DisappearAndDie();
Head->SetVisibility(VISIBILITY_OFF);
Head->setDeathState(JUST_DIED);
}
headGUID = 0; headGUID = 0;
} }
@@ -661,7 +659,7 @@ struct TRINITY_DLL_DECL boss_headless_horsemanAI : public ScriptedAI
{ {
if (Unit *plr = SelectRandomPlayer(30.0f)) if (Unit *plr = SelectRandomPlayer(30.0f))
m_creature->CastSpell(plr,SPELL_CONFLAGRATION,false); m_creature->CastSpell(plr,SPELL_CONFLAGRATION,false);
conflagrate = 10000 + rand()%7 * 1000; conflagrate = urand(10000,16000);
} else conflagrate -= diff; } else conflagrate -= diff;
break; break;
case 3: case 3:
@@ -670,7 +668,7 @@ struct TRINITY_DLL_DECL boss_headless_horsemanAI : public ScriptedAI
m_creature->InterruptNonMeleeSpells(false); m_creature->InterruptNonMeleeSpells(false);
DoCast(m_creature,SPELL_SUMMON_PUMPKIN); DoCast(m_creature,SPELL_SUMMON_PUMPKIN);
SaySound(SAY_SPROUTING_PUMPKINS); SaySound(SAY_SPROUTING_PUMPKINS);
summonadds = 25000 + rand()%11 *1000; summonadds = urand(25000,35000);
} else summonadds -= diff; } else summonadds -= diff;
break; break;
} }
@@ -107,7 +107,7 @@ struct TRINITY_DLL_DECL instance_scarlet_monastery : public ScriptedInstance
{ {
Creature* add = instance->GetCreature(*itr); Creature* add = instance->GetCreature(*itr);
if (add && add->isAlive()) if (add && add->isAlive())
add->DealDamage(add, add->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); add->Kill(add);
} }
HorsemanAdds.clear(); HorsemanAdds.clear();
HandleGameObject(PumpkinShrineGUID, false); HandleGameObject(PumpkinShrineGUID, false);
@@ -296,8 +296,7 @@ struct TRINITY_DLL_DECL boss_muruAI : public Scripted_NoMovementAI
break; break;
case DONE: case DONE:
Phase = 4; Phase = 4;
m_creature->DealDamage(m_creature, m_creature->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); m_creature->DisappearAndDie();
m_creature->RemoveCorpse();
break; break;
} }
Timer[TIMER_PHASE] = 3000; Timer[TIMER_PHASE] = 3000;
@@ -396,9 +395,9 @@ struct TRINITY_DLL_DECL npc_muru_portalAI : public Scripted_NoMovementAI
void JustSummoned(Creature* summoned) void JustSummoned(Creature* summoned)
{ {
Player* Target = Unit::GetPlayer(pInstance ? pInstance->GetData64(DATA_PLAYER_GUID) : 0); if (pInstance)
if (Target) if (Player* Target = Unit::GetPlayer(pInstance->GetData64(DATA_PLAYER_GUID)))
summoned->AI()->AttackStart(Target); summoned->AI()->AttackStart(Target);
Summons.Summon(summoned); Summons.Summon(summoned);
} }
@@ -462,10 +461,7 @@ struct TRINITY_DLL_DECL npc_dark_fiendAI : public ScriptedAI
{ {
for(uint8 i = 0; i < 3; ++i) for(uint8 i = 0; i < 3; ++i)
if (Spell->Effect[i] == 38) if (Spell->Effect[i] == 38)
{ m_creature->DisappearAndDie();
m_creature->DealDamage(m_creature, m_creature->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
m_creature->RemoveCorpse();
}
} }
void UpdateAI(const uint32 diff) void UpdateAI(const uint32 diff)
@@ -489,12 +485,11 @@ struct TRINITY_DLL_DECL npc_dark_fiendAI : public ScriptedAI
if (m_creature->IsWithinDist(m_creature->getVictim(), 5)) if (m_creature->IsWithinDist(m_creature->getVictim(), 5))
{ {
DoCastAOE(SPELL_DARKFIEND_AOE, false); DoCastAOE(SPELL_DARKFIEND_AOE, false);
m_creature->DealDamage(m_creature, m_creature->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); m_creature->DisappearAndDie();
m_creature->RemoveCorpse();
} }
WaitTimer = 500; WaitTimer = 500;
} }
}else WaitTimer -= diff; } else WaitTimer -= diff;
} }
}; };
@@ -522,9 +517,8 @@ struct TRINITY_DLL_DECL npc_void_sentinelAI : public ScriptedAI
void JustDied(Unit* killer) void JustDied(Unit* killer)
{ {
for (uint8 i = 0; i < 8; ++i){ for (uint8 i = 0; i < 8; ++i)
m_creature->SummonCreature(CREATURE_VOID_SPAWN, m_creature->GetPositionX(),m_creature->GetPositionY(),m_creature->GetPositionZ(), rand()%6, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 180000); m_creature->SummonCreature(CREATURE_VOID_SPAWN, m_creature->GetPositionX(),m_creature->GetPositionY(),m_creature->GetPositionZ(), rand()%6, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 180000);
}
} }
void UpdateAI(const uint32 diff) void UpdateAI(const uint32 diff)
@@ -536,13 +530,13 @@ struct TRINITY_DLL_DECL npc_void_sentinelAI : public ScriptedAI
{ {
DoCastAOE(SPELL_SHADOW_PULSE, true); DoCastAOE(SPELL_SHADOW_PULSE, true);
PulseTimer = 3000; PulseTimer = 3000;
}else PulseTimer -= diff; } else PulseTimer -= diff;
if (VoidBlastTimer < diff) if (VoidBlastTimer < diff)
{ {
DoCast(m_creature->getVictim(), SPELL_VOID_BLAST, false); DoCast(m_creature->getVictim(), SPELL_VOID_BLAST, false);
VoidBlastTimer = 45000; VoidBlastTimer = 45000;
}else VoidBlastTimer -= diff; } else VoidBlastTimer -= diff;
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
} }
@@ -582,7 +576,7 @@ struct TRINITY_DLL_DECL npc_blackholeAI : public ScriptedAI
if (SpellTimer < diff) if (SpellTimer < diff)
{ {
Unit* Victim = Unit::GetUnit(*m_creature, pInstance ? pInstance->GetData64(DATA_PLAYER_GUID) : 0); Unit* Victim = Unit::GetUnit(*m_creature, pInstance ? pInstance->GetData64(DATA_PLAYER_GUID) : 0);
switch(NeedForAHack) switch (NeedForAHack)
{ {
case 0: case 0:
m_creature->clearUnitState(UNIT_STAT_STUNNED); m_creature->clearUnitState(UNIT_STAT_STUNNED);
@@ -603,21 +597,20 @@ struct TRINITY_DLL_DECL npc_blackholeAI : public ScriptedAI
m_creature->RemoveAura(SPELL_BLACKHOLE_GROW, 1); m_creature->RemoveAura(SPELL_BLACKHOLE_GROW, 1);
break; break;
case 3: case 3:
SpellTimer = 400+rand()%500; SpellTimer = urand(400,900);
NeedForAHack = 1; NeedForAHack = 1;
Unit* Temp = m_creature->getVictim(); if (Unit* Temp = m_creature->getVictim())
if (!Temp) {
if (Temp->GetPositionZ() > 73 && Victim)
AttackStart(Victim);
} else
return; return;
if (Temp->GetPositionZ() > 73 && Victim)
AttackStart(Victim);
} }
}else SpellTimer -= diff; } else SpellTimer -= diff;
if (DespawnTimer < diff) if (DespawnTimer < diff)
{ m_creature->DisappearAndDie();
m_creature->DealDamage(m_creature, m_creature->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); else DespawnTimer -= diff;
m_creature->RemoveCorpse();
}else DespawnTimer -= diff;
} }
}; };
@@ -192,16 +192,9 @@ struct TRINITY_DLL_DECL eye_of_cthunAI : public Scripted_NoMovementAI
void SpawnEyeTentacle(float x, float y) void SpawnEyeTentacle(float x, float y)
{ {
Creature* Spawned; if (Creature* Spawned = me->SummonCreature(MOB_EYE_TENTACLE,m_creature->GetPositionX()+x,m_creature->GetPositionY()+y,m_creature->GetPositionZ(),0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,500))
Spawned = me->SummonCreature(MOB_EYE_TENTACLE,m_creature->GetPositionX()+x,m_creature->GetPositionY()+y,m_creature->GetPositionZ(),0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,500); if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0))
if (Spawned)
{
Unit* target;
target = SelectUnit(SELECT_TARGET_RANDOM,0);
if (target)
Spawned->AI()->AttackStart(target); Spawned->AI()->AttackStart(target);
}
} }
void UpdateAI(const uint32 diff) void UpdateAI(const uint32 diff)
@@ -235,7 +228,7 @@ struct TRINITY_DLL_DECL eye_of_cthunAI : public Scripted_NoMovementAI
//Beam every 3 seconds //Beam every 3 seconds
BeamTimer = 3000; BeamTimer = 3000;
}else BeamTimer -= diff; } else BeamTimer -= diff;
//ClawTentacleTimer //ClawTentacleTimer
if (ClawTentacleTimer < diff) if (ClawTentacleTimer < diff)
@@ -255,7 +248,7 @@ struct TRINITY_DLL_DECL eye_of_cthunAI : public Scripted_NoMovementAI
//One claw tentacle every 12.5 seconds //One claw tentacle every 12.5 seconds
ClawTentacleTimer = 12500; ClawTentacleTimer = 12500;
}else ClawTentacleTimer -= diff; } else ClawTentacleTimer -= diff;
//EyeTentacleTimer //EyeTentacleTimer
if (EyeTentacleTimer < diff) if (EyeTentacleTimer < diff)
@@ -274,7 +267,7 @@ struct TRINITY_DLL_DECL eye_of_cthunAI : public Scripted_NoMovementAI
//No point actually putting a timer here since //No point actually putting a timer here since
//These shouldn't trigger agian until after phase shifts //These shouldn't trigger agian until after phase shifts
EyeTentacleTimer = 45000; EyeTentacleTimer = 45000;
}else EyeTentacleTimer -= diff; } else EyeTentacleTimer -= diff;
//PhaseTimer //PhaseTimer
if (PhaseTimer < diff) if (PhaseTimer < diff)
@@ -316,26 +309,27 @@ struct TRINITY_DLL_DECL eye_of_cthunAI : public Scripted_NoMovementAI
//EyeTentacleTimer //EyeTentacleTimer
if (DarkGlareTick < 35) if (DarkGlareTick < 35)
if (DarkGlareTickTimer < diff) if (DarkGlareTickTimer < diff)
{ {
//Remove any target //Remove any target
m_creature->SetUInt64Value(UNIT_FIELD_TARGET, 0); m_creature->SetUInt64Value(UNIT_FIELD_TARGET, 0);
//Set angle and cast //Set angle and cast
if (ClockWise) if (ClockWise)
m_creature->SetOrientation(DarkGlareAngle + ((float)DarkGlareTick*PI/35)); m_creature->SetOrientation(DarkGlareAngle + ((float)DarkGlareTick*PI/35));
else m_creature->SetOrientation(DarkGlareAngle - ((float)DarkGlareTick*PI/35)); else
m_creature->SetOrientation(DarkGlareAngle - ((float)DarkGlareTick*PI/35));
m_creature->StopMoving(); m_creature->StopMoving();
//Actual dark glare cast, maybe something missing here? //Actual dark glare cast, maybe something missing here?
m_creature->CastSpell(m_creature, SPELL_DARK_GLARE, false); m_creature->CastSpell(m_creature, SPELL_DARK_GLARE, false);
//Increase tick //Increase tick
DarkGlareTick++; DarkGlareTick++;
//1 second per tick //1 second per tick
DarkGlareTickTimer = 1000; DarkGlareTickTimer = 1000;
}else DarkGlareTickTimer -= diff; } else DarkGlareTickTimer -= diff;
//PhaseTimer //PhaseTimer
if (PhaseTimer < diff) if (PhaseTimer < diff)
@@ -357,8 +351,9 @@ struct TRINITY_DLL_DECL eye_of_cthunAI : public Scripted_NoMovementAI
//Eye Beam for 50 seconds //Eye Beam for 50 seconds
PhaseTimer = 50000; PhaseTimer = 50000;
}else PhaseTimer -= diff; } else PhaseTimer -= diff;
}break; }
break;
//Transition phase //Transition phase
case 2: case 2:
@@ -371,7 +366,7 @@ struct TRINITY_DLL_DECL eye_of_cthunAI : public Scripted_NoMovementAI
//Dead phase //Dead phase
case 5: case 5:
{ {
m_creature->DealDamage(m_creature, m_creature->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NONE, NULL, false); m_creature->Kill(m_creature);
} }
} }
} }
@@ -538,9 +533,8 @@ struct TRINITY_DLL_DECL cthunAI : public ScriptedAI
//Only units out of stomach //Only units out of stomach
if (pUnit && i->second == false) if (pUnit && i->second == false)
{
temp.push_back(pUnit); temp.push_back(pUnit);
}
++i; ++i;
} }
@@ -581,8 +575,8 @@ struct TRINITY_DLL_DECL cthunAI : public ScriptedAI
} }
//One random wisper every 90 - 300 seconds //One random wisper every 90 - 300 seconds
WisperTimer = 90000 + (rand()% 210000); WisperTimer = urand(90000,300000);
}else WisperTimer -= diff; } else WisperTimer -= diff;
return; return;
} }
@@ -647,9 +641,10 @@ struct TRINITY_DLL_DECL cthunAI : public ScriptedAI
CAST_AI(flesh_tentacleAI, (Spawned->AI()))->SpawnedByCthun(m_creature->GetGUID()); CAST_AI(flesh_tentacleAI, (Spawned->AI()))->SpawnedByCthun(m_creature->GetGUID());
PhaseTimer = 0; PhaseTimer = 0;
}else PhaseTimer -= diff; } else PhaseTimer -= diff;
}break; }
break;
//Body Phase //Body Phase
case 3: case 3:
@@ -750,22 +745,22 @@ struct TRINITY_DLL_DECL cthunAI : public ScriptedAI
} }
StomachEnterTimer = 13800; StomachEnterTimer = 13800;
}else StomachEnterTimer -= diff; } else StomachEnterTimer -= diff;
if (StomachEnterVisTimer && StomachEnterTarget) if (StomachEnterVisTimer && StomachEnterTarget)
if (StomachEnterVisTimer <= diff) if (StomachEnterVisTimer <= diff)
{
//Check for valid player
Unit* pUnit = Unit::GetUnit(*m_creature, StomachEnterTarget);
if (pUnit)
{ {
DoTeleportPlayer(pUnit, STOMACH_X, STOMACH_Y, STOMACH_Z, STOMACH_O); //Check for valid player
} Unit* pUnit = Unit::GetUnit(*m_creature, StomachEnterTarget);
StomachEnterTarget = 0; if (pUnit)
StomachEnterVisTimer = 0; {
}else StomachEnterVisTimer -= diff; DoTeleportPlayer(pUnit, STOMACH_X, STOMACH_Y, STOMACH_Z, STOMACH_O);
}
StomachEnterTarget = 0;
StomachEnterVisTimer = 0;
} else StomachEnterVisTimer -= diff;
//GientClawTentacleTimer //GientClawTentacleTimer
if (GiantClawTentacleTimer < diff) if (GiantClawTentacleTimer < diff)
@@ -849,7 +844,7 @@ struct TRINITY_DLL_DECL cthunAI : public ScriptedAI
Spawned = me->SummonCreature(MOB_FLESH_TENTACLE, TENTACLE_POS1_X, TENTACLE_POS1_Y, TENTACLE_POS1_Z, TENTACLE_POS1_O, TEMPSUMMON_CORPSE_DESPAWN, 0); Spawned = me->SummonCreature(MOB_FLESH_TENTACLE, TENTACLE_POS1_X, TENTACLE_POS1_Y, TENTACLE_POS1_Z, TENTACLE_POS1_O, TEMPSUMMON_CORPSE_DESPAWN, 0);
if (!Spawned) if (!Spawned)
FleshTentaclesKilled++; ++FleshTentaclesKilled;
else else
CAST_AI(flesh_tentacleAI, (Spawned->AI()))->SpawnedByCthun(m_creature->GetGUID()); CAST_AI(flesh_tentacleAI, (Spawned->AI()))->SpawnedByCthun(m_creature->GetGUID());
@@ -857,12 +852,12 @@ struct TRINITY_DLL_DECL cthunAI : public ScriptedAI
Spawned = me->SummonCreature(MOB_FLESH_TENTACLE, TENTACLE_POS2_X, TENTACLE_POS2_Y, TENTACLE_POS2_Z, TENTACLE_POS2_O, TEMPSUMMON_CORPSE_DESPAWN, 0); Spawned = me->SummonCreature(MOB_FLESH_TENTACLE, TENTACLE_POS2_X, TENTACLE_POS2_Y, TENTACLE_POS2_Z, TENTACLE_POS2_O, TEMPSUMMON_CORPSE_DESPAWN, 0);
if (!Spawned) if (!Spawned)
FleshTentaclesKilled++; ++FleshTentaclesKilled;
else else
CAST_AI(flesh_tentacleAI, (Spawned->AI()))->SpawnedByCthun(m_creature->GetGUID()); CAST_AI(flesh_tentacleAI, (Spawned->AI()))->SpawnedByCthun(m_creature->GetGUID());
PhaseTimer = 0; PhaseTimer = 0;
}else PhaseTimer -= diff; } else PhaseTimer -= diff;
} }
} }
} }
@@ -931,7 +926,7 @@ struct TRINITY_DLL_DECL eye_tentacleAI : public ScriptedAI
void JustDied(Unit* who) void JustDied(Unit* who)
{ {
if (Unit* p = Unit::GetUnit(*m_creature, Portal)) if (Unit* p = Unit::GetUnit(*m_creature, Portal))
p->DealDamage(p, p->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NONE, NULL, false); p->Kill(p);
} }
void Reset() void Reset()
@@ -957,10 +952,9 @@ struct TRINITY_DLL_DECL eye_tentacleAI : public ScriptedAI
//KillSelfTimer //KillSelfTimer
if (KillSelfTimer < diff) if (KillSelfTimer < diff)
{ {
m_creature->DealDamage(m_creature, m_creature->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NONE, NULL, false); m_creature->Kill(m_creature);
return; return;
}else KillSelfTimer -= diff; } else KillSelfTimer -= diff;
//MindflayTimer //MindflayTimer
if (MindflayTimer < diff) if (MindflayTimer < diff)
@@ -970,8 +964,8 @@ struct TRINITY_DLL_DECL eye_tentacleAI : public ScriptedAI
DoCast(target,SPELL_MIND_FLAY); DoCast(target,SPELL_MIND_FLAY);
//Mindflay every 10 seconds //Mindflay every 10 seconds
MindflayTimer = 10100; MindflayTimer = 10000;
}else MindflayTimer -= diff; } else MindflayTimer -= diff;
} }
}; };
@@ -993,7 +987,7 @@ struct TRINITY_DLL_DECL claw_tentacleAI : public ScriptedAI
void JustDied(Unit* who) void JustDied(Unit* who)
{ {
if (Unit* p = Unit::GetUnit(*m_creature, Portal)) if (Unit* p = Unit::GetUnit(*m_creature, Portal))
p->DealDamage(p, p->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NONE, NULL, false); p->Kill(p);
} }
void Reset() void Reset()
@@ -1018,49 +1012,48 @@ struct TRINITY_DLL_DECL claw_tentacleAI : public ScriptedAI
//EvadeTimer //EvadeTimer
if (!m_creature->IsWithinMeleeRange(m_creature->getVictim())) if (!m_creature->IsWithinMeleeRange(m_creature->getVictim()))
if (EvadeTimer < diff) if (EvadeTimer < diff)
{
if (Unit* p = Unit::GetUnit(*m_creature, Portal))
p->DealDamage(p, m_creature->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NONE, NULL, false);
//Dissapear and reappear at new position
m_creature->SetVisibility(VISIBILITY_OFF);
Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0);
if (!target)
{ {
m_creature->DealDamage(m_creature, m_creature->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NONE, NULL, false); if (Unit* p = Unit::GetUnit(*m_creature, Portal))
return; p->Kill(p);
}
if (!target->HasAura(SPELL_DIGESTIVE_ACID)) //Dissapear and reappear at new position
{ m_creature->SetVisibility(VISIBILITY_OFF);
m_creature->GetMap()->CreatureRelocation(m_creature, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0);
if (Unit* pPortal = m_creature->SummonCreature(MOB_SMALL_PORTAL, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_CORPSE_DESPAWN, 0))
Portal = pPortal->GetGUID();
GroundRuptureTimer = 500; Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0);
HamstringTimer = 2000; if (!target)
EvadeTimer = 5000; {
AttackStart(target); m_creature->Kill(m_creature);
} return;
}
m_creature->SetVisibility(VISIBILITY_ON); if (!target->HasAura(SPELL_DIGESTIVE_ACID))
{
m_creature->GetMap()->CreatureRelocation(m_creature, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0);
if (Unit* pPortal = m_creature->SummonCreature(MOB_SMALL_PORTAL, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_CORPSE_DESPAWN, 0))
Portal = pPortal->GetGUID();
}else EvadeTimer -= diff; GroundRuptureTimer = 500;
HamstringTimer = 2000;
EvadeTimer = 5000;
AttackStart(target);
}
m_creature->SetVisibility(VISIBILITY_ON);
} else EvadeTimer -= diff;
//GroundRuptureTimer //GroundRuptureTimer
if (GroundRuptureTimer < diff) if (GroundRuptureTimer < diff)
{ {
DoCast(m_creature->getVictim(),SPELL_GROUND_RUPTURE); DoCast(m_creature->getVictim(),SPELL_GROUND_RUPTURE);
GroundRuptureTimer = 30000; GroundRuptureTimer = 30000;
}else GroundRuptureTimer -= diff; } else GroundRuptureTimer -= diff;
//HamstringTimer //HamstringTimer
if (HamstringTimer < diff) if (HamstringTimer < diff)
{ {
DoCast(m_creature->getVictim(),SPELL_HAMSTRING); DoCast(m_creature->getVictim(),SPELL_HAMSTRING);
HamstringTimer = 5000; HamstringTimer = 5000;
}else HamstringTimer -= diff; } else HamstringTimer -= diff;
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
} }
@@ -1085,7 +1078,7 @@ struct TRINITY_DLL_DECL giant_claw_tentacleAI : public ScriptedAI
void JustDied(Unit* who) void JustDied(Unit* who)
{ {
if (Unit* p = Unit::GetUnit(*m_creature, Portal)) if (Unit* p = Unit::GetUnit(*m_creature, Portal))
p->DealDamage(p, p->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NONE, NULL, false); p->Kill(p);
} }
void Reset() void Reset()
@@ -1113,7 +1106,7 @@ struct TRINITY_DLL_DECL giant_claw_tentacleAI : public ScriptedAI
if (EvadeTimer < diff) if (EvadeTimer < diff)
{ {
if (Unit* p = Unit::GetUnit(*m_creature, Portal)) if (Unit* p = Unit::GetUnit(*m_creature, Portal))
p->DealDamage(p, m_creature->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NONE, NULL, false); p->Kill(p);
//Dissapear and reappear at new position //Dissapear and reappear at new position
m_creature->SetVisibility(VISIBILITY_OFF); m_creature->SetVisibility(VISIBILITY_OFF);
@@ -1121,7 +1114,7 @@ struct TRINITY_DLL_DECL giant_claw_tentacleAI : public ScriptedAI
Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0); Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0);
if (!target) if (!target)
{ {
m_creature->DealDamage(m_creature, m_creature->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NONE, NULL, false); m_creature->Kill(m_creature);
return; return;
} }
@@ -1140,28 +1133,28 @@ struct TRINITY_DLL_DECL giant_claw_tentacleAI : public ScriptedAI
m_creature->SetVisibility(VISIBILITY_ON); m_creature->SetVisibility(VISIBILITY_ON);
}else EvadeTimer -= diff; } else EvadeTimer -= diff;
//GroundRuptureTimer //GroundRuptureTimer
if (GroundRuptureTimer < diff) if (GroundRuptureTimer < diff)
{ {
DoCast(m_creature->getVictim(),SPELL_GROUND_RUPTURE); DoCast(m_creature->getVictim(),SPELL_GROUND_RUPTURE);
GroundRuptureTimer = 30000; GroundRuptureTimer = 30000;
}else GroundRuptureTimer -= diff; } else GroundRuptureTimer -= diff;
//ThrashTimer //ThrashTimer
if (ThrashTimer < diff) if (ThrashTimer < diff)
{ {
DoCast(m_creature->getVictim(),SPELL_THRASH); DoCast(m_creature->getVictim(),SPELL_THRASH);
ThrashTimer = 10000; ThrashTimer = 10000;
}else ThrashTimer -= diff; } else ThrashTimer -= diff;
//HamstringTimer //HamstringTimer
if (HamstringTimer < diff) if (HamstringTimer < diff)
{ {
DoCast(m_creature->getVictim(),SPELL_HAMSTRING); DoCast(m_creature->getVictim(),SPELL_HAMSTRING);
HamstringTimer = 10000; HamstringTimer = 10000;
}else HamstringTimer -= diff; } else HamstringTimer -= diff;
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
} }
@@ -1183,7 +1176,7 @@ struct TRINITY_DLL_DECL giant_eye_tentacleAI : public ScriptedAI
void JustDied(Unit* who) void JustDied(Unit* who)
{ {
if (Unit* p = Unit::GetUnit(*m_creature, Portal)) if (Unit* p = Unit::GetUnit(*m_creature, Portal))
p->DealDamage(p, p->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NONE, NULL, false); p->Kill(p);
} }
void Reset() void Reset()
@@ -359,11 +359,9 @@ struct TRINITY_DLL_DECL mob_taldaram_flamesphereAI : public ScriptedAI
void UpdateAI(const uint32 diff) void UpdateAI(const uint32 diff)
{ {
if (uiDespawnTimer < diff) if (uiDespawnTimer < diff)
{ m_creature->DisappearAndDie();
m_creature->DealDamage(m_creature, m_creature->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); else
m_creature->RemoveCorpse(); uiDespawnTimer -= diff;
}
else uiDespawnTimer -= diff;
} }
}; };
@@ -128,13 +128,14 @@ struct TRINITY_DLL_DECL instance_drak_tharon : public ScriptedInstance
uint32 GetData(uint32 type) uint32 GetData(uint32 type)
{ {
switch(type) switch (type)
{ {
case DATA_TROLLGORE_EVENT: return m_auiEncounter[0]; case DATA_TROLLGORE_EVENT: return m_auiEncounter[0];
case DATA_NOVOS_EVENT: return m_auiEncounter[1]; case DATA_NOVOS_EVENT: return m_auiEncounter[1];
case DATA_DRED_EVENT: return m_auiEncounter[2]; case DATA_DRED_EVENT: return m_auiEncounter[2];
case DATA_THARON_JA_EVENT: return m_auiEncounter[3]; case DATA_THARON_JA_EVENT: return m_auiEncounter[3];
} }
return 0;
} }
std::string GetSaveData() std::string GetSaveData()
@@ -164,10 +165,10 @@ struct TRINITY_DLL_DECL instance_drak_tharon : public ScriptedInstance
OUT_LOAD_INST_DATA(in); OUT_LOAD_INST_DATA(in);
char dataHead1, dataHead2; char dataHead1, dataHead2;
uint16 data0,data1,data2,data3,data4, data5, data6; uint16 data0,data1,data2,data3,data4;//,data5,data6;
std::istringstream loadStream(in); std::istringstream loadStream(in);
loadStream >> dataHead1 >> dataHead2 >> data0 >> data1 >> data2 >> data3; loadStream >> dataHead1 >> dataHead2 >> data0 >> data1 >> data2 >> data3 >> data4;
if (dataHead1 == 'D' && dataHead2 == 'K') if (dataHead1 == 'D' && dataHead2 == 'K')
{ {
@@ -245,10 +245,8 @@ struct TRINITY_DLL_DECL mob_malformed_oozeAI : public ScriptedAI
if (Creature* pTemp = m_creature->FindNearestCreature(CREATURE_MALFORMED_OOZE, 1.0f, true)) if (Creature* pTemp = m_creature->FindNearestCreature(CREATURE_MALFORMED_OOZE, 1.0f, true))
{ {
DoSpawnCreature(CREATURE_IRON_SLUDGE, 0, 0, 0, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 20000); DoSpawnCreature(CREATURE_IRON_SLUDGE, 0, 0, 0, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 20000);
pTemp->Kill(pTemp, false); pTemp->DisappearAndDie();
pTemp->RemoveCorpse(); m_creature->DisappearAndDie();
m_creature->Kill(m_creature, false);
m_creature->RemoveCorpse();
} else bIsMerging = false; } else bIsMerging = false;
} else uiMergeTimer -= diff; } else uiMergeTimer -= diff;
} }
@@ -262,7 +260,7 @@ struct TRINITY_DLL_DECL mob_malformed_oozeAI : public ScriptedAI
void MovementInform(uint32 type, uint32 id) void MovementInform(uint32 type, uint32 id)
{ {
if(type != POINT_MOTION_TYPE) if(type != POINT_MOTION_TYPE)
return; return;
bIsMerging = true; bIsMerging = true;
} }
}; };
@@ -691,4 +691,4 @@ void AddSC_halls_of_stone()
newscript->Name = "mob_tribuna_controller"; newscript->Name = "mob_tribuna_controller";
newscript->GetAI = &GetAI_mob_tribuna_controller; newscript->GetAI = &GetAI_mob_tribuna_controller;
newscript->RegisterSelf(); newscript->RegisterSelf();
}␍ }
@@ -367,7 +367,7 @@ struct TRINITY_DLL_DECL mob_lightning_elementalAI : public ScriptedAI
if(m_creature->IsWithinMeleeRange(Target)) if(m_creature->IsWithinMeleeRange(Target))
{ {
DoCast(Target, (HeroicMode) ? SPELL_LIGHTNING_BLAST_H : SPELL_LIGHTNING_BLAST); DoCast(Target, (HeroicMode) ? SPELL_LIGHTNING_BLAST_H : SPELL_LIGHTNING_BLAST);
m_creature->DealDamage(m_creature, m_creature->GetMaxHealth()); // hack untill spell works m_creature->Kill(m_creature); // hack until spell works
} }
m_creature->GetMotionMaster()->MoveChase(Target); // needed at every update? m_creature->GetMotionMaster()->MoveChase(Target); // needed at every update?
@@ -173,8 +173,7 @@ struct TRINITY_DLL_DECL boss_svalaAI : public ScriptedAI
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
m_creature->SetDisplayId(DATA_SVALA_DISPLAY_ID); m_creature->SetDisplayId(DATA_SVALA_DISPLAY_ID);
pArthas->Kill(pArthas, false); pArthas->DisappearAndDie();
pArthas->RemoveCorpse();
Phase = FINISHED; Phase = FINISHED;
} }
else Reset(); else Reset();
@@ -294,7 +293,7 @@ struct TRINITY_DLL_DECL boss_svala_sorrowgraveAI : public ScriptedAI
if (mob_ritual_channelerAI *pChannelerAI = CAST_AI(mob_ritual_channelerAI,pRitualChanneler[i]->AI())) if (mob_ritual_channelerAI *pChannelerAI = CAST_AI(mob_ritual_channelerAI,pRitualChanneler[i]->AI()))
pChannelerAI->AttackStartNoMove(pSacrificeTarget); pChannelerAI->AttackStartNoMove(pSacrificeTarget);
uiRitualOfSwordTimer = 18000 + rand()%4000; uiRitualOfSwordTimer = urand(18000,22000);
} }
} else uiRitualOfSwordTimer -= diff; } else uiRitualOfSwordTimer -= diff;
@@ -314,7 +313,7 @@ struct TRINITY_DLL_DECL boss_svala_sorrowgraveAI : public ScriptedAI
} }
} }
if (bSacrificed && pSacrificeTarget && pSacrificeTarget->isAlive()) if (bSacrificed && pSacrificeTarget && pSacrificeTarget->isAlive())
m_creature->Kill(pSacrificeTarget, false); m_creature->Kill(pSacrificeTarget, false); // durability damage?
//go down //go down
Phase = NORMAL; Phase = NORMAL;
@@ -343,7 +342,7 @@ struct TRINITY_DLL_DECL boss_svala_sorrowgraveAI : public ScriptedAI
{ {
Creature* pSvala = Unit::GetCreature((*m_creature), pInstance->GetData64(DATA_SVALA)); Creature* pSvala = Unit::GetCreature((*m_creature), pInstance->GetData64(DATA_SVALA));
if (pSvala && pSvala->isAlive()) if (pSvala && pSvala->isAlive())
pKiller->Kill(pSvala, false); pKiller->Kill(pSvala);
pInstance->SetData(DATA_SVALA_SORROWGRAVE_EVENT, IN_PROGRESS); pInstance->SetData(DATA_SVALA_SORROWGRAVE_EVENT, IN_PROGRESS);
} }
@@ -48,14 +48,9 @@ struct TRINITY_DLL_DECL instance_sethekk_halls : public ScriptedInstance
if (pCreature->GetEntry() == NPC_ANZU) if (pCreature->GetEntry() == NPC_ANZU)
{ {
if (AnzuEncounter >= IN_PROGRESS) if (AnzuEncounter >= IN_PROGRESS)
{ pCreature->DisappearAndDie();
pCreature->DealDamage(pCreature, pCreature->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); else
pCreature->RemoveCorpse();
}
else
{
AnzuEncounter = IN_PROGRESS; AnzuEncounter = IN_PROGRESS;
}
} }
} }
@@ -85,7 +85,7 @@ struct TRINITY_DLL_DECL mob_voidtravelerAI : public ScriptedAI
{ {
if (!Vorpil) if (!Vorpil)
{ {
m_creature->DealDamage(m_creature, m_creature->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); m_creature->Kill(m_creature);
return; return;
} }
if (move < diff) if (move < diff)
@@ -97,7 +97,7 @@ struct TRINITY_DLL_DECL mob_voidtravelerAI : public ScriptedAI
Vorpil->AddAura(new Aura(spell, 1, Vorpil, me, me)); Vorpil->AddAura(new Aura(spell, 1, Vorpil, me, me));
Vorpil->SetHealth(Vorpil->GetHealth()+Vorpil->GetMaxHealth()/25); Vorpil->SetHealth(Vorpil->GetHealth()+Vorpil->GetMaxHealth()/25);
DoCast(m_creature, SPELL_SHADOW_NOVA, true); DoCast(m_creature, SPELL_SHADOW_NOVA, true);
m_creature->DealDamage(m_creature, m_creature->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); m_creature->Kill(m_creature);
return; return;
} }
m_creature->GetMotionMaster()->MoveFollow(Vorpil,0,0); m_creature->GetMotionMaster()->MoveFollow(Vorpil,0,0);
@@ -110,11 +110,11 @@ struct TRINITY_DLL_DECL mob_voidtravelerAI : public ScriptedAI
} }
if (!Vorpil->isInCombat() || Vorpil->isDead()) if (!Vorpil->isInCombat() || Vorpil->isDead())
{ {
m_creature->DealDamage(m_creature, m_creature->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); m_creature->Kill(m_creature);
return; return;
} }
move = 1000; move = 1000;
}else move -= diff; } else move -= diff;
} }
}; };
CreatureAI* GetAI_mob_voidtraveler(Creature* pCreature) CreatureAI* GetAI_mob_voidtraveler(Creature* pCreature)
@@ -159,7 +159,7 @@ struct TRINITY_DLL_DECL boss_grandmaster_vorpilAI : public ScriptedAI
{ {
if (!sumportals) if (!sumportals)
{ {
for (int i = 0;i<5; ++i) for (uint8 i = 0; i < 5; ++i)
{ {
Creature *Portal = NULL; Creature *Portal = NULL;
Portal = m_creature->SummonCreature(MOB_VOID_PORTAL,VoidPortalCoords[i][0],VoidPortalCoords[i][1],VoidPortalCoords[i][2],0,TEMPSUMMON_CORPSE_DESPAWN,3000000); Portal = m_creature->SummonCreature(MOB_VOID_PORTAL,VoidPortalCoords[i][0],VoidPortalCoords[i][1],VoidPortalCoords[i][2],0,TEMPSUMMON_CORPSE_DESPAWN,3000000);
@@ -178,7 +178,7 @@ struct TRINITY_DLL_DECL boss_grandmaster_vorpilAI : public ScriptedAI
{ {
if (sumportals) if (sumportals)
{ {
for (int i = 0;i < 5; i ++) for (uint8 i = 0; i < 5; ++i)
{ {
Unit *Portal = Unit::GetUnit((*m_creature), PortalsGuid[i]); Unit *Portal = Unit::GetUnit((*m_creature), PortalsGuid[i]);
if (Portal && Portal->isAlive()) if (Portal && Portal->isAlive())
@@ -191,7 +191,7 @@ struct TRINITY_DLL_DECL boss_grandmaster_vorpilAI : public ScriptedAI
void spawnVoidTraveler() void spawnVoidTraveler()
{ {
int pos = rand()%5; int pos = urand(0,4);
m_creature->SummonCreature(MOB_VOID_TRAVELER,VoidPortalCoords[pos][0],VoidPortalCoords[pos][1],VoidPortalCoords[pos][2],0,TEMPSUMMON_CORPSE_TIMED_DESPAWN,5000); m_creature->SummonCreature(MOB_VOID_TRAVELER,VoidPortalCoords[pos][0],VoidPortalCoords[pos][1],VoidPortalCoords[pos][2],0,TEMPSUMMON_CORPSE_TIMED_DESPAWN,5000);
if (!HelpYell) if (!HelpYell)
{ {
@@ -208,11 +208,7 @@ struct TRINITY_DLL_DECL boss_grandmaster_vorpilAI : public ScriptedAI
void KilledUnit(Unit *victim) void KilledUnit(Unit *victim)
{ {
switch(rand()%2) DoScriptText(RAND(SAY_SLAY1,SAY_SLAY2), m_creature);
{
case 0: DoScriptText(SAY_SLAY1, m_creature); break;
case 1: DoScriptText(SAY_SLAY2, m_creature); break;
}
} }
void JustDied(Unit *victim) void JustDied(Unit *victim)
@@ -226,12 +222,7 @@ struct TRINITY_DLL_DECL boss_grandmaster_vorpilAI : public ScriptedAI
void EnterCombat(Unit *who) void EnterCombat(Unit *who)
{ {
switch(rand()%3) DoScriptText(RAND(SAY_AGGRO1,SAY_AGGRO2,SAY_AGGRO3), m_creature);
{
case 0: DoScriptText(SAY_AGGRO1, m_creature); break;
case 1: DoScriptText(SAY_AGGRO2, m_creature); break;
case 2: DoScriptText(SAY_AGGRO3, m_creature); break;
}
summonPortals(); summonPortals();
if (pInstance) if (pInstance)
@@ -258,7 +249,7 @@ struct TRINITY_DLL_DECL boss_grandmaster_vorpilAI : public ScriptedAI
{ {
DoCast(m_creature,SPELL_SHADOWBOLT_VOLLEY); DoCast(m_creature,SPELL_SHADOWBOLT_VOLLEY);
ShadowBoltVolley_Timer = 15000 + rand()%15000;; ShadowBoltVolley_Timer = 15000 + rand()%15000;;
}else ShadowBoltVolley_Timer -= diff; } else ShadowBoltVolley_Timer -= diff;
if (HeroicMode && banish_Timer < diff) if (HeroicMode && banish_Timer < diff)
{ {
@@ -268,7 +259,7 @@ struct TRINITY_DLL_DECL boss_grandmaster_vorpilAI : public ScriptedAI
DoCast(target,SPELL_BANISH); DoCast(target,SPELL_BANISH);
banish_Timer = 16000; banish_Timer = 16000;
} }
}else banish_Timer -= diff; } else banish_Timer -= diff;
if (DrawShadows_Timer < diff) if (DrawShadows_Timer < diff)
{ {
@@ -286,7 +277,7 @@ struct TRINITY_DLL_DECL boss_grandmaster_vorpilAI : public ScriptedAI
ShadowBoltVolley_Timer = 6000; ShadowBoltVolley_Timer = 6000;
DrawShadows_Timer = 30000; DrawShadows_Timer = 30000;
}else DrawShadows_Timer -= diff; } else DrawShadows_Timer -= diff;
if (summonTraveler_Timer < diff) if (summonTraveler_Timer < diff)
{ {
@@ -295,7 +286,7 @@ struct TRINITY_DLL_DECL boss_grandmaster_vorpilAI : public ScriptedAI
//enrage at 20% //enrage at 20%
if ((m_creature->GetHealth()*5) < m_creature->GetMaxHealth()) if ((m_creature->GetHealth()*5) < m_creature->GetMaxHealth())
summonTraveler_Timer = 5000; summonTraveler_Timer = 5000;
}else summonTraveler_Timer -=diff; } else summonTraveler_Timer -=diff;
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
} }
@@ -309,12 +300,12 @@ void AddSC_boss_grandmaster_vorpil()
{ {
Script *newscript; Script *newscript;
newscript = new Script; newscript = new Script;
newscript->Name="boss_grandmaster_vorpil"; newscript->Name = "boss_grandmaster_vorpil";
newscript->GetAI = &GetAI_boss_grandmaster_vorpil; newscript->GetAI = &GetAI_boss_grandmaster_vorpil;
newscript->RegisterSelf(); newscript->RegisterSelf();
newscript = new Script; newscript = new Script;
newscript->Name="mob_voidtraveler"; newscript->Name = "mob_voidtraveler";
newscript->GetAI = &GetAI_mob_voidtraveler; newscript->GetAI = &GetAI_mob_voidtraveler;
newscript->RegisterSelf(); newscript->RegisterSelf();
} }
@@ -472,7 +472,7 @@ struct TRINITY_DLL_DECL boss_shade_of_akamaAI : public ScriptedAI
{ {
EnterEvadeMode();// Reset a little while after killing Akama, evade and respawn Akama EnterEvadeMode();// Reset a little while after killing Akama, evade and respawn Akama
return; return;
}else ResetTimer -= diff; } else ResetTimer -= diff;
} }
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
@@ -639,13 +639,9 @@ struct TRINITY_DLL_DECL mob_enchanted_elementalAI : public ScriptedAI
{ {
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_WALK_MODE); m_creature->AddUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
if (phase == 1) if (phase == 1)
{
m_creature->GetMotionMaster()->MovePoint(0, x, y, z); m_creature->GetMotionMaster()->MovePoint(0, x, y, z);
}
if (phase == 1 && m_creature->IsWithinDist3d(x,y,z, 0.1)) if (phase == 1 && m_creature->IsWithinDist3d(x,y,z, 0.1))
{
phase = 2; phase = 2;
}
if (phase == 2) if (phase == 2)
{ {
m_creature->GetMotionMaster()->MovePoint(0, MIDDLE_X, MIDDLE_Y, MIDDLE_Z); m_creature->GetMotionMaster()->MovePoint(0, MIDDLE_X, MIDDLE_Y, MIDDLE_Z);
@@ -660,7 +656,7 @@ struct TRINITY_DLL_DECL mob_enchanted_elementalAI : public ScriptedAI
if (spell) if (spell)
{ {
uint8 eff_mask=0; uint8 eff_mask=0;
for (int i=0; i<3; ++i) for (uint8 i = 0; i < 3; ++i)
{ {
if (!spell->Effect[i]) if (!spell->Effect[i])
continue; continue;
@@ -668,16 +664,16 @@ struct TRINITY_DLL_DECL mob_enchanted_elementalAI : public ScriptedAI
} }
Vashj->AddAura(new Aura(spell, eff_mask, Vashj, Vashj, Vashj)); Vashj->AddAura(new Aura(spell, eff_mask, Vashj, Vashj, Vashj));
} }
m_creature->DealDamage(m_creature, m_creature->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); m_creature->Kill(m_creature);
} }
} }
if (!Vashj->isInCombat() || CAST_AI(boss_lady_vashjAI, Vashj->AI())->Phase != 2 || Vashj->isDead()) if (!Vashj->isInCombat() || CAST_AI(boss_lady_vashjAI, Vashj->AI())->Phase != 2 || Vashj->isDead())
{ {
//call Unsummon() //call Unsummon()
m_creature->DealDamage(m_creature, m_creature->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); m_creature->Kill(m_creature);
} }
move = 1000; move = 1000;
}else move -= diff; } else move -= diff;
} }
}; };
@@ -82,11 +82,7 @@ struct TRINITY_DLL_DECL boss_the_black_stalkerAI : public ScriptedAI
{ {
for(std::list<uint64>::iterator i = Striders.begin(); i != Striders.end(); ++i) for(std::list<uint64>::iterator i = Striders.begin(); i != Striders.end(); ++i)
if (Creature *strider = Unit::GetCreature(*m_creature, *i)) if (Creature *strider = Unit::GetCreature(*m_creature, *i))
{ strider->DisappearAndDie();
strider->SetLootRecipient(NULL);
strider->DealDamage(strider,strider->GetMaxHealth(),NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
strider->RemoveCorpse();
}
} }
void UpdateAI(const uint32 diff) void UpdateAI(const uint32 diff)
@@ -109,12 +109,9 @@ struct TRINITY_DLL_DECL boss_nazanAI : public ScriptedAI
if (!UpdateVictim()) if (!UpdateVictim())
{ {
if (UnsummonCheck < diff && m_creature->isAlive()) if (UnsummonCheck < diff && m_creature->isAlive())
{ m_creature->DisappearAndDie();
m_creature->SetLootRecipient(NULL); else
m_creature->SetVisibility(VISIBILITY_OFF); UnsummonCheck -= diff;
m_creature->DealDamage(m_creature, m_creature->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
m_creature->RemoveCorpse();
}else UnsummonCheck -= diff;
return; return;
} }
@@ -122,8 +119,8 @@ struct TRINITY_DLL_DECL boss_nazanAI : public ScriptedAI
{ {
if (Unit *victim = SelectUnit(SELECT_TARGET_RANDOM,0)) if (Unit *victim = SelectUnit(SELECT_TARGET_RANDOM,0))
DoCast(victim, SPELL_FIREBALL,true); DoCast(victim, SPELL_FIREBALL,true);
Fireball_Timer = 4000+rand()%3000; Fireball_Timer = urand(4000,7000);
}else Fireball_Timer -= diff; } else Fireball_Timer -= diff;
if (flight) // phase 1 - the flight if (flight) // phase 1 - the flight
{ {
@@ -149,7 +146,7 @@ struct TRINITY_DLL_DECL boss_nazanAI : public ScriptedAI
if (m_creature->IsWithinDist3d(VazrudenRing[waypoint][0],VazrudenRing[waypoint][1],VazrudenRing[waypoint][2], 5)) if (m_creature->IsWithinDist3d(VazrudenRing[waypoint][0],VazrudenRing[waypoint][1],VazrudenRing[waypoint][2], 5))
m_creature->GetMotionMaster()->MovePoint(0,VazrudenRing[waypoint][0],VazrudenRing[waypoint][1],VazrudenRing[waypoint][2]); m_creature->GetMotionMaster()->MovePoint(0,VazrudenRing[waypoint][0],VazrudenRing[waypoint][1],VazrudenRing[waypoint][2]);
Turn_Timer = 10000; Turn_Timer = 10000;
}else Turn_Timer -= diff; } else Turn_Timer -= diff;
} }
else // phase 2 - land fight else // phase 2 - land fight
{ {
@@ -158,13 +155,13 @@ struct TRINITY_DLL_DECL boss_nazanAI : public ScriptedAI
DoCast(m_creature, SPELL_CONE_OF_FIRE); DoCast(m_creature, SPELL_CONE_OF_FIRE);
ConeOfFire_Timer = 12000; ConeOfFire_Timer = 12000;
Fireball_Timer = 4000; Fireball_Timer = 4000;
}else ConeOfFire_Timer -= diff; } else ConeOfFire_Timer -= diff;
if (HeroicMode && BellowingRoar_Timer < diff) if (HeroicMode && BellowingRoar_Timer < diff)
{ {
DoCast(m_creature, SPELL_BELLOWING_ROAR); DoCast(m_creature, SPELL_BELLOWING_ROAR);
BellowingRoar_Timer = 45000; BellowingRoar_Timer = 45000;
}else BellowingRoar_Timer -= diff; } else BellowingRoar_Timer -= diff;
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
} }
@@ -192,22 +189,13 @@ struct TRINITY_DLL_DECL boss_vazrudenAI : public ScriptedAI
void EnterCombat(Unit *who) void EnterCombat(Unit *who)
{ {
switch(rand()%3) DoScriptText(RAND(SAY_AGGRO_1,SAY_AGGRO_2,SAY_AGGRO_3), m_creature);
{
case 0: DoScriptText(SAY_AGGRO_1, m_creature); break;
case 1: DoScriptText(SAY_AGGRO_2, m_creature); break;
default: DoScriptText(SAY_AGGRO_3, m_creature); break;
}
} }
void KilledUnit(Unit* who) void KilledUnit(Unit* who)
{ {
if (who && who->GetEntry()!=ENTRY_VAZRUDEN) if (who && who->GetEntry()!=ENTRY_VAZRUDEN)
switch(rand()%2) DoScriptText(RAND(SAY_KILL_1,SAY_KILL_2), m_creature);
{
case 0: DoScriptText(SAY_KILL_1, m_creature); break;
default: DoScriptText(SAY_KILL_2, m_creature); break;
}
} }
void JustDied(Unit* who) void JustDied(Unit* who)
@@ -227,11 +215,8 @@ struct TRINITY_DLL_DECL boss_vazrudenAI : public ScriptedAI
DoScriptText(SAY_WIPE, m_creature); DoScriptText(SAY_WIPE, m_creature);
WipeSaid = true; WipeSaid = true;
} }
m_creature->SetLootRecipient(NULL); m_creature->DisappearAndDie();
m_creature->SetVisibility(VISIBILITY_OFF); } else UnsummonCheck -= diff;
m_creature->DealDamage(m_creature, m_creature->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
m_creature->RemoveCorpse();
}else UnsummonCheck -= diff;
return; return;
} }
@@ -240,7 +225,7 @@ struct TRINITY_DLL_DECL boss_vazrudenAI : public ScriptedAI
if (Unit *victim = m_creature->getVictim()) if (Unit *victim = m_creature->getVictim())
DoCast(victim, SPELL_REVENGE); DoCast(victim, SPELL_REVENGE);
Revenge_Timer = 5000; Revenge_Timer = 5000;
}else Revenge_Timer -= diff; } else Revenge_Timer -= diff;
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
} }
@@ -283,18 +268,12 @@ struct TRINITY_DLL_DECL boss_vazruden_the_heraldAI : public ScriptedAI
Creature *Vazruden = Unit::GetCreature(*m_creature, VazrudenGUID); Creature *Vazruden = Unit::GetCreature(*m_creature, VazrudenGUID);
if (Nazan || (Nazan = me->FindNearestCreature(ENTRY_NAZAN, 5000))) if (Nazan || (Nazan = me->FindNearestCreature(ENTRY_NAZAN, 5000)))
{ {
Nazan->SetLootRecipient(NULL); Nazan->DisappearAndDie();
Nazan->SetVisibility(VISIBILITY_OFF);
Nazan->DealDamage(Nazan, Nazan->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
Nazan->RemoveCorpse();
NazanGUID = 0; NazanGUID = 0;
} }
if (Vazruden || (Vazruden = me->FindNearestCreature(ENTRY_VAZRUDEN, 5000))) if (Vazruden || (Vazruden = me->FindNearestCreature(ENTRY_VAZRUDEN, 5000)))
{ {
Vazruden->SetLootRecipient(NULL); Vazruden->DisappearAndDie();
Vazruden->SetVisibility(VISIBILITY_OFF);
Vazruden->DealDamage(Vazruden, Vazruden->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
Vazruden->RemoveCorpse();
VazrudenGUID = 0; VazrudenGUID = 0;
} }
summoned = false; summoned = false;
@@ -307,11 +286,9 @@ struct TRINITY_DLL_DECL boss_vazruden_the_heraldAI : public ScriptedAI
{ {
if (!summoned) if (!summoned)
{ {
Creature* Vazruden = m_creature->SummonCreature(ENTRY_VAZRUDEN,VazrudenMiddle[0],VazrudenMiddle[1],VazrudenMiddle[2],0,TEMPSUMMON_CORPSE_TIMED_DESPAWN,6000000); if (Creature* Vazruden = m_creature->SummonCreature(ENTRY_VAZRUDEN,VazrudenMiddle[0],VazrudenMiddle[1],VazrudenMiddle[2],0,TEMPSUMMON_CORPSE_TIMED_DESPAWN,6000000))
if (Vazruden)
VazrudenGUID = Vazruden->GetGUID(); VazrudenGUID = Vazruden->GetGUID();
Creature* Nazan = m_creature->SummonCreature(ENTRY_NAZAN,VazrudenMiddle[0],VazrudenMiddle[1],VazrudenMiddle[2],0,TEMPSUMMON_CORPSE_TIMED_DESPAWN,6000000); if (Creature* Nazan = m_creature->SummonCreature(ENTRY_NAZAN,VazrudenMiddle[0],VazrudenMiddle[1],VazrudenMiddle[2],0,TEMPSUMMON_CORPSE_TIMED_DESPAWN,6000000))
if (Nazan)
NazanGUID = Nazan->GetGUID(); NazanGUID = Nazan->GetGUID();
summoned = true; summoned = true;
m_creature->SetVisibility(VISIBILITY_OFF); m_creature->SetVisibility(VISIBILITY_OFF);
@@ -395,11 +372,12 @@ struct TRINITY_DLL_DECL boss_vazruden_the_heraldAI : public ScriptedAI
EnterEvadeMode(); EnterEvadeMode();
return; return;
} }
}else }
else
{ {
m_creature->SummonGameObject(ENTRY_REINFORCED_FEL_IRON_CHEST,VazrudenMiddle[0],VazrudenMiddle[1],VazrudenMiddle[2],0,0,0,0,0,0); m_creature->SummonGameObject(ENTRY_REINFORCED_FEL_IRON_CHEST,VazrudenMiddle[0],VazrudenMiddle[1],VazrudenMiddle[2],0,0,0,0,0,0);
m_creature->SetLootRecipient(NULL); m_creature->SetLootRecipient(NULL); // don't think this is necessary..
m_creature->DealDamage(m_creature, m_creature->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); m_creature->Kill(m_creature);
} }
check = 2000; check = 2000;
}else check -= diff; }else check -= diff;
@@ -416,7 +394,7 @@ struct TRINITY_DLL_DECL mob_hellfire_sentryAI : public ScriptedAI
void Reset() void Reset()
{ {
KidneyShot_Timer = 3000+rand()%4000; KidneyShot_Timer = urand(3000,7000);
} }
void EnterCombat(Unit* who) {} void EnterCombat(Unit* who) {}
@@ -437,7 +415,7 @@ struct TRINITY_DLL_DECL mob_hellfire_sentryAI : public ScriptedAI
if (Unit *victim = m_creature->getVictim()) if (Unit *victim = m_creature->getVictim())
DoCast(victim, SPELL_KIDNEY_SHOT); DoCast(victim, SPELL_KIDNEY_SHOT);
KidneyShot_Timer = 20000; KidneyShot_Timer = 20000;
}else KidneyShot_Timer -= diff; } else KidneyShot_Timer -= diff;
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
} }
@@ -468,22 +446,22 @@ void AddSC_boss_vazruden_the_herald()
{ {
Script *newscript; Script *newscript;
newscript = new Script; newscript = new Script;
newscript->Name="boss_vazruden_the_herald"; newscript->Name = "boss_vazruden_the_herald";
newscript->GetAI = &GetAI_boss_vazruden_the_herald; newscript->GetAI = &GetAI_boss_vazruden_the_herald;
newscript->RegisterSelf(); newscript->RegisterSelf();
newscript = new Script; newscript = new Script;
newscript->Name="boss_vazruden"; newscript->Name = "boss_vazruden";
newscript->GetAI = &GetAI_boss_vazruden; newscript->GetAI = &GetAI_boss_vazruden;
newscript->RegisterSelf(); newscript->RegisterSelf();
newscript = new Script; newscript = new Script;
newscript->Name="boss_nazan"; newscript->Name = "boss_nazan";
newscript->GetAI = &GetAI_boss_nazan; newscript->GetAI = &GetAI_boss_nazan;
newscript->RegisterSelf(); newscript->RegisterSelf();
newscript = new Script; newscript = new Script;
newscript->Name="mob_hellfire_sentry"; newscript->Name = "mob_hellfire_sentry";
newscript->GetAI = &GetAI_mob_hellfire_sentry; newscript->GetAI = &GetAI_mob_hellfire_sentry;
newscript->RegisterSelf(); newscript->RegisterSelf();
} }
@@ -173,10 +173,8 @@ struct TRINITY_DLL_DECL advisorbase_ai : public ScriptedAI
//reset encounter //reset encounter
if (m_pInstance && (m_pInstance->GetData(DATA_KAELTHASEVENT) == 1 || m_pInstance->GetData(DATA_KAELTHASEVENT) == 3)) if (m_pInstance && (m_pInstance->GetData(DATA_KAELTHASEVENT) == 1 || m_pInstance->GetData(DATA_KAELTHASEVENT) == 3))
{
if (Creature *Kaelthas = Unit::GetCreature((*m_creature), m_pInstance->GetData64(DATA_KAELTHAS))) if (Creature *Kaelthas = Unit::GetCreature((*m_creature), m_pInstance->GetData64(DATA_KAELTHAS)))
Kaelthas->AI()->EnterEvadeMode(); Kaelthas->AI()->EnterEvadeMode();
}
} }
void MoveInLineOfSight(Unit *who) void MoveInLineOfSight(Unit *who)
@@ -262,7 +260,7 @@ struct TRINITY_DLL_DECL advisorbase_ai : public ScriptedAI
m_creature->GetMotionMaster()->Clear(); m_creature->GetMotionMaster()->Clear();
m_creature->GetMotionMaster()->MoveChase(Target); m_creature->GetMotionMaster()->MoveChase(Target);
m_creature->AddThreat(Target, 0.0f); m_creature->AddThreat(Target, 0.0f);
}else DelayRes_Timer -= diff; } else DelayRes_Timer -= diff;
} }
} }
@@ -424,12 +422,7 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
void KilledUnit() void KilledUnit()
{ {
switch(rand()%3) DoScriptText(RAND(SAY_SLAY1,SAY_SLAY2,SAY_SLAY3), m_creature);
{
case 0: DoScriptText(SAY_SLAY1, m_creature); break;
case 1: DoScriptText(SAY_SLAY2, m_creature); break;
case 2: DoScriptText(SAY_SLAY3, m_creature); break;
}
} }
void JustSummoned(Creature* pSummoned) void JustSummoned(Creature* pSummoned)
@@ -461,7 +454,7 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
for(uint8 i = 0; i < MAX_ADVISORS; ++i) for(uint8 i = 0; i < MAX_ADVISORS; ++i)
{ {
if (Unit* pAdvisor = Unit::GetUnit((*m_creature), m_auiAdvisorGuid[i])) if (Unit* pAdvisor = Unit::GetUnit((*m_creature), m_auiAdvisorGuid[i]))
pAdvisor->DealDamage(pAdvisor, pAdvisor->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); pAdvisor->Kill(pAdvisor);
} }
} }
@@ -486,8 +479,8 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
//start advisor within 7 seconds //start advisor within 7 seconds
Phase_Timer = 7000; Phase_Timer = 7000;
PhaseSubphase++; ++PhaseSubphase;
}else Phase_Timer -= diff; } else Phase_Timer -= diff;
break; break;
//Subphase 1 - Unlock advisor //Subphase 1 - Unlock advisor
@@ -506,8 +499,8 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
Advisor->AI()->AttackStart(target); Advisor->AI()->AttackStart(target);
} }
PhaseSubphase++; ++PhaseSubphase;
}else Phase_Timer -= diff; } else Phase_Timer -= diff;
break; break;
//Subphase 2 - Start //Subphase 2 - Start
@@ -520,7 +513,7 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
//start advisor within 12.5 seconds //start advisor within 12.5 seconds
Phase_Timer = 12500; Phase_Timer = 12500;
PhaseSubphase++; ++PhaseSubphase;
} }
break; break;
@@ -540,8 +533,8 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
Advisor->AI()->AttackStart(target); Advisor->AI()->AttackStart(target);
} }
PhaseSubphase++; ++PhaseSubphase;
}else Phase_Timer -= diff; } else Phase_Timer -= diff;
break; break;
//Subphase 3 - Start //Subphase 3 - Start
@@ -554,7 +547,7 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
//start advisor within 7 seconds //start advisor within 7 seconds
Phase_Timer = 7000; Phase_Timer = 7000;
PhaseSubphase++; ++PhaseSubphase;
} }
break; break;
@@ -574,8 +567,8 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
Advisor->AI()->AttackStart(target); Advisor->AI()->AttackStart(target);
} }
PhaseSubphase++; ++PhaseSubphase;
}else Phase_Timer -= diff; } else Phase_Timer -= diff;
break; break;
//Subphase 4 - Start //Subphase 4 - Start
@@ -588,7 +581,7 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
//start advisor within 8.4 seconds //start advisor within 8.4 seconds
Phase_Timer = 8400; Phase_Timer = 8400;
PhaseSubphase++; ++PhaseSubphase;
} }
break; break;
@@ -609,8 +602,8 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
} }
Phase_Timer = 3000; Phase_Timer = 3000;
PhaseSubphase++; ++PhaseSubphase;
}else Phase_Timer -= diff; } else Phase_Timer -= diff;
break; break;
//End of phase 1 //End of phase 1
@@ -710,7 +703,7 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
AttackStart(target); AttackStart(target);
Phase_Timer = 30000; Phase_Timer = 30000;
}else Phase_Timer -= diff; } else Phase_Timer -= diff;
} }
break; break;
@@ -746,14 +739,14 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
IsCastingFireball = false; IsCastingFireball = false;
Fireball_Timer = 5000+rand()%10000; Fireball_Timer = 5000+rand()%10000;
} }
}else Fireball_Timer -= diff; } else Fireball_Timer -= diff;
//ArcaneDisruption_Timer //ArcaneDisruption_Timer
if (ArcaneDisruption_Timer < diff) if (ArcaneDisruption_Timer < diff)
{ {
DoCast(m_creature->getVictim(), SPELL_ARCANE_DISRUPTION, true); DoCast(m_creature->getVictim(), SPELL_ARCANE_DISRUPTION, true);
ArcaneDisruption_Timer = 60000; ArcaneDisruption_Timer = 60000;
}else ArcaneDisruption_Timer -= diff; } else ArcaneDisruption_Timer -= diff;
if (FlameStrike_Timer < diff) if (FlameStrike_Timer < diff)
{ {
@@ -761,7 +754,7 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
DoCast(pUnit, SPELL_FLAME_STRIKE); DoCast(pUnit, SPELL_FLAME_STRIKE);
FlameStrike_Timer = 30000; FlameStrike_Timer = 30000;
}FlameStrike_Timer -= diff; } else FlameStrike_Timer -= diff;
if (MindControl_Timer < diff) if (MindControl_Timer < diff)
{ {
@@ -773,21 +766,17 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
} }
MindControl_Timer = 60000; MindControl_Timer = 60000;
}MindControl_Timer -= diff; } else MindControl_Timer -= diff;
} }
//Phoenix_Timer //Phoenix_Timer
if (Phoenix_Timer < diff) if (Phoenix_Timer < diff)
{ {
DoCast(m_creature, SPELL_PHOENIX_ANIMATION); DoCast(m_creature, SPELL_PHOENIX_ANIMATION);
switch(rand()%2) DoScriptText(RAND(SAY_SUMMON_PHOENIX1,SAY_SUMMON_PHOENIX2), m_creature);
{
case 0: DoScriptText(SAY_SUMMON_PHOENIX1, m_creature); break;
case 1: DoScriptText(SAY_SUMMON_PHOENIX2, m_creature); break;
}
Phoenix_Timer = 60000; Phoenix_Timer = 60000;
}else Phoenix_Timer -= diff; } else Phoenix_Timer -= diff;
//Phase 4 specific spells //Phase 4 specific spells
if (Phase == 4) if (Phase == 4)
@@ -827,8 +816,7 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
if (PyrosCasted < 3) if (PyrosCasted < 3)
{ {
DoCast(m_creature->getVictim(), SPELL_PYROBLAST); DoCast(m_creature->getVictim(), SPELL_PYROBLAST);
PyrosCasted++; ++PyrosCasted;
} }
else else
{ {
@@ -851,7 +839,7 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
Phase = 6; Phase = 6;
AttackStart(m_creature->getVictim()); AttackStart(m_creature->getVictim());
}else Phase_Timer -= diff; } else Phase_Timer -= diff;
} }
//Phase 5 //Phase 5
@@ -862,7 +850,7 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
if (GravityLapse_Timer < diff) if (GravityLapse_Timer < diff)
{ {
std::list<HostilReference*>::iterator i = m_creature->getThreatManager().getThreatList().begin(); std::list<HostilReference*>::iterator i = m_creature->getThreatManager().getThreatList().begin();
switch(GravityLapse_Phase) switch (GravityLapse_Phase)
{ {
case 0: case 0:
m_creature->StopMoving(); m_creature->StopMoving();
@@ -890,14 +878,10 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
break; break;
case 1: case 1:
switch(rand()%2) DoScriptText(RAND(SAY_GRAVITYLAPSE1,SAY_GRAVITYLAPSE2), m_creature);
{
case 0: DoScriptText(SAY_GRAVITYLAPSE1, m_creature); break;
case 1: DoScriptText(SAY_GRAVITYLAPSE2, m_creature); break;
}
// 2) At that point he will put a Gravity Lapse debuff on everyone // 2) At that point he will put a Gravity Lapse debuff on everyone
for (i = m_creature->getThreatManager().getThreatList().begin(); i!= m_creature->getThreatManager().getThreatList().end(); ++i) for (i = m_creature->getThreatManager().getThreatList().begin(); i != m_creature->getThreatManager().getThreatList().end(); ++i)
{ {
if (Unit* pUnit = Unit::GetUnit((*m_creature), (*i)->getUnitGuid())) if (Unit* pUnit = Unit::GetUnit((*m_creature), (*i)->getUnitGuid()))
{ {
@@ -916,7 +900,7 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
} }
} }
GravityLapse_Timer = 10000; GravityLapse_Timer = 10000;
GravityLapse_Phase++; ++GravityLapse_Phase;
break; break;
case 2: case 2:
@@ -925,7 +909,7 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
DoCast(m_creature, SPELL_NETHER_VAPOR); DoCast(m_creature, SPELL_NETHER_VAPOR);
GravityLapse_Timer = 20000; GravityLapse_Timer = 20000;
GravityLapse_Phase++; ++GravityLapse_Phase;
break; break;
case 3: case 3:
@@ -959,7 +943,7 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
{ {
DoCast(m_creature, SPELL_SHOCK_BARRIER); DoCast(m_creature, SPELL_SHOCK_BARRIER);
ShockBarrier_Timer = 20000; ShockBarrier_Timer = 20000;
}else ShockBarrier_Timer -= diff; } else ShockBarrier_Timer -= diff;
//NetherBeam_Timer //NetherBeam_Timer
if (NetherBeam_Timer < diff) if (NetherBeam_Timer < diff)
@@ -968,7 +952,7 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI
DoCast(pUnit, SPELL_NETHER_BEAM); DoCast(pUnit, SPELL_NETHER_BEAM);
NetherBeam_Timer = 4000; NetherBeam_Timer = 4000;
}else NetherBeam_Timer -= diff; } else NetherBeam_Timer -= diff;
} }
} }
@@ -1037,21 +1021,21 @@ struct TRINITY_DLL_DECL boss_thaladred_the_darkenerAI : public advisorbase_ai
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;
//Silence_Timer //Silence_Timer
if (Silence_Timer < diff) if (Silence_Timer < diff)
{ {
DoCast(m_creature->getVictim(), SPELL_SILENCE); DoCast(m_creature->getVictim(), SPELL_SILENCE);
Silence_Timer = 20000; Silence_Timer = 20000;
}else Silence_Timer -= diff; } else Silence_Timer -= diff;
//PsychicBlow_Timer //PsychicBlow_Timer
if (PsychicBlow_Timer < diff) if (PsychicBlow_Timer < diff)
{ {
DoCast(m_creature->getVictim(), SPELL_PSYCHIC_BLOW); DoCast(m_creature->getVictim(), SPELL_PSYCHIC_BLOW);
PsychicBlow_Timer = 20000+rand()%5000; PsychicBlow_Timer = 20000+rand()%5000;
}else PsychicBlow_Timer -= diff; } else PsychicBlow_Timer -= diff;
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
} }
@@ -1104,7 +1088,7 @@ struct TRINITY_DLL_DECL boss_lord_sanguinarAI : public advisorbase_ai
{ {
DoCast(m_creature->getVictim(), SPELL_BELLOWING_ROAR); DoCast(m_creature->getVictim(), SPELL_BELLOWING_ROAR);
Fear_Timer = 25000+rand()%10000; //approximately every 30 seconds Fear_Timer = 25000+rand()%10000; //approximately every 30 seconds
}else Fear_Timer -= diff; } else Fear_Timer -= diff;
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
} }
@@ -1181,7 +1165,7 @@ struct TRINITY_DLL_DECL boss_grand_astromancer_capernianAI : public advisorbase_
{ {
DoScriptText(SAY_CAPERNIAN_AGGRO, m_creature); DoScriptText(SAY_CAPERNIAN_AGGRO, m_creature);
Yell = true; Yell = true;
}else Yell_Timer -= diff; } else Yell_Timer -= diff;
} }
//Fireball_Timer //Fireball_Timer
@@ -1189,7 +1173,7 @@ struct TRINITY_DLL_DECL boss_grand_astromancer_capernianAI : public advisorbase_
{ {
DoCast(m_creature->getVictim(), SPELL_CAPERNIAN_FIREBALL); DoCast(m_creature->getVictim(), SPELL_CAPERNIAN_FIREBALL);
Fireball_Timer = 4000; Fireball_Timer = 4000;
}else Fireball_Timer -= diff; } else Fireball_Timer -= diff;
//Conflagration_Timer //Conflagration_Timer
if (Conflagration_Timer < diff) if (Conflagration_Timer < diff)
@@ -1203,7 +1187,7 @@ struct TRINITY_DLL_DECL boss_grand_astromancer_capernianAI : public advisorbase_
DoCast(m_creature->getVictim(), SPELL_CONFLAGRATION); DoCast(m_creature->getVictim(), SPELL_CONFLAGRATION);
Conflagration_Timer = 10000+rand()%5000; Conflagration_Timer = 10000+rand()%5000;
}else Conflagration_Timer -= diff; } else Conflagration_Timer -= diff;
//ArcaneExplosion_Timer //ArcaneExplosion_Timer
if (ArcaneExplosion_Timer < diff) if (ArcaneExplosion_Timer < diff)
@@ -1227,7 +1211,7 @@ struct TRINITY_DLL_DECL boss_grand_astromancer_capernianAI : public advisorbase_
DoCast(target, SPELL_ARCANE_EXPLOSION); DoCast(target, SPELL_ARCANE_EXPLOSION);
ArcaneExplosion_Timer = 4000+rand()%2000; ArcaneExplosion_Timer = 4000+rand()%2000;
}else ArcaneExplosion_Timer -= diff; } else ArcaneExplosion_Timer -= diff;
//Do NOT deal any melee damage. //Do NOT deal any melee damage.
} }
@@ -1283,7 +1267,7 @@ struct TRINITY_DLL_DECL boss_master_engineer_telonicusAI : public advisorbase_ai
{ {
DoCast(m_creature->getVictim(), SPELL_BOMB); DoCast(m_creature->getVictim(), SPELL_BOMB);
Bomb_Timer = 25000; Bomb_Timer = 25000;
}else Bomb_Timer -= diff; } else Bomb_Timer -= diff;
//RemoteToy_Timer //RemoteToy_Timer
if (RemoteToy_Timer < diff) if (RemoteToy_Timer < diff)
@@ -1292,7 +1276,7 @@ struct TRINITY_DLL_DECL boss_master_engineer_telonicusAI : public advisorbase_ai
DoCast(target, SPELL_REMOTE_TOY); DoCast(target, SPELL_REMOTE_TOY);
RemoteToy_Timer = 10000+rand()%5000; RemoteToy_Timer = 10000+rand()%5000;
}else RemoteToy_Timer -= diff; } else RemoteToy_Timer -= diff;
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
} }
@@ -1317,7 +1301,7 @@ struct TRINITY_DLL_DECL mob_kael_flamestrikeAI : public ScriptedAI
m_creature->setFaction(14); m_creature->setFaction(14);
} }
void MoveInLineOfSight(Unit *who) { } void MoveInLineOfSight(Unit *who) {}
void UpdateAI(const uint32 diff) void UpdateAI(const uint32 diff)
{ {
@@ -1334,11 +1318,11 @@ struct TRINITY_DLL_DECL mob_kael_flamestrikeAI : public ScriptedAI
{ {
m_creature->InterruptNonMeleeSpells(false); m_creature->InterruptNonMeleeSpells(false);
DoCast(m_creature, SPELL_FLAME_STRIKE_DMG); DoCast(m_creature, SPELL_FLAME_STRIKE_DMG);
}else m_creature->DealDamage(m_creature, m_creature->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); } else m_creature->Kill(m_creature);
KillSelf = true; KillSelf = true;
Timer = 1000; Timer = 1000;
}else Timer -= diff; } else Timer -= diff;
} }
}; };
@@ -1374,7 +1358,7 @@ struct TRINITY_DLL_DECL mob_phoenix_tkAI : public ScriptedAI
if (m_creature->GetHealth() > dmg) if (m_creature->GetHealth() > dmg)
m_creature->SetHealth(uint32(m_creature->GetHealth()-dmg)); m_creature->SetHealth(uint32(m_creature->GetHealth()-dmg));
Cycle_Timer = 2000; Cycle_Timer = 2000;
}else Cycle_Timer -= diff; } else Cycle_Timer -= diff;
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
} }
@@ -1421,7 +1405,7 @@ struct TRINITY_DLL_DECL mob_phoenix_egg_tkAI : public ScriptedAI
{ {
m_creature->SummonCreature(NPC_PHOENIX,m_creature->GetPositionX(),m_creature->GetPositionY(),m_creature->GetPositionZ(),m_creature->GetOrientation(),TEMPSUMMON_CORPSE_DESPAWN,5000); m_creature->SummonCreature(NPC_PHOENIX,m_creature->GetPositionX(),m_creature->GetPositionY(),m_creature->GetPositionZ(),m_creature->GetOrientation(),TEMPSUMMON_CORPSE_DESPAWN,5000);
Rebirth_Timer = 0; Rebirth_Timer = 0;
}else Rebirth_Timer -= diff; } else Rebirth_Timer -= diff;
} }
}; };
+1 -1
View File
@@ -740,7 +740,7 @@ void CreatureEventAI::ProcessAction(CreatureEventAI_Action const& action, uint32
sLog.outErrorDb("CreatureEventAI: Event %d ACTION_T_DIE on dead creature. Creature %d", EventId, m_creature->GetEntry()); sLog.outErrorDb("CreatureEventAI: Event %d ACTION_T_DIE on dead creature. Creature %d", EventId, m_creature->GetEntry());
return; return;
} }
m_creature->DealDamage(m_creature, m_creature->GetMaxHealth(),NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); m_creature->Kill(m_creature);
break; break;
case ACTION_T_ZONE_COMBAT_PULSE: case ACTION_T_ZONE_COMBAT_PULSE:
{ {
+1 -1
View File
@@ -13733,7 +13733,7 @@ void Unit::Kill(Unit *pVictim, bool durabilityLoss)
// if talent known but not triggered (check priest class for speedup check) // if talent known but not triggered (check priest class for speedup check)
bool SpiritOfRedemption = false; bool SpiritOfRedemption = false;
if(pVictim->GetTypeId()==TYPEID_PLAYER && pVictim->getClass()==CLASS_PRIEST ) if(pVictim->GetTypeId()==TYPEID_PLAYER && pVictim->getClass()==CLASS_PRIEST)
{ {
AuraEffectList const& vDummyAuras = pVictim->GetAurasByType(SPELL_AURA_DUMMY); AuraEffectList const& vDummyAuras = pVictim->GetAurasByType(SPELL_AURA_DUMMY);
for(AuraEffectList::const_iterator itr = vDummyAuras.begin(); itr != vDummyAuras.end(); ++itr) for(AuraEffectList::const_iterator itr = vDummyAuras.begin(); itr != vDummyAuras.end(); ++itr)