diff options
-rw-r--r-- | src/bindings/scripts/scripts/outland/black_temple/boss_illidan.cpp | 65 | ||||
-rw-r--r-- | src/bindings/scripts/scripts/outland/black_temple/illidari_council.cpp | 2 |
2 files changed, 49 insertions, 18 deletions
diff --git a/src/bindings/scripts/scripts/outland/black_temple/boss_illidan.cpp b/src/bindings/scripts/scripts/outland/black_temple/boss_illidan.cpp index 2cc4e20bdf8..f9125a37117 100644 --- a/src/bindings/scripts/scripts/outland/black_temple/boss_illidan.cpp +++ b/src/bindings/scripts/scripts/outland/black_temple/boss_illidan.cpp @@ -974,8 +974,9 @@ struct TRINITY_DLL_DECL npc_akama_illidanAI : public ScriptedAI npc_akama_illidanAI(Creature* c) : ScriptedAI(c) { pInstance = c->GetInstanceData(); + JustCreated = true; } - + bool JustCreated; ScriptedInstance* pInstance; PhaseAkama Phase; @@ -991,9 +992,11 @@ struct TRINITY_DLL_DECL npc_akama_illidanAI : public ScriptedAI uint32 ChannelCount; uint32 WalkCount; uint32 TalkCount; - + uint32 Check_Timer; + void Reset() { + WalkCount = 0; if (pInstance) { pInstance->SetData(DATA_ILLIDANSTORMRAGEEVENT, NOT_STARTED); @@ -1003,11 +1006,20 @@ struct TRINITY_DLL_DECL npc_akama_illidanAI : public ScriptedAI DoorGUID[0] = pInstance->GetData64(DATA_GAMEOBJECT_ILLIDAN_DOOR_R); DoorGUID[1] = pInstance->GetData64(DATA_GAMEOBJECT_ILLIDAN_DOOR_L); - pInstance->HandleGameObject(GateGUID, false); - - for(uint8 i = 0; i < 2; ++i) - pInstance->HandleGameObject(DoorGUID[i], false); + if(JustCreated)//close all doors at create + { + pInstance->HandleGameObject(GateGUID, false); + for(uint8 i = 0; i < 2; ++i) + pInstance->HandleGameObject(DoorGUID[i], false); + //JustCreated = false; + }else + {//open all doors, raid wiped + pInstance->HandleGameObject(GateGUID, true); + WalkCount = 1;//skip first wp + for(uint8 i = 0; i < 2; ++i) + pInstance->HandleGameObject(DoorGUID[i], true); + } } else { @@ -1024,15 +1036,16 @@ struct TRINITY_DLL_DECL npc_akama_illidanAI : public ScriptedAI Phase = PHASE_AKAMA_NULL; Timer = 0; - ChannelCount = 0; - WalkCount = 0; + ChannelCount = 0; TalkCount = 0; + Check_Timer = 5000; KillAllElites(); m_creature->SetUInt32Value(UNIT_NPC_FLAGS, 0); // Database sometimes has strange values.. m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); m_creature->setActive(false); + m_creature->SetVisibility(VISIBILITY_OFF); } // Do not call reset in Akama's evade mode, as this will stop him from summoning minions after he kills the first bit @@ -1046,7 +1059,11 @@ struct TRINITY_DLL_DECL npc_akama_illidanAI : public ScriptedAI void EnterCombat(Unit *who) {} void MoveInLineOfSight(Unit* who) {} - void MovementInform(uint32 MovementType, uint32 Data) {Timer = 1;} + void MovementInform(uint32 MovementType, uint32 Data) + { + if(MovementType == POINT_MOTION_TYPE) + Timer = 1; + } void DamageTaken(Unit *done_by, uint32 &damage) { @@ -1075,10 +1092,8 @@ struct TRINITY_DLL_DECL npc_akama_illidanAI : public ScriptedAI return; pInstance->SetData(DATA_ILLIDANSTORMRAGEEVENT, IN_PROGRESS); - for(uint8 i = 0; i < 2; ++i) - pInstance->HandleGameObject(DoorGUID[i], false); - + pInstance->HandleGameObject(DoorGUID[i], false); if (GETCRE(Illidan, IllidanGUID)) { Illidan->RemoveAurasDueToSpell(SPELL_KNEEL); @@ -1094,7 +1109,9 @@ struct TRINITY_DLL_DECL npc_akama_illidanAI : public ScriptedAI void BeginChannel() { m_creature->setActive(true); - + m_creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + if(!JustCreated) + return; float x, y, z; if (GETGO(Gate, GateGUID)) Gate->GetPosition(x, y, z); @@ -1104,8 +1121,7 @@ struct TRINITY_DLL_DECL npc_akama_illidanAI : public ScriptedAI if (Creature* Channel = m_creature->SummonCreature(ILLIDAN_DOOR_TRIGGER, x, y, z+5, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 360000)) { ChannelGUID = Channel->GetGUID(); - Channel->SetDisplayId(11686); // Invisible but spell visuals can still be seen. - m_creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + Channel->SetDisplayId(11686); // Invisible but spell visuals can still be seen. DoCast(Channel, SPELL_AKAMA_DOOR_FAIL); } @@ -1130,7 +1146,7 @@ struct TRINITY_DLL_DECL npc_akama_illidanAI : public ScriptedAI return; switch(NextPhase) { - case PHASE_CHANNEL: + case PHASE_CHANNEL: BeginChannel(); Timer = 5000; ChannelCount = 0; @@ -1146,6 +1162,7 @@ struct TRINITY_DLL_DECL npc_akama_illidanAI : public ScriptedAI m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); WalkCount++; } + JustCreated = false; BeginWalk(); Timer = 0; break; @@ -1300,6 +1317,16 @@ struct TRINITY_DLL_DECL npc_akama_illidanAI : public ScriptedAI void UpdateAI(const uint32 diff) { + if(m_creature->GetVisibility() == VISIBILITY_OFF) + { + if(Check_Timer < diff) + { + if(pInstance && pInstance->GetData(DATA_ILLIDARICOUNCILEVENT) == DONE) + m_creature->SetVisibility(VISIBILITY_ON); + + Check_Timer = 5000; + }else Check_Timer -= diff; + } Event = false; if (Timer) { @@ -1313,7 +1340,11 @@ struct TRINITY_DLL_DECL npc_akama_illidanAI : public ScriptedAI switch(Phase) { case PHASE_CHANNEL: - HandleChannelSequence(); + if(JustCreated) + HandleChannelSequence(); + else{ + EnterPhase(PHASE_WALK); + } break; case PHASE_TALK: HandleTalkSequence(); diff --git a/src/bindings/scripts/scripts/outland/black_temple/illidari_council.cpp b/src/bindings/scripts/scripts/outland/black_temple/illidari_council.cpp index 697c71eaec9..7530909cb11 100644 --- a/src/bindings/scripts/scripts/outland/black_temple/illidari_council.cpp +++ b/src/bindings/scripts/scripts/outland/black_temple/illidari_council.cpp @@ -300,7 +300,7 @@ struct TRINITY_DLL_DECL mob_illidari_councilAI : public ScriptedAI if (Creature* VoiceTrigger = (Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_BLOOD_ELF_COUNCIL_VOICE)))) VoiceTrigger->DealDamage(VoiceTrigger, VoiceTrigger->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); pInstance->SetData(DATA_ILLIDARICOUNCILEVENT, DONE); - m_creature->SummonCreature(AKAMAID,746.466980f,304.394989f,311.90208f,6.272870f,TEMPSUMMON_DEAD_DESPAWN,0); + //m_creature->SummonCreature(AKAMAID,746.466980f,304.394989f,311.90208f,6.272870f,TEMPSUMMON_DEAD_DESPAWN,0); } m_creature->DealDamage(m_creature, m_creature->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); return; |