--HG--
branch : trunk
This commit is contained in:
Kudlaty
2009-07-25 14:37:10 +02:00
4 changed files with 207 additions and 165 deletions
+1 -1
View File
@@ -48,4 +48,4 @@ Wizz, Elminster, 123qwe, NeatElves, Turk3y, deicide, vladonix, nugu100,
Skystar, Reve, jorooo, FrozenDB, miranda.conrado, Tequila, Gommes, Zerg2000, Skystar, Reve, jorooo, FrozenDB, miranda.conrado, Tequila, Gommes, Zerg2000,
aerione_alt, Rastik, FrenchW, wilibald09, Velorien, kancaras, fisherman, aerione_alt, Rastik, FrenchW, wilibald09, Velorien, kancaras, fisherman,
Aviram, Mufik, loop69, multiplexer, Koani, rechapa79, kozelo, MeanMachine, Aviram, Mufik, loop69, multiplexer, Koani, rechapa79, kozelo, MeanMachine,
fregh, adrycasillo, IncoGnito. fregh, adrycasillo, IncoGnito, Alez, Itch.
@@ -115,36 +115,40 @@ float Humanoides[6][5] =
uint32 EnrageTimer = 600000; uint32 EnrageTimer = 600000;
struct TRINITY_DLL_DECL boss_entropiusAI : public ScriptedAI struct TRINITY_DLL_DECL boss_entropiusAI : public ScriptedAI
{ {
boss_entropiusAI(Creature *c) : ScriptedAI(c), Summons(m_creature){ boss_entropiusAI(Creature *c) : ScriptedAI(c), Summons(m_creature)
{
pInstance = c->GetInstanceData(); pInstance = c->GetInstanceData();
Combat = false;
} }
ScriptedInstance* pInstance; ScriptedInstance* pInstance;
SummonList Summons; SummonList Summons;
bool Combat;
uint32 BlackHoleSummonTimer; uint32 BlackHoleSummonTimer;
void Reset() { void Reset()
if (!Combat){ {
BlackHoleSummonTimer = 15000; BlackHoleSummonTimer = 15000;
DoCastAOE(SPELL_NEGATIVE_ENERGY_E, false); DoCastAOE(SPELL_NEGATIVE_ENERGY_E, false);
}else{
Summons.DespawnAll();
if(pInstance) if(pInstance)
pInstance->SetData(DATA_MURU_EVENT, NOT_STARTED); pInstance->SetData(DATA_MURU_EVENT, NOT_STARTED);
Summons.DespawnAll();
}
} }
void EnterCombat(Unit *who) { void EnterCombat(Unit *who)
{
DoCastAOE(SPELL_NEGATIVE_ENERGY_E, true); DoCastAOE(SPELL_NEGATIVE_ENERGY_E, true);
DoCast(m_creature, SPELL_ENTROPIUS_SPAWN, false); DoCast(m_creature, SPELL_ENTROPIUS_SPAWN, false);
if(pInstance)
pInstance->SetData(DATA_MURU_EVENT, IN_PROGRESS);
} }
void JustSummoned(Creature* summoned) void JustSummoned(Creature* summoned)
{ {
switch(summoned->GetEntry()){ switch(summoned->GetEntry())
{
case CREATURE_DARK_FIENDS: case CREATURE_DARK_FIENDS:
summoned->CastSpell(summoned,SPELL_DARKFIEND_VISUAL,false); summoned->CastSpell(summoned,SPELL_DARKFIEND_VISUAL,false);
break; break;
@@ -159,13 +163,12 @@ struct TRINITY_DLL_DECL boss_entropiusAI : public ScriptedAI
Summons.Summon(summoned); Summons.Summon(summoned);
} }
void KilledUnit(Unit* victim){ void JustDied(Unit* killer)
{
}
void JustDied(Unit* killer){
if(pInstance)pInstance->SetData(DATA_MURU_EVENT, DONE);
Summons.DespawnAll(); Summons.DespawnAll();
if(pInstance)
pInstance->SetData(DATA_MURU_EVENT, DONE);
} }
void UpdateAI(const uint32 diff) void UpdateAI(const uint32 diff)
@@ -173,25 +176,29 @@ struct TRINITY_DLL_DECL boss_entropiusAI : public ScriptedAI
if(!UpdateVictim()) if(!UpdateVictim())
return; return;
if(!Combat)Combat = true; if(EnrageTimer < diff && !m_creature->HasAura(SPELL_ENRAGE, 0))
{
if(EnrageTimer < diff && !m_creature->HasAura(SPELL_ENRAGE, 0)){
DoCast(m_creature,SPELL_ENRAGE, false); DoCast(m_creature,SPELL_ENRAGE, false);
}else EnrageTimer -= diff; }else EnrageTimer -= diff;
if(BlackHoleSummonTimer < diff){ if(BlackHoleSummonTimer < diff)
{
Unit* random = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true); Unit* random = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true);
if(!random)return; if(!random)
return;
DoCast(random, SPELL_DARKNESS_E, false); DoCast(random, SPELL_DARKNESS_E, false);
random = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true); random = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true);
if(!random)return; if(!random)
return;
random->CastSpell(random, SPELL_BLACKHOLE, false); random->CastSpell(random, SPELL_BLACKHOLE, false);
BlackHoleSummonTimer = 15000; BlackHoleSummonTimer = 15000;
}else BlackHoleSummonTimer -= diff; }else BlackHoleSummonTimer -= diff;
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
} }
}; };
CreatureAI* GetAI_boss_entropius(Creature *_Creature) CreatureAI* GetAI_boss_entropius(Creature *_Creature)
@@ -201,7 +208,8 @@ CreatureAI* GetAI_boss_entropius(Creature *_Creature)
struct TRINITY_DLL_DECL boss_muruAI : public Scripted_NoMovementAI struct TRINITY_DLL_DECL boss_muruAI : public Scripted_NoMovementAI
{ {
boss_muruAI(Creature *c) : Scripted_NoMovementAI(c), Summons(m_creature){ boss_muruAI(Creature *c) : Scripted_NoMovementAI(c), Summons(m_creature)
{
pInstance = c->GetInstanceData(); pInstance = c->GetInstanceData();
} }
@@ -223,36 +231,42 @@ struct TRINITY_DLL_DECL boss_muruAI : public Scripted_NoMovementAI
Timer[TIMER_HUMANOIDES] = 10000; Timer[TIMER_HUMANOIDES] = 10000;
Timer[TIMER_PHASE] = 2000; Timer[TIMER_PHASE] = 2000;
Timer[TIMER_SENTINEL] = 31500; Timer[TIMER_SENTINEL] = 31500;
Summons.DespawnAll();
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
m_creature->SetVisibility(VISIBILITY_ON); m_creature->SetVisibility(VISIBILITY_ON);
Summons.DespawnAll();
if(pInstance) if(pInstance)
pInstance->SetData(DATA_MURU_EVENT, NOT_STARTED); pInstance->SetData(DATA_MURU_EVENT, NOT_STARTED);
} }
void EnterCombat(Unit *who) void EnterCombat(Unit *who)
{ {
DoCastAOE(SPELL_NEGATIVE_ENERGY,false);
if(pInstance) if(pInstance)
pInstance->SetData(DATA_MURU_EVENT, IN_PROGRESS); pInstance->SetData(DATA_MURU_EVENT, IN_PROGRESS);
DoCastAOE(SPELL_NEGATIVE_ENERGY,false);
} }
void KilledUnit(Unit* victim){} void DamageTaken(Unit *done_by, uint32 &damage)
{
void DamageTaken(Unit *done_by, uint32 &damage) { if(damage > m_creature->GetHealth() && Phase == 1)
if(damage > m_creature->GetHealth() && Phase == 1){ {
damage = 0; damage = 0;
Phase = 2; Phase = 2;
m_creature->RemoveAllAuras(); m_creature->RemoveAllAuras();
DoCast(m_creature, SPELL_OPEN_ALL_PORTALS, false); DoCast(m_creature, SPELL_OPEN_ALL_PORTALS, false);
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
} }
if(Phase > 1 && Phase < 4)damage = 0; if(Phase > 1 && Phase < 4)
damage = 0;
} }
void JustSummoned(Creature* summoned) void JustSummoned(Creature* summoned)
{ {
switch(summoned->GetEntry()){ switch(summoned->GetEntry())
{
case BOSS_ENTROPIUS: case BOSS_ENTROPIUS:
m_creature->SetVisibility(VISIBILITY_OFF); m_creature->SetVisibility(VISIBILITY_OFF);
break; break;
@@ -269,9 +283,12 @@ struct TRINITY_DLL_DECL boss_muruAI : public Scripted_NoMovementAI
if(!UpdateVictim()) if(!UpdateVictim())
return; return;
if(Phase == 3){ if(Phase == 3)
if(Timer[TIMER_PHASE] <diff){ {
switch(pInstance->GetData(DATA_MURU_EVENT)){ if(Timer[TIMER_PHASE] <diff)
{
switch(pInstance->GetData(DATA_MURU_EVENT))
{
case NOT_STARTED: case NOT_STARTED:
Reset(); Reset();
break; break;
@@ -287,52 +304,58 @@ struct TRINITY_DLL_DECL boss_muruAI : public Scripted_NoMovementAI
} }
if (EnrageTimer < diff && !m_creature->HasAura(SPELL_ENRAGE, 0)) if (EnrageTimer < diff && !m_creature->HasAura(SPELL_ENRAGE, 0))
{
DoCast(m_creature, SPELL_ENRAGE, false); DoCast(m_creature, SPELL_ENRAGE, false);
else EnrageTimer -= diff; }else EnrageTimer -= diff;
for (uint8 i = 0; i < 4; ++i){ for (uint8 i = 0; i < 4; ++i)
if(Timer[i] < diff){ {
switch(i){ if(Timer[i] < diff)
{
switch(i)
{
case TIMER_DARKNESS: case TIMER_DARKNESS:
if(!DarkFiend){ if(!DarkFiend)
{
DoCastAOE(SPELL_DARKNESS, false); DoCastAOE(SPELL_DARKNESS, false);
Timer[TIMER_DARKNESS] = 3000; Timer[TIMER_DARKNESS] = 3000;
DarkFiend = true; DarkFiend = true;
}else{ }
else
{
DarkFiend = false; DarkFiend = false;
for(uint8 i = 0; i < 8; ++i) for(uint8 i = 0; i < 8; ++i)
m_creature->SummonCreature(CREATURE_DARK_FIENDS,DarkFiends[i][0],DarkFiends[i][1],DarkFiends[i][2], DarkFiends[i][3], TEMPSUMMON_CORPSE_DESPAWN, 0); m_creature->SummonCreature(CREATURE_DARK_FIENDS,DarkFiends[i][0],DarkFiends[i][1],DarkFiends[i][2], DarkFiends[i][3], TEMPSUMMON_CORPSE_DESPAWN, 0);
Timer[TIMER_DARKNESS] = 42000; Timer[TIMER_DARKNESS] = 42000;
} }
break; break;
case TIMER_HUMANOIDES: case TIMER_HUMANOIDES:
for(uint8 i = 0; i < 6; ++i) for(uint8 i = 0; i < 6; ++i)
m_creature->SummonCreature(Humanoides[i][0],Humanoides[i][1],Humanoides[i][2],Humanoides[i][3], Humanoides[i][4], TEMPSUMMON_CORPSE_DESPAWN, 0); m_creature->SummonCreature(Humanoides[i][0],Humanoides[i][1],Humanoides[i][2],Humanoides[i][3], Humanoides[i][4], TEMPSUMMON_CORPSE_DESPAWN, 0);
Timer[TIMER_HUMANOIDES] = 60000; Timer[TIMER_HUMANOIDES] = 60000;
break; break;
case TIMER_PHASE: case TIMER_PHASE:
m_creature->RemoveAllAuras(); m_creature->RemoveAllAuras();
DoCast(m_creature, SPELL_SUMMON_ENTROPIUS, false); DoCast(m_creature, SPELL_SUMMON_ENTROPIUS, false);
Timer[TIMER_PHASE] = 3000; Timer[TIMER_PHASE] = 3000;
Phase = 3; Phase = 3;
return; return;
case TIMER_SENTINEL: case TIMER_SENTINEL:
DoCastAOE(SPELL_OPEN_PORTAL_2, false); DoCastAOE(SPELL_OPEN_PORTAL_2, false);
Timer[TIMER_SENTINEL] = 30000; Timer[TIMER_SENTINEL] = 30000;
break; break;
}break;} }
break;
}
} }
//Timer //Timer
for(uint8 i = 0; i < 4; ++i){ for(uint8 i = 0; i < 4; ++i)
{
if(i != TIMER_PHASE)Timer[i] -= diff; if(i != TIMER_PHASE)Timer[i] -= diff;
else if(Phase == 2) Timer[i] -= diff; else if(Phase == 2) Timer[i] -= diff;
} }
} }
}; };
CreatureAI* GetAI_boss_muru(Creature *_Creature) CreatureAI* GetAI_boss_muru(Creature *_Creature)
@@ -342,37 +365,50 @@ CreatureAI* GetAI_boss_muru(Creature *_Creature)
struct TRINITY_DLL_DECL npc_muru_portalAI : public Scripted_NoMovementAI struct TRINITY_DLL_DECL npc_muru_portalAI : public Scripted_NoMovementAI
{ {
npc_muru_portalAI(Creature *c) : Scripted_NoMovementAI(c), Summons(m_creature){ npc_muru_portalAI(Creature *c) : Scripted_NoMovementAI(c), Summons(m_creature)
{
pInstance = c->GetInstanceData(); pInstance = c->GetInstanceData();
} }
ScriptedInstance* pInstance; ScriptedInstance* pInstance;
SummonList Summons; SummonList Summons;
Creature* Muru; Creature* Muru;
bool SummonSentinel; bool SummonSentinel;
bool InAction; bool InAction;
uint32 SummonTimer; uint32 SummonTimer;
void Reset(){ void Reset()
m_creature->addUnitState(UNIT_STAT_STUNNED); {
SummonTimer = 5000; SummonTimer = 5000;
InAction = false; InAction = false;
SummonSentinel = false; SummonSentinel = false;
m_creature->addUnitState(UNIT_STAT_STUNNED);
Summons.DespawnAll(); Summons.DespawnAll();
} }
void JustSummoned(Creature* summoned){ void JustSummoned(Creature* summoned)
{
Player* Target = Unit::GetPlayer(pInstance->GetData64(DATA_PLAYER_GUID)); Player* Target = Unit::GetPlayer(pInstance->GetData64(DATA_PLAYER_GUID));
if(Target)summoned->AI()->AttackStart(Target); if(Target)
summoned->AI()->AttackStart(Target);
Summons.Summon(summoned); Summons.Summon(summoned);
} }
void SpellHit(Unit* caster, const SpellEntry* Spell){ void SpellHit(Unit* caster, const SpellEntry* Spell)
{
float x,y,z,o; float x,y,z,o;
m_creature->GetHomePosition(x,y,z,o); m_creature->GetHomePosition(x,y,z,o);
DoTeleportTo(x,y,z); DoTeleportTo(x,y,z);
InAction = true; InAction = true;
switch(Spell->Id){ switch(Spell->Id)
{
case SPELL_OPEN_ALL_PORTALS: case SPELL_OPEN_ALL_PORTALS:
DoCastAOE(SPELL_OPEN_PORTAL, false); DoCastAOE(SPELL_OPEN_PORTAL, false);
break; break;
@@ -383,19 +419,20 @@ struct TRINITY_DLL_DECL npc_muru_portalAI : public Scripted_NoMovementAI
} }
} }
void UpdateAI(const uint32 diff){ void UpdateAI(const uint32 diff)
if(!SummonSentinel){ {
if(!SummonSentinel)
{
if(InAction && pInstance->GetData(DATA_MURU_EVENT) == NOT_STARTED)Reset(); if(InAction && pInstance->GetData(DATA_MURU_EVENT) == NOT_STARTED)Reset();
return; return;
} }
if(SummonTimer < diff){ if(SummonTimer < diff)
{
DoCastAOE(SPELL_SUMMON_VOID_SENTINEL, false); DoCastAOE(SPELL_SUMMON_VOID_SENTINEL, false);
SummonTimer = 5000; SummonTimer = 5000;
SummonSentinel = false; SummonSentinel = false;
}else SummonTimer -= diff; }else SummonTimer -= diff;
} }
}; };
CreatureAI* GetAI_npc_muru_portal(Creature *_Creature) CreatureAI* GetAI_npc_muru_portal(Creature *_Creature)
@@ -405,23 +442,29 @@ CreatureAI* GetAI_npc_muru_portal(Creature *_Creature)
struct TRINITY_DLL_DECL npc_dark_fiendAI : public ScriptedAI struct TRINITY_DLL_DECL npc_dark_fiendAI : public ScriptedAI
{ {
npc_dark_fiendAI(Creature *c) : ScriptedAI(c){ npc_dark_fiendAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData(); pInstance = c->GetInstanceData();
} }
ScriptedInstance* pInstance; ScriptedInstance* pInstance;
bool InAction;
uint32 WaitTimer;
void Reset() { uint32 WaitTimer;
bool InAction;
void Reset()
{
WaitTimer = 2000; WaitTimer = 2000;
InAction = false; InAction = false;
m_creature->addUnitState(UNIT_STAT_STUNNED);
};
void SpellHit(Unit* caster, const SpellEntry* Spell){ m_creature->addUnitState(UNIT_STAT_STUNNED);
}
void SpellHit(Unit* caster, const SpellEntry* Spell)
{
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->DealDamage(m_creature, m_creature->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); m_creature->DealDamage(m_creature, m_creature->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
m_creature->RemoveCorpse(); m_creature->RemoveCorpse();
} }
@@ -433,23 +476,28 @@ struct TRINITY_DLL_DECL npc_dark_fiendAI : public ScriptedAI
return; return;
if (WaitTimer < diff) if (WaitTimer < diff)
if(!InAction){ {
if(!InAction)
{
m_creature->clearUnitState(UNIT_STAT_STUNNED); m_creature->clearUnitState(UNIT_STAT_STUNNED);
DoCastAOE(SPELL_DARKFIEND_SKIN, false); DoCastAOE(SPELL_DARKFIEND_SKIN, false);
AttackStart(SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)); AttackStart(SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true));
InAction = true; InAction = true;
WaitTimer = 500; WaitTimer = 500;
}else{ }
if(m_creature->IsWithinDist(m_creature->getVictim(), 5)){ else
{
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->DealDamage(m_creature, m_creature->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
m_creature->RemoveCorpse(); m_creature->RemoveCorpse();
} }
WaitTimer = 500; WaitTimer = 500;
} }
else WaitTimer -= diff; }else WaitTimer -= diff;
} }
}; };
CreatureAI* GetAI_npc_dark_fiend(Creature *_Creature) CreatureAI* GetAI_npc_dark_fiend(Creature *_Creature)
@@ -459,7 +507,8 @@ CreatureAI* GetAI_npc_dark_fiend(Creature *_Creature)
struct TRINITY_DLL_DECL npc_void_sentinelAI : public ScriptedAI struct TRINITY_DLL_DECL npc_void_sentinelAI : public ScriptedAI
{ {
npc_void_sentinelAI(Creature *c) : ScriptedAI(c){ npc_void_sentinelAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData(); pInstance = c->GetInstanceData();
} }
@@ -468,39 +517,42 @@ struct TRINITY_DLL_DECL npc_void_sentinelAI : public ScriptedAI
uint32 PulseTimer; uint32 PulseTimer;
uint32 VoidBlastTimer; uint32 VoidBlastTimer;
void Reset()
void Reset() { {
PulseTimer = 3000; PulseTimer = 3000;
VoidBlastTimer = 45000; //is this a correct timer? VoidBlastTimer = 45000; //is this a correct timer?
float x,y,z,o; float x,y,z,o;
m_creature->GetHomePosition(x,y,z,o); m_creature->GetHomePosition(x,y,z,o);
DoTeleportTo(x,y,71); DoTeleportTo(x,y,71);
}; }
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)
{ {
if(!UpdateVictim()) if(!UpdateVictim())
return; return;
if(PulseTimer < diff){ if(PulseTimer < diff)
{
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();
} }
}; };
CreatureAI* GetAI_npc_void_sentinel(Creature *_Creature) CreatureAI* GetAI_npc_void_sentinel(Creature *_Creature)
@@ -510,7 +562,8 @@ CreatureAI* GetAI_npc_void_sentinel(Creature *_Creature)
struct TRINITY_DLL_DECL npc_blackholeAI : public ScriptedAI struct TRINITY_DLL_DECL npc_blackholeAI : public ScriptedAI
{ {
npc_blackholeAI(Creature *c) : ScriptedAI(c){ npc_blackholeAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData(); pInstance = c->GetInstanceData();
} }
@@ -521,23 +574,28 @@ struct TRINITY_DLL_DECL npc_blackholeAI : public ScriptedAI
uint8 Phase; uint8 Phase;
uint8 NeedForAHack; uint8 NeedForAHack;
void Reset(){ void Reset()
{
DespawnTimer = 15000; DespawnTimer = 15000;
SpellTimer = 5000; SpellTimer = 5000;
Phase = 0; Phase = 0;
m_creature->addUnitState(UNIT_STAT_STUNNED); m_creature->addUnitState(UNIT_STAT_STUNNED);
DoCastAOE(SPELL_BLACKHOLE_SPAWN, true); DoCastAOE(SPELL_BLACKHOLE_SPAWN, true);
} }
void UpdateAI(const uint32 diff) void UpdateAI(const uint32 diff)
{ {
if(SpellTimer < diff){ if(SpellTimer < diff)
{
Unit* Victim = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_PLAYER_GUID)); Unit* Victim = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_PLAYER_GUID));
switch(NeedForAHack){ switch(NeedForAHack)
{
case 0: case 0:
m_creature->clearUnitState(UNIT_STAT_STUNNED); m_creature->clearUnitState(UNIT_STAT_STUNNED);
DoCastAOE(SPELL_BLACKHOLE_GROW, false); DoCastAOE(SPELL_BLACKHOLE_GROW, false);
if(Victim)AttackStart(Victim); if(Victim)
AttackStart(Victim);
SpellTimer = 700; SpellTimer = 700;
NeedForAHack = 2; NeedForAHack = 2;
break; break;
@@ -555,13 +613,15 @@ struct TRINITY_DLL_DECL npc_blackholeAI : public ScriptedAI
SpellTimer = 400+rand()%500; SpellTimer = 400+rand()%500;
NeedForAHack = 1; NeedForAHack = 1;
Unit* Temp = m_creature->getVictim(); Unit* Temp = m_creature->getVictim();
if(!Temp) return; if(!Temp)
return;
if(Temp->GetPositionZ() > 73 && Victim) if(Temp->GetPositionZ() > 73 && Victim)
AttackStart(Victim); AttackStart(Victim);
} }
}else SpellTimer -= diff; }else SpellTimer -= diff;
if (DespawnTimer < diff){ if (DespawnTimer < diff)
{
m_creature->DealDamage(m_creature, m_creature->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); m_creature->DealDamage(m_creature, m_creature->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
m_creature->RemoveCorpse(); m_creature->RemoveCorpse();
}else DespawnTimer -= diff; }else DespawnTimer -= diff;
@@ -30,12 +30,6 @@
/*** GameObjects ***/ /*** GameObjects ***/
#define DATA_GO_FORCEFIELD 20 #define DATA_GO_FORCEFIELD 20
#define DATA_GO_FIRE_BARRIER 21
#define DATA_GATE_1 22
#define DATA_GATE_2 23
#define DATA_GATE_3 24
#define DATA_GATE_4 25
#define DATA_GATE_5 26
/*** Misc ***/ /*** Misc ***/
#define DATA_PLAYER_GUID 27 #define DATA_PLAYER_GUID 27
@@ -4,8 +4,8 @@
/* ScriptData /* ScriptData
SDName: Instance_Sunwell_Plateau SDName: Instance_Sunwell_Plateau
SD%Complete: 20 SD%Complete: 25
SDComment: VERIFY SCRIPT, rename Gates SDComment: VERIFY SCRIPT
SDCategory: Sunwell_Plateau SDCategory: Sunwell_Plateau
EndScriptData */ EndScriptData */
@@ -14,11 +14,6 @@ EndScriptData */
#define ENCOUNTERS 6 #define ENCOUNTERS 6
enum GoState{
CLOSE = 1,
OPEN = 0
};
/* Sunwell Plateau: /* Sunwell Plateau:
0 - Kalecgos and Sathrovarr 0 - Kalecgos and Sathrovarr
1 - Brutallus 1 - Brutallus
@@ -51,8 +46,8 @@ struct TRINITY_DLL_DECL instance_sunwell_plateau : public ScriptedInstance
/** GameObjects **/ /** GameObjects **/
uint64 ForceField; // Kalecgos Encounter uint64 ForceField; // Kalecgos Encounter
uint64 FireBarrier; // Brutallus Encounter uint64 FireBarrier; // Felmysts Encounter
uint64 Gate[5]; // Rename this to be more specific after door placement is verified. uint64 MurusGate[2]; // Murus Encounter
/*** Misc ***/ /*** Misc ***/
uint32 SpectralRealmTimer; uint32 SpectralRealmTimer;
@@ -78,11 +73,8 @@ struct TRINITY_DLL_DECL instance_sunwell_plateau : public ScriptedInstance
/*** GameObjects ***/ /*** GameObjects ***/
ForceField = 0; ForceField = 0;
FireBarrier = 0; FireBarrier = 0;
Gate[0] = 0; // TODO: Rename Gate[n] with gate_<boss name> for better specificity MurusGate[0] = 0;
Gate[1] = 0; MurusGate[1] = 0;
Gate[2] = 0;
Gate[3] = 0;
Gate[4] = 0;
/*** Encounters ***/ /*** Encounters ***/
for(uint8 i = 0; i < ENCOUNTERS; ++i) for(uint8 i = 0; i < ENCOUNTERS; ++i)
@@ -144,12 +136,17 @@ struct TRINITY_DLL_DECL instance_sunwell_plateau : public ScriptedInstance
switch(go->GetEntry()) switch(go->GetEntry())
{ {
case 188421: ForceField = go->GetGUID(); break; case 188421: ForceField = go->GetGUID(); break;
case 188075: FireBarrier = go->GetGUID(); break; case 188075:
case 187979: Gate[0] = go->GetGUID(); break; if(Encounters[2] == DONE)
case 187770: Gate[1] = go->GetGUID(); break; HandleGameObject(NULL, true, go);
case 187896: Gate[2] = go->GetGUID(); break; FireBarrier = go->GetGUID();
case 187990: Gate[3] = go->GetGUID(); break; break;
case 188118: Gate[4] = go->GetGUID(); break; case 187990: MurusGate[0] = go->GetGUID(); break;
case 188118:
if(Encounters[4] == DONE)
HandleGameObject(NULL, true, go);
MurusGate[1]= go->GetGUID();
break;
} }
} }
@@ -157,14 +154,13 @@ struct TRINITY_DLL_DECL instance_sunwell_plateau : public ScriptedInstance
{ {
switch(id) switch(id)
{ {
case DATA_KALECGOS_EVENT: return Encounters[0]; break; case DATA_KALECGOS_EVENT: return Encounters[0];
case DATA_BRUTALLUS_EVENT: return Encounters[1]; break; case DATA_BRUTALLUS_EVENT: return Encounters[1];
case DATA_FELMYST_EVENT: return Encounters[2]; break; case DATA_FELMYST_EVENT: return Encounters[2];
case DATA_EREDAR_TWINS_EVENT: return Encounters[3]; break; case DATA_EREDAR_TWINS_EVENT: return Encounters[3];
case DATA_MURU_EVENT: return Encounters[4]; break; case DATA_MURU_EVENT: return Encounters[4];
case DATA_KILJAEDEN_EVENT: return Encounters[5]; break; case DATA_KILJAEDEN_EVENT: return Encounters[5];
} }
return 0; return 0;
} }
@@ -172,25 +168,24 @@ struct TRINITY_DLL_DECL instance_sunwell_plateau : public ScriptedInstance
{ {
switch(id) switch(id)
{ {
case DATA_KALECGOS_DRAGON: return Kalecgos_Dragon; break; case DATA_KALECGOS_DRAGON: return Kalecgos_Dragon;
case DATA_KALECGOS_HUMAN: return Kalecgos_Human; break; case DATA_KALECGOS_HUMAN: return Kalecgos_Human;
case DATA_SATHROVARR: return Sathrovarr; break; case DATA_SATHROVARR: return Sathrovarr;
case DATA_BRUTALLUS: return Brutallus; break; case DATA_GO_FORCEFIELD: return ForceField;
case DATA_MADRIGOSA: return Madrigosa; break; case DATA_BRUTALLUS: return Brutallus;
case DATA_FELMYST: return Felmyst; break; case DATA_MADRIGOSA: return Madrigosa;
case DATA_ALYTHESS: return Alythess; break; case DATA_FELMYST: return Felmyst;
case DATA_SACROLASH: return Sacrolash; break; case DATA_ALYTHESS: return Alythess;
case DATA_MURU: return Muru; break; case DATA_SACROLASH: return Sacrolash;
case DATA_KILJAEDEN: return KilJaeden; break; case DATA_MURU: return Muru;
case DATA_KILJAEDEN_CONTROLLER: return KilJaedenController; break; case DATA_KILJAEDEN: return KilJaeden;
case DATA_ANVEENA: return Anveena; break; case DATA_KILJAEDEN_CONTROLLER: return KilJaedenController;
case DATA_KALECGOS_KJ: return KalecgosKJ; break; case DATA_ANVEENA: return Anveena;
case DATA_KALECGOS_KJ: return KalecgosKJ;
case DATA_PLAYER_GUID: case DATA_PLAYER_GUID:
Player* Target = GetPlayerInMap(); Player* Target = GetPlayerInMap();
return Target->GetGUID(); return Target->GetGUID();
break;
} }
return 0; return 0;
} }
@@ -202,22 +197,23 @@ struct TRINITY_DLL_DECL instance_sunwell_plateau : public ScriptedInstance
case DATA_BRUTALLUS_EVENT: Encounters[1] = data; break; case DATA_BRUTALLUS_EVENT: Encounters[1] = data; break;
case DATA_FELMYST_EVENT: case DATA_FELMYST_EVENT:
if(data == DONE) if(data == DONE)
HandleGameObject(FireBarrier, OPEN); HandleGameObject(FireBarrier, true);
Encounters[2] = data; break; Encounters[2] = data; break;
case DATA_EREDAR_TWINS_EVENT: Encounters[3] = data; break; case DATA_EREDAR_TWINS_EVENT: Encounters[3] = data; break;
case DATA_MURU_EVENT: case DATA_MURU_EVENT:
switch(data){ switch(data)
{
case DONE: case DONE:
HandleGameObject(Gate[4], OPEN); HandleGameObject(MurusGate[0], true);
HandleGameObject(Gate[3], OPEN); HandleGameObject(MurusGate[1], true);
break; break;
case IN_PROGRESS: case IN_PROGRESS:
HandleGameObject(Gate[4], CLOSE); HandleGameObject(MurusGate[0], false);
HandleGameObject(Gate[3], CLOSE); HandleGameObject(MurusGate[1], false);
break; break;
case NOT_STARTED: case NOT_STARTED:
HandleGameObject(Gate[4], CLOSE); HandleGameObject(MurusGate[0], true);
HandleGameObject(Gate[3], OPEN); HandleGameObject(MurusGate[1], false);
break; break;
} }
Encounters[4] = data; break; Encounters[4] = data; break;
@@ -228,14 +224,6 @@ struct TRINITY_DLL_DECL instance_sunwell_plateau : public ScriptedInstance
SaveToDB(); SaveToDB();
} }
void SetData64(uint32 id, uint64 guid)
{
}
void Update(uint32 diff)
{
}
std::string GetSaveData() std::string GetSaveData()
{ {
OUT_SAVE_INST_DATA; OUT_SAVE_INST_DATA;
@@ -249,7 +237,6 @@ struct TRINITY_DLL_DECL instance_sunwell_plateau : public ScriptedInstance
OUT_SAVE_INST_DATA_COMPLETE; OUT_SAVE_INST_DATA_COMPLETE;
return out; return out;
} }
return NULL; return NULL;
} }
@@ -280,6 +267,7 @@ InstanceData* GetInstanceData_instance_sunwell_plateau(Map* map)
void AddSC_instance_sunwell_plateau() void AddSC_instance_sunwell_plateau()
{ {
Script *newscript; Script *newscript;
newscript = new Script; newscript = new Script;
newscript->Name = "instance_sunwell_plateau"; newscript->Name = "instance_sunwell_plateau";
newscript->GetInstanceData = &GetInstanceData_instance_sunwell_plateau; newscript->GetInstanceData = &GetInstanceData_instance_sunwell_plateau;