Пример #1
0
        void UpdateEscortAI(const uint32 uiDiff)
        {
            if (uiPhaseTimer <= uiDiff)
            {
                switch (uiStep)
                {
                    case 1:
                        if (instance)
                        {
                            if (instance->GetData(DATA_BRANN_EVENT) != NOT_STARTED)
                                return;
                            instance->SetData(DATA_BRANN_EVENT, IN_PROGRESS);
                        }
                        bIsBattle = false;
                        DoScriptText(SAY_ESCORT_START, me);
                        SetRun(true);
                        JumpToNextStep(0);
                        break;
                    case 3:
                        SetEscortPaused(false);
                        JumpToNextStep(0);
                        break;
                    case 5:
                        if (instance)
                            if (Creature* temp = (Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM))))
                                DoScriptText(SAY_EVENT_INTRO_3_ABED, temp);
                            JumpToNextStep(8500);
                        break;
                    case 6:
                        DoScriptText(SAY_EVENT_A_1, me);
                        JumpToNextStep(6500);
                        break;
                    case 7:
                        if (instance)
                            if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_KADDRAK)))
                                DoScriptText(SAY_EVENT_A_2_KADD, temp);
                            JumpToNextStep(12500);
                        break;
                    case 8:
                        DoScriptText(SAY_EVENT_A_3, me);
                        if (instance)
                            instance->HandleGameObject(instance->GetData64(DATA_GO_KADDRAK), true);
                        if (Creature* temp = Unit::GetCreature(*me, uiControllerGUID))
                            CAST_AI(mob_tribuna_controller::mob_tribuna_controllerAI, temp->AI())->bKaddrakActivated = true;
                        JumpToNextStep(5000);
                        break;
                    case 9:
                        me->SetReactState(REACT_PASSIVE);
                        SpawnDwarf(1);
                        JumpToNextStep(20000);
                        break;
                    case 10:
                        DoScriptText(SAY_EVENT_B_1, me);
                        JumpToNextStep(6000);
                        break;
                    case 11:
                        if (instance)
                            if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_MARNAK)))
                                DoScriptText(SAY_EVENT_B_2_MARN, temp);
                        SpawnDwarf(1);
                        JumpToNextStep(20000);
                        break;
                    case 12:
                        DoScriptText(SAY_EVENT_B_3, me);
                        if (instance)
                            instance->HandleGameObject(instance->GetData64(DATA_GO_MARNAK), true);
                        if (Creature* temp = Unit::GetCreature(*me, uiControllerGUID))
                            CAST_AI(mob_tribuna_controller::mob_tribuna_controllerAI, temp->AI())->bMarnakActivated = true;
                        JumpToNextStep(10000);
                        break;
                    case 13:
                        SpawnDwarf(1);
                        JumpToNextStep(10000);
                        break;
                    case 14:
                        SpawnDwarf(2);
                        JumpToNextStep(20000);
                        break;
                    case 15:
                        DoScriptText(SAY_EVENT_C_1, me);
                        SpawnDwarf(1);
                        JumpToNextStep(10000);
                        break;
                    case 16:
                        SpawnDwarf(2);
                        JumpToNextStep(20000);
                        break;
                    case 17:
                        if (instance)
                            if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
                                DoScriptText(SAY_EVENT_C_2_ABED, temp);
                            SpawnDwarf(1);
                        JumpToNextStep(20000);
                        break;
                    case 18:
                        DoScriptText(SAY_EVENT_C_3, me);
                        if (instance)
                            instance->HandleGameObject(instance->GetData64(DATA_GO_ABEDNEUM), true);
                        if (Creature* temp = Unit::GetCreature(*me, uiControllerGUID))
                            CAST_AI(mob_tribuna_controller::mob_tribuna_controllerAI, temp->AI())->bAbedneumActivated = true;
                        JumpToNextStep(5000);
                        break;
                    case 19:
                        SpawnDwarf(2);
                        JumpToNextStep(10000);
                        break;
                    case 20:
                        SpawnDwarf(1);
                        JumpToNextStep(15000);
                        break;
                    case 21:
                        DoScriptText(SAY_EVENT_D_1, me);
                        SpawnDwarf(3);
                        JumpToNextStep(20000);
                        break;
                    case 22:
                        if (instance)
                            if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
                                DoScriptText(SAY_EVENT_D_2_ABED, temp);
                        SpawnDwarf(1);
                        JumpToNextStep(5000);
                        break;
                    case 23:
                        SpawnDwarf(2);
                        JumpToNextStep(15000);
                        break;
                    case 24:
                        DoScriptText(SAY_EVENT_D_3, me);
                        SpawnDwarf(3);
                        JumpToNextStep(5000);
                        break;
                    case 25:
                        SpawnDwarf(1);
                        JumpToNextStep(5000);
                        break;
                    case 26:
                        SpawnDwarf(2);
                        JumpToNextStep(10000);
                        break;
                    case 27:
                        if (instance)
                            if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
                                DoScriptText(SAY_EVENT_D_4_ABED, temp);
                        SpawnDwarf(1);
                        JumpToNextStep(10000);
                        break;
                    case 28:
                        me->SetReactState(REACT_DEFENSIVE);
                        DoScriptText(SAY_EVENT_END_01, me);
                        me->SetStandState(UNIT_STAND_STATE_STAND);
                        if (instance)
                            instance->HandleGameObject(instance->GetData64(DATA_GO_SKY_FLOOR), true);
                        if (Creature* temp = Unit::GetCreature(*me, uiControllerGUID))
                            temp->DealDamage(temp, temp->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
                        bIsBattle = true;
                        SetEscortPaused(false);
                        JumpToNextStep(6500);
                        break;
                    case 29:
                        DoScriptText(SAY_EVENT_END_02, me);
                        if (instance)
                            instance->SetData(DATA_BRANN_EVENT, DONE);
                        me->CastSpell(me, SPELL_REWARD_ACHIEVEMENT, true);
                        JumpToNextStep(5500);
                        break;
                    case 30:
                        if (instance)
                            if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
                                DoScriptText(SAY_EVENT_END_03_ABED, temp);
                        JumpToNextStep(8500);
                        break;
                    case 31:
                        DoScriptText(SAY_EVENT_END_04, me);
                        JumpToNextStep(11500);
                        break;
                    case 32:
                        if (instance)
                            if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
                                DoScriptText(SAY_EVENT_END_05_ABED, temp);
                            JumpToNextStep(11500);
                        break;
                    case 33:
                        DoScriptText(SAY_EVENT_END_06, me);
                        JumpToNextStep(4500);
                        break;
                    case 34:
                        if (instance)
                            if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
                                DoScriptText(SAY_EVENT_END_07_ABED, temp);
                            JumpToNextStep(22500);
                        break;
                    case 35:
                        DoScriptText(SAY_EVENT_END_08, me);
                        JumpToNextStep(7500);
                        break;
                    case 36:
                        if (instance)
                            if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_KADDRAK)))
                                DoScriptText(SAY_EVENT_END_09_KADD, temp);
                        JumpToNextStep(18500);
                        break;
                    case 37:
                        DoScriptText(SAY_EVENT_END_10, me);
                        JumpToNextStep(5500);
                        break;
                    case 38:
                        if (instance)
                            if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_KADDRAK)))
                                DoScriptText(SAY_EVENT_END_11_KADD, temp);
                            JumpToNextStep(20500);
                        break;
                    case 39:
                        DoScriptText(SAY_EVENT_END_12, me);
                        JumpToNextStep(2500);
                        break;
                    case 40:
                        if (instance)
                            if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_KADDRAK)))
                                DoScriptText(SAY_EVENT_END_13_KADD, temp);
                        JumpToNextStep(19500);
                        break;
                    case 41:
                        DoScriptText(SAY_EVENT_END_14, me);
                        JumpToNextStep(10500);
                        break;
                    case 42:
                        if (instance)
                            if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_MARNAK)))
                                DoScriptText(SAY_EVENT_END_15_MARN, temp);
                            JumpToNextStep(6500);
                        break;
                    case 43:
                        DoScriptText(SAY_EVENT_END_16, me);
                        JumpToNextStep(6500);
                        break;
                    case 44:
                        if (instance)
                            if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_MARNAK)))
                                DoScriptText(SAY_EVENT_END_17_MARN, temp);
                            JumpToNextStep(25500);
                        break;
                    case 45:
                        DoScriptText(SAY_EVENT_END_18, me);
                        JumpToNextStep(23500);
                        break;
                    case 46:
                        if (instance)
                            if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_MARNAK)))
                                DoScriptText(SAY_EVENT_END_19_MARN, temp);
                            JumpToNextStep(3500);
                        break;
                    case 47:
                        DoScriptText(SAY_EVENT_END_20, me);
                        JumpToNextStep(8500);
                        break;
                    case 48:
                        if (instance)
                            if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
                                DoScriptText(SAY_EVENT_END_21_ABED, temp);
                            JumpToNextStep(5500);
                        break;
                    case 49:
                    {
                        if (instance)
                        {
                            instance->HandleGameObject(instance->GetData64(DATA_GO_KADDRAK), false);
                            instance->HandleGameObject(instance->GetData64(DATA_GO_MARNAK), false);
                            instance->HandleGameObject(instance->GetData64(DATA_GO_ABEDNEUM), false);
                            instance->HandleGameObject(instance->GetData64(DATA_GO_SKY_FLOOR), false);
                        }
                        Player* player = GetPlayerForEscort();
                        if (player)
                            player->GroupEventHappens(QUEST_HALLS_OF_STONE, me);
                        me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
                        JumpToNextStep(180000);
                        break;
                    }
                    case 50:
                        SetEscortPaused(false);
                        break;
                }
            } else uiPhaseTimer -= uiDiff;

            if (!bIsLowHP && HealthBelowPct(30))
            {
                DoScriptText(SAY_LOW_HEALTH, me);
                bIsLowHP = true;
            }
            else if (bIsLowHP && !HealthBelowPct(30))
                bIsLowHP = false;

            if (!UpdateVictim())
                return;

            DoMeleeAttackIfReady();
        }
Пример #2
0
    void UpdateEscortAI(const uint32 uiDiff) override
    {
        if (m_uiPhaseTimer && m_uiPhaseTimer <= uiDiff)
        {
            switch (m_uiStep)
            {
                    // Begin Event
                case 0:
                    // TODO, this is wrong, must be "using or similar"
                    m_creature->SetStandState(UNIT_STAND_STATE_KNEEL);
                    m_uiPhaseTimer = 1500;
                    break;
                case 1:
                    DoScriptText(SAY_EVENT_INTRO_2, m_creature);
                    m_uiPhaseTimer = 2500;
                    break;
                case 2:
                    if (m_pInstance)
                        m_pInstance->DoUseDoorOrButton(GO_TRIBUNAL_CONSOLE);
                    m_uiPhaseTimer = 6500;
                    break;
                case 3:
                    if (m_pInstance)
                        m_pInstance->DoFaceSpeak(FACE_ABEDNEUM, SAY_EVENT_INTRO_3_ABED);
                    m_uiPhaseTimer = 8500;
                    break;

                    // Activate Kaddrak
                case 4:
                    DoScriptText(SAY_EVENT_A_1, m_creature);
                    m_uiPhaseTimer = 6500;
                    break;
                case 5:
                    if (m_pInstance)
                        m_pInstance->DoFaceSpeak(FACE_KADDRAK, SAY_EVENT_A_2_KADD);
                    m_uiPhaseTimer = 12500;
                    break;
                case 6:
                    DoScriptText(SAY_EVENT_A_3, m_creature);
                    m_uiPhaseTimer = 6000;
                    break;
                case 7:
                    if (m_pInstance)
                        m_pInstance->ActivateFace(FACE_KADDRAK, false);
                    m_uiPhaseTimer = 5000;
                    break;
                case 8:
                    SpawnDwarf(NPC_DARK_RUNE_PROTECTOR);
                    m_uiPhaseTimer = 20000;
                    break;

                    // Activate Marnak
                case 9:
                    DoScriptText(SAY_EVENT_B_1, m_creature);
                    m_uiPhaseTimer = 6000;
                    break;
                case 10:
                    if (m_pInstance)
                        m_pInstance->DoFaceSpeak(FACE_MARNAK, SAY_EVENT_B_2_MARN);
                    SpawnDwarf(NPC_DARK_RUNE_PROTECTOR);
                    m_uiPhaseTimer = 20000;
                    break;
                case 11:
                    DoScriptText(SAY_EVENT_B_3, m_creature);
                    m_uiPhaseTimer = 5000;
                    break;
                case 12:
                    if (m_pInstance)
                        m_pInstance->ActivateFace(FACE_MARNAK, false);
                    m_uiPhaseTimer = 10000;
                    break;
                case 13:
                    SpawnDwarf(NPC_DARK_RUNE_PROTECTOR);
                    m_uiPhaseTimer = 10000;
                    break;
                case 14:
                    SpawnDwarf(NPC_DARK_RUNE_STORMCALLER);
                    m_uiPhaseTimer = (20000);
                    break;
                case 15:
                    DoScriptText(SAY_EVENT_C_1, m_creature);
                    SpawnDwarf(NPC_DARK_RUNE_PROTECTOR);
                    m_uiPhaseTimer = 10000;
                    break;
                case 16:
                    SpawnDwarf(NPC_DARK_RUNE_STORMCALLER);
                    m_uiPhaseTimer = 20000;
                    break;

                    // Activate Abedneum
                case 17:
                    if (m_pInstance)
                        m_pInstance->DoFaceSpeak(FACE_ABEDNEUM, SAY_EVENT_C_2_ABED);
                    SpawnDwarf(NPC_DARK_RUNE_PROTECTOR);
                    m_uiPhaseTimer = 20000;
                    break;
                case 18:
                    DoScriptText(SAY_EVENT_C_3, m_creature);
                    m_uiPhaseTimer = 5000;
                    break;
                case 19:
                    if (m_pInstance)
                        m_pInstance->ActivateFace(FACE_ABEDNEUM, false);
                    m_uiPhaseTimer = 5000;
                    break;
                case 20:
                    SpawnDwarf(NPC_DARK_RUNE_STORMCALLER);
                    m_uiPhaseTimer = 10000;
                    break;
                case 21:
                    SpawnDwarf(NPC_DARK_RUNE_PROTECTOR);
                    m_uiPhaseTimer = 15000;
                    break;

                case 22:
                    DoScriptText(SAY_EVENT_D_1, m_creature);
                    SpawnDwarf(NPC_IRON_GOLEM_CUSTODIAN);
                    m_uiPhaseTimer = 20000;
                    break;
                case 23:
                    if (m_pInstance)
                        m_pInstance->DoFaceSpeak(FACE_ABEDNEUM, SAY_EVENT_D_2_ABED);
                    SpawnDwarf(NPC_DARK_RUNE_PROTECTOR);
                    m_uiPhaseTimer = 5000;
                    break;
                case 24:
                    SpawnDwarf(NPC_DARK_RUNE_STORMCALLER);
                    m_uiPhaseTimer = 15000;
                    break;
                case 25:
                    DoScriptText(SAY_EVENT_D_3, m_creature);
                    SpawnDwarf(NPC_IRON_GOLEM_CUSTODIAN);
                    m_uiPhaseTimer = 5000;
                    break;
                case 26:
                    SpawnDwarf(NPC_DARK_RUNE_PROTECTOR);
                    m_uiPhaseTimer = 5000;
                    break;
                case 27:
                    SpawnDwarf(NPC_DARK_RUNE_STORMCALLER);
                    m_uiPhaseTimer = 10000;
                    break;
                case 28:
                    if (m_pInstance)
                        m_pInstance->DoFaceSpeak(FACE_ABEDNEUM, SAY_EVENT_D_4_ABED);
                    SpawnDwarf(NPC_DARK_RUNE_PROTECTOR);
                    m_uiPhaseTimer = 10000;
                    break;

                    // End Event
                case 29:
                    DoScriptText(SAY_EVENT_END_01, m_creature);
                    m_creature->SetStandState(UNIT_STAND_STATE_STAND);// TODO TODO
                    if (m_pInstance)
                        m_pInstance->SetData(TYPE_TRIBUNAL, SPECIAL); // Kill remaining npcs

                    // ToDo: the loot and the achiev should be triggered at this point
                    // Brann should get the gossip option "There will be plenty of time for this later Brann, we need to get moving!"
                    // This will allow Brann to continue the escort to the last encounter
                    // When reaching the last door he has the gossip "We're with you Brann! Open it!"

                    SetEscortPaused(false);
                    m_uiPhaseTimer = 3000;
                    // break;
                    // case 30:
                    if (m_pInstance)
                        m_pInstance->ActivateFace(FACE_ABEDNEUM, true);
                    m_uiPhaseTimer = 0;
                    break;
                case 30:
                    DoScriptText(SAY_EVENT_END_02, m_creature);
                    m_uiPhaseTimer = 5500;
                    break;
                case 31:
                    if (m_pInstance)
                        m_pInstance->DoFaceSpeak(FACE_ABEDNEUM, SAY_EVENT_END_03_ABED);
                    m_uiPhaseTimer = 8500;
                    break;
                case 32:
                    DoScriptText(SAY_EVENT_END_04, m_creature);
                    m_uiPhaseTimer = 11500;
                    break;
                case 33:
                    if (m_pInstance)
                        m_pInstance->DoFaceSpeak(FACE_ABEDNEUM, SAY_EVENT_END_05_ABED);
                    m_uiPhaseTimer = 11500;
                    break;
                case 34:
                    DoScriptText(SAY_EVENT_END_06, m_creature);
                    m_uiPhaseTimer = 4500;
                    break;
                case 35:
                    if (m_pInstance)
                        m_pInstance->DoFaceSpeak(FACE_ABEDNEUM, SAY_EVENT_END_07_ABED);
                    m_uiPhaseTimer = 22500;
                    break;
                case 36:
                    DoScriptText(SAY_EVENT_END_08, m_creature);
                    m_uiPhaseTimer = 7500;
                    break;
                case 37:
                    if (m_pInstance)
                        m_pInstance->DoFaceSpeak(FACE_KADDRAK, SAY_EVENT_END_09_KADD);
                    m_uiPhaseTimer = 18500;
                    break;
                case 38:
                    DoScriptText(SAY_EVENT_END_10, m_creature);
                    m_uiPhaseTimer = 5500;
                    break;
                case 39:
                    if (m_pInstance)
                        m_pInstance->DoFaceSpeak(FACE_KADDRAK, SAY_EVENT_END_11_KADD);
                    m_uiPhaseTimer = 20500;
                    break;
                case 40:
                    DoScriptText(SAY_EVENT_END_12, m_creature);
                    m_uiPhaseTimer = 2500;
                    break;
                case 41:
                    if (m_pInstance)
                        m_pInstance->DoFaceSpeak(FACE_KADDRAK, SAY_EVENT_END_13_KADD);
                    m_uiPhaseTimer = 19500;
                    break;
                case 42:
                    DoScriptText(SAY_EVENT_END_14, m_creature);
                    m_uiPhaseTimer = 10500;
                    break;
                case 43:
                    if (m_pInstance)
                        m_pInstance->DoFaceSpeak(FACE_MARNAK, SAY_EVENT_END_15_MARN);
                    m_uiPhaseTimer = 6500;
                    break;
                case 44:
                    DoScriptText(SAY_EVENT_END_16, m_creature);
                    m_uiPhaseTimer = 6500;
                    break;
                case 45:
                    if (m_pInstance)
                        m_pInstance->DoFaceSpeak(FACE_MARNAK, SAY_EVENT_END_17_MARN);
                    m_uiPhaseTimer = 25500;
                    break;
                case 46:
                    DoScriptText(SAY_EVENT_END_18, m_creature);
                    m_uiPhaseTimer = 23500;
                    break;
                case 47:
                    if (m_pInstance)
                        m_pInstance->DoFaceSpeak(FACE_MARNAK, SAY_EVENT_END_19_MARN);
                    m_uiPhaseTimer = 3500;
                    break;
                case 48:
                    DoScriptText(SAY_EVENT_END_20, m_creature);
                    m_uiPhaseTimer = 8500;
                    break;
                case 49:
                    if (m_pInstance)
                        m_pInstance->DoFaceSpeak(FACE_ABEDNEUM, SAY_EVENT_END_21_ABED);
                    m_uiPhaseTimer = 5500;
                    break;
                case 50:
                {
                    if (m_pInstance)
                    {
                        m_pInstance->DoUseDoorOrButton(GO_TRIBUNAL_FLOOR);
                        m_pInstance->SetData(TYPE_TRIBUNAL, DONE);
                    }

                    Player* pPlayer = GetPlayerForEscort();
                    if (pPlayer)
                        pPlayer->GroupEventHappens(QUEST_HALLS_OF_STONE, m_creature);

                    m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
                    m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);

                    m_uiPhaseTimer = 180000;
                    break;
                }
                case 51:
                    SetEscortPaused(false);
                    break;
            }
            ++m_uiStep;
        }
        else if (m_uiPhaseTimer)
            m_uiPhaseTimer -= uiDiff;

        if (!m_bIsLowHP && m_creature->GetHealthPercent() < 30)
        {
            DoScriptText(SAY_LOW_HEALTH, m_creature);
            m_bIsLowHP = true;
        }
        else if (m_bIsLowHP && m_creature->GetHealthPercent() > 30)
            m_bIsLowHP = false;

        // No Combat abilities needed here
        if (!m_creature->SelectHostileTarget() || !m_creature->getVictim())
            return;
    }
Пример #3
0
    void UpdateEscortAI(const uint32 uiDiff)
    {
        if (m_uiPhaseTimer && m_uiPhaseTimer <= uiDiff)
        {
            switch (m_uiStep)
            {
            // Begin Event
            case 0:
                // TODO, this is wrong, must be "using or similar"
                m_creature->SetStandState(UNIT_STAND_STATE_KNEEL);
                m_uiPhaseTimer = 1500;
                break;
            case 1:
                DoScriptText(SAY_EVENT_INTRO_2, m_creature);
                m_uiPhaseTimer = 2500;
                break;
            case 2:
                if (m_pInstance)
                    m_pInstance->DoUseDoorOrButton(GO_TRIBUNAL_CONSOLE);
                m_uiPhaseTimer = 6500;
                break;
            case 3:
                if (m_pInstance)
                    m_pInstance->DoFaceSpeak(FACE_ABEDNEUM, SAY_EVENT_INTRO_3_ABED);
                m_uiPhaseTimer = 8500;
                break;

            // Activate Kaddrak
            case 4:
                DoScriptText(SAY_EVENT_A_1, m_creature);
                m_uiPhaseTimer = 6500;
                break;
            case 5:
                if (m_pInstance)
                    m_pInstance->DoFaceSpeak(FACE_KADDRAK, SAY_EVENT_A_2_KADD);
                m_uiPhaseTimer = 12500;
                break;
            case 6:
                DoScriptText(SAY_EVENT_A_3, m_creature);
                m_uiPhaseTimer = 6000;
                break;
            case 7:
                if (m_pInstance)
                    m_pInstance->ActivateFace(FACE_KADDRAK, false);
                m_uiPhaseTimer = 5000;
                break;
            case 8:
                SpawnDwarf(NPC_DARK_RUNE_PROTECTOR);
                m_uiPhaseTimer = 20000;
                break;

            // Activate Marnak
            case 9:
                DoScriptText(SAY_EVENT_B_1, m_creature);
                m_uiPhaseTimer = 6000;
                break;
            case 10:
                if (m_pInstance)
                    m_pInstance->DoFaceSpeak(FACE_MARNAK, SAY_EVENT_B_2_MARN);
                SpawnDwarf(NPC_DARK_RUNE_PROTECTOR);
                m_uiPhaseTimer = 20000;
                break;
            case 11:
                DoScriptText(SAY_EVENT_B_3, m_creature);
                m_uiPhaseTimer = 5000;
                break;
            case 12:
                if (m_pInstance)
                    m_pInstance->ActivateFace(FACE_MARNAK, false);
                m_uiPhaseTimer = 10000;
                break;
            case 13:
                SpawnDwarf(NPC_DARK_RUNE_PROTECTOR);
                m_uiPhaseTimer = 10000;
                break;
            case 14:
                SpawnDwarf(NPC_DARK_RUNE_STORMCALLER);
                m_uiPhaseTimer = (20000);
                break;
            case 15:
                DoScriptText(SAY_EVENT_C_1, m_creature);
                SpawnDwarf(NPC_DARK_RUNE_PROTECTOR);
                m_uiPhaseTimer = 10000;
                break;
            case 16:
                SpawnDwarf(NPC_DARK_RUNE_STORMCALLER);
                m_uiPhaseTimer = 20000;
                break;

            // Activate Abedneum
            case 17:
                if (m_pInstance)
                    m_pInstance->DoFaceSpeak(FACE_ABEDNEUM, SAY_EVENT_C_2_ABED);
                SpawnDwarf(NPC_DARK_RUNE_PROTECTOR);
                m_uiPhaseTimer = 20000;
                break;
            case 18:
                DoScriptText(SAY_EVENT_C_3, m_creature);
                m_uiPhaseTimer = 5000;
                break;
            case 19:
                if (m_pInstance)
                    m_pInstance->ActivateFace(FACE_ABEDNEUM, false);
                m_uiPhaseTimer = 5000;
                break;
            case 20:
                SpawnDwarf(NPC_DARK_RUNE_STORMCALLER);
                m_uiPhaseTimer = 10000;
                break;
            case 21:
                SpawnDwarf(NPC_DARK_RUNE_PROTECTOR);
                m_uiPhaseTimer = 15000;
                break;

            case 22:
                DoScriptText(SAY_EVENT_D_1, m_creature);
                SpawnDwarf(NPC_IRON_GOLEM_CUSTODIAN);
                m_uiPhaseTimer = 20000;
                break;
            case 23:
                if (m_pInstance)
                    m_pInstance->DoFaceSpeak(FACE_ABEDNEUM, SAY_EVENT_D_2_ABED);
                SpawnDwarf(NPC_DARK_RUNE_PROTECTOR);
                m_uiPhaseTimer = 5000;
                break;
            case 24:
                SpawnDwarf(NPC_DARK_RUNE_STORMCALLER);
                m_uiPhaseTimer = 15000;
                break;
            case 25:
                DoScriptText(SAY_EVENT_D_3, m_creature);
                SpawnDwarf(NPC_IRON_GOLEM_CUSTODIAN);
                m_uiPhaseTimer = 5000;
                break;
            case 26:
                SpawnDwarf(NPC_DARK_RUNE_PROTECTOR);
                m_uiPhaseTimer = 5000;
                break;
            case 27:
                SpawnDwarf(NPC_DARK_RUNE_STORMCALLER);
                m_uiPhaseTimer = 10000;
                break;
            case 28:
                if (m_pInstance)
                    m_pInstance->DoFaceSpeak(FACE_ABEDNEUM, SAY_EVENT_D_4_ABED);
                SpawnDwarf(NPC_DARK_RUNE_PROTECTOR);
                m_uiPhaseTimer = 10000;
                break;

            // End Event
            case 29:
                DoScriptText(SAY_EVENT_END_01, m_creature);
                m_creature->SetStandState(UNIT_STAND_STATE_STAND);// TODO TODO
                if (m_pInstance)
                    m_pInstance->SetData(TYPE_TRIBUNAL, SPECIAL); // Kill remaining npcs
                SetEscortPaused(false);
                m_uiPhaseTimer = 3000;
                // break;
                // case 30:
                if (m_pInstance)
                    m_pInstance->ActivateFace(FACE_ABEDNEUM, true);
                m_uiPhaseTimer = 0;
                break;
            case 30:
                DoScriptText(SAY_EVENT_END_02, m_creature);
                m_uiPhaseTimer = 5500;
                break;
            case 31:
                if (m_pInstance)
                    m_pInstance->DoFaceSpeak(FACE_ABEDNEUM, SAY_EVENT_END_03_ABED);
                m_uiPhaseTimer = 8500;
                break;
            case 32:
                DoScriptText(SAY_EVENT_END_04, m_creature);
                m_uiPhaseTimer = 11500;
                break;
            case 33:
                if (m_pInstance)
                    m_pInstance->DoFaceSpeak(FACE_ABEDNEUM, SAY_EVENT_END_05_ABED);
                m_uiPhaseTimer = 11500;
                break;
            case 34:
                DoScriptText(SAY_EVENT_END_06, m_creature);
                m_uiPhaseTimer = 4500;
                break;
            case 35:
                if (m_pInstance)
                    m_pInstance->DoFaceSpeak(FACE_ABEDNEUM, SAY_EVENT_END_07_ABED);
                m_uiPhaseTimer = 22500;
                break;
            case 36:
                DoScriptText(SAY_EVENT_END_08, m_creature);
                m_uiPhaseTimer = 7500;
                break;
            case 37:
                if (m_pInstance)
                    m_pInstance->DoFaceSpeak(FACE_KADDRAK, SAY_EVENT_END_09_KADD);
                m_uiPhaseTimer = 18500;
                break;
            case 38:
                DoScriptText(SAY_EVENT_END_10, m_creature);
                m_uiPhaseTimer = 5500;
                break;
            case 39:
                if (m_pInstance)
                    m_pInstance->DoFaceSpeak(FACE_KADDRAK, SAY_EVENT_END_11_KADD);
                m_uiPhaseTimer = 20500;
                break;
            case 40:
                DoScriptText(SAY_EVENT_END_12, m_creature);
                m_uiPhaseTimer = 2500;
                break;
            case 41:
                if (m_pInstance)
                    m_pInstance->DoFaceSpeak(FACE_KADDRAK, SAY_EVENT_END_13_KADD);
                m_uiPhaseTimer = 19500;
                break;
            case 42:
                DoScriptText(SAY_EVENT_END_14, m_creature);
                m_uiPhaseTimer = 10500;
                break;
            case 43:
                if (m_pInstance)
                    m_pInstance->DoFaceSpeak(FACE_MARNAK, SAY_EVENT_END_15_MARN);
                m_uiPhaseTimer = 6500;
                break;
            case 44:
                DoScriptText(SAY_EVENT_END_16, m_creature);
                m_uiPhaseTimer = 6500;
                break;
            case 45:
                if (m_pInstance)
                    m_pInstance->DoFaceSpeak(FACE_MARNAK, SAY_EVENT_END_17_MARN);
                m_uiPhaseTimer = 25500;
                break;
            case 46:
                DoScriptText(SAY_EVENT_END_18, m_creature);
                m_uiPhaseTimer = 23500;
                break;
            case 47:
                if (m_pInstance)
                    m_pInstance->DoFaceSpeak(FACE_MARNAK, SAY_EVENT_END_19_MARN);
                m_uiPhaseTimer = 3500;
                break;
            case 48:
                DoScriptText(SAY_EVENT_END_20, m_creature);
                m_uiPhaseTimer = 8500;
                break;
            case 49:
                if (m_pInstance)
                    m_pInstance->DoFaceSpeak(FACE_ABEDNEUM, SAY_EVENT_END_21_ABED);
                m_uiPhaseTimer = 5500;
                break;
            case 50:
            {
                if (m_pInstance)
                {
                    m_pInstance->DoUseDoorOrButton(GO_TRIBUNAL_FLOOR);
                    m_pInstance->SetData(TYPE_TRIBUNAL, DONE);
                }

                // Should cast spell 59046 (doesn't exist in client dbc), criterias are ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET

                Player* pPlayer = GetPlayerForEscort();
                if (pPlayer)
                    pPlayer->GroupEventHappens(QUEST_HALLS_OF_STONE, m_creature);
                DoCastSpellIfCan(m_creature, SPELL_ACHIEVEMENT_CHECK, CAST_TRIGGERED);

                m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
                m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);

                m_uiPhaseTimer = 180000;
                break;
            }
            case 51:
                SetEscortPaused(false);
                break;
            }
            ++m_uiStep;
        }
        else if (m_uiPhaseTimer)
            m_uiPhaseTimer -= uiDiff;

        if (!m_bIsLowHP && m_creature->GetHealthPercent() < 30)
        {
            DoScriptText(SAY_LOW_HEALTH, m_creature);
            m_bIsLowHP = true;
        }
        else if (m_bIsLowHP && m_creature->GetHealthPercent() > 30)
            m_bIsLowHP = false;

        // No Combat abilities needed here
        if (!m_creature->SelectHostileTarget() || !m_creature->getVictim())
            return;
    }
Пример #4
0
    void UpdateEscortAI(const uint32 uiDiff)
    {
        if (uiPhaseTimer <= uiDiff)
        {
            switch (uiStep)
            {
                case 1:
                    if (pInstance)
                    {
                        if (pInstance->GetData(DATA_BRANN_EVENT) != NOT_STARTED)
                            return;
                        pInstance->SetData(DATA_BRANN_EVENT, IN_PROGRESS);
                    }
                    bIsBattle = false;
                    DoScriptText(SAY_ESCORT_START, m_creature);
                    SetRun(true);
                    JumpToNextStep(0);
                    break;
                case 3:
                    SetEscortPaused(false);
                    JumpToNextStep(0);
                    break;
                case 5:
                    if (pInstance)
                        if (Creature* pTemp = (Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_ABEDNEUM))))
                            DoScriptText(SAY_EVENT_INTRO_3_ABED, pTemp);
                        JumpToNextStep(8500);
                    break;
                case 6:
                    DoScriptText(SAY_EVENT_A_1, m_creature);
                    JumpToNextStep(6500);
                    break;
                case 7:
                    if (pInstance)
                        if (Creature* pTemp = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_KADDRAK)))
                            DoScriptText(SAY_EVENT_A_2_KADD, pTemp);
                        JumpToNextStep(12500);
                    break;
                case 8:
                    DoScriptText(SAY_EVENT_A_3, m_creature);
                    if (pInstance)
                        pInstance->HandleGameObject(pInstance->GetData64(DATA_GO_KADDRAK),true);
                    if (Creature* pTemp = Unit::GetCreature(*m_creature, uiControllerGUID))
                        CAST_AI(mob_tribuna_controllerAI, pTemp->AI())->bKaddrakActivated = true;
                    JumpToNextStep(5000);
                    break;
                case 9:
                    m_creature->SetReactState(REACT_PASSIVE);
                    SpawnDwarf(1);
                    JumpToNextStep(20000);
                    break;
                case 10:
                    DoScriptText(SAY_EVENT_B_1, m_creature);
                    JumpToNextStep(6000);
                    break;
                case 11:
                    if (pInstance)
                        if (Creature* pTemp = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_MARNAK)))
                            DoScriptText(SAY_EVENT_B_2_MARN, pTemp);
                    SpawnDwarf(1);
                    JumpToNextStep(20000);
                    break;
                case 12:
                    DoScriptText(SAY_EVENT_B_3, m_creature);
                    if (pInstance)
                        pInstance->HandleGameObject(pInstance->GetData64(DATA_GO_MARNAK),true);
                    if (Creature* pTemp = Unit::GetCreature(*m_creature, uiControllerGUID))
                        CAST_AI(mob_tribuna_controllerAI, pTemp->AI())->bMarnakActivated = true;
                    JumpToNextStep(10000);
                    break;
                case 13:
                    SpawnDwarf(1);
                    JumpToNextStep(10000);
                    break;
                case 14:
                    SpawnDwarf(2);
                    JumpToNextStep(20000);
                    break;
                case 15:
                    DoScriptText(SAY_EVENT_C_1, m_creature);
                    SpawnDwarf(1);
                    JumpToNextStep(10000);
                    break;
                case 16:
                    SpawnDwarf(2);
                    JumpToNextStep(20000);
                    break;
                case 17:
                    if (pInstance)
                        if (Creature* pTemp = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_ABEDNEUM)))
                            DoScriptText(SAY_EVENT_C_2_ABED, pTemp);
                        SpawnDwarf(1);
                    JumpToNextStep(20000);
                    break;
                case 18:
                    DoScriptText(SAY_EVENT_C_3, m_creature);
                    if (pInstance)
                        pInstance->HandleGameObject(pInstance->GetData64(DATA_GO_ABEDNEUM),true);
                    if (Creature* pTemp = Unit::GetCreature(*m_creature, uiControllerGUID))
                        CAST_AI(mob_tribuna_controllerAI, pTemp->AI())->bAbedneumActivated = true;
                    JumpToNextStep(5000);
                    break;
                case 19:
                    SpawnDwarf(2);
                    JumpToNextStep(10000);
                    break;
                case 20:
                    SpawnDwarf(1);
                    JumpToNextStep(15000);
                    break;
                case 21:
                    DoScriptText(SAY_EVENT_D_1, m_creature);
                    SpawnDwarf(3);
                    JumpToNextStep(20000);
                    break;
                case 22:
                    if (pInstance)
                        if (Creature* pTemp = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_ABEDNEUM)))
                            DoScriptText(SAY_EVENT_D_2_ABED, pTemp);
                    SpawnDwarf(1);
                    JumpToNextStep(5000);
                    break;
                case 23:
                    SpawnDwarf(2);
                    JumpToNextStep(15000);
                    break;
                case 24:
                    DoScriptText(SAY_EVENT_D_3, m_creature);
                    SpawnDwarf(3);
                    JumpToNextStep(5000);
                    break;
                case 25:
                    SpawnDwarf(1);
                    JumpToNextStep(5000);
                    break;
                case 26:
                    SpawnDwarf(2);
                    JumpToNextStep(10000);
                    break;
                case 27:
                    if (pInstance)
                        if (Creature* pTemp = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_ABEDNEUM)))
                            DoScriptText(SAY_EVENT_D_4_ABED, pTemp);
                    SpawnDwarf(1);
                    JumpToNextStep(10000);
                    break;
                case 28:
                    m_creature->SetReactState(REACT_DEFENSIVE);
                    DoScriptText(SAY_EVENT_END_01, m_creature);
                    m_creature->SetStandState(UNIT_STAND_STATE_STAND);
                    if (pInstance)
                        pInstance->HandleGameObject(pInstance->GetData64(DATA_GO_SKY_FLOOR),true);
                    if (Creature* pTemp = Unit::GetCreature(*m_creature, uiControllerGUID))
                        pTemp->DealDamage(pTemp, pTemp->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
                    bIsBattle = true;
                    SetEscortPaused(false);
                    JumpToNextStep(6500);
                    break;
                case 29:
                    DoScriptText(SAY_EVENT_END_02, m_creature);
                    if (pInstance)
                    {
                        pInstance->SetData(DATA_BRANN_EVENT, DONE);

                        // Achievement criteria is with spell 59046 which does not exist.
                        // There is thus no way it can be given by casting the spell on the players.
                        pInstance->DoUpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET, 59046);

                        if (!bHasBeenDamaged)
                            pInstance->DoCompleteAchievement(ACHIEV_BRANN_SPANKIN_NEW);
                    }
                    
                    JumpToNextStep(5500);
                    break;
                case 30:
                    if (pInstance)
                        if (Creature* pTemp = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_ABEDNEUM)))
                            DoScriptText(SAY_EVENT_END_03_ABED, pTemp);
                    JumpToNextStep(8500);
                    break;
                case 31:
                    DoScriptText(SAY_EVENT_END_04, m_creature);
                    JumpToNextStep(11500);
                    break;
                case 32:
                    if (pInstance)
                        if (Creature* pTemp = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_ABEDNEUM)))
                            DoScriptText(SAY_EVENT_END_05_ABED, pTemp);
                        JumpToNextStep(11500);
                    break;
                case 33:
                    DoScriptText(SAY_EVENT_END_06, m_creature);
                    JumpToNextStep(4500);
                    break;
                case 34:
                    if (pInstance)
                        if (Creature* pTemp = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_ABEDNEUM)))
                            DoScriptText(SAY_EVENT_END_07_ABED, pTemp);
                        JumpToNextStep(22500);
                    break;
                case 35:
                    DoScriptText(SAY_EVENT_END_08, m_creature);
                    JumpToNextStep(7500);
                    break;
                case 36:
                    if (pInstance)
                        if (Creature* pTemp = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_KADDRAK)))
                            DoScriptText(SAY_EVENT_END_09_KADD, pTemp);
                    JumpToNextStep(18500);
                    break;
                case 37:
                    DoScriptText(SAY_EVENT_END_10, m_creature);
                    JumpToNextStep(5500);
                    break;
                case 38:
                    if (pInstance)
                        if (Creature* pTemp = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_KADDRAK)))
                            DoScriptText(SAY_EVENT_END_11_KADD, pTemp);
                        JumpToNextStep(20500);
                    break;
                case 39:
                    DoScriptText(SAY_EVENT_END_12, m_creature);
                    JumpToNextStep(2500);
                    break;
                case 40:
                    if (pInstance)
                        if (Creature* pTemp = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_KADDRAK)))
                            DoScriptText(SAY_EVENT_END_13_KADD, pTemp);
                    JumpToNextStep(19500);
                    break;
                case 41:
                    DoScriptText(SAY_EVENT_END_14, m_creature);
                    JumpToNextStep(10500);
                    break;
                case 42:
                    if (pInstance)
                        if (Creature* pTemp = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_MARNAK)))
                            DoScriptText(SAY_EVENT_END_15_MARN, pTemp);
                        JumpToNextStep(6500);
                    break;
                case 43:
                    DoScriptText(SAY_EVENT_END_16, m_creature);
                    JumpToNextStep(6500);
                    break;
                case 44:
                    if (pInstance)
                        if (Creature* pTemp = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_MARNAK)))
                            DoScriptText(SAY_EVENT_END_17_MARN, pTemp);
                        JumpToNextStep(25500);
                    break;
                case 45:
                    DoScriptText(SAY_EVENT_END_18, m_creature);
                    JumpToNextStep(23500);
                    break;
                case 46:
                    if (pInstance)
                        if (Creature* pTemp = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_MARNAK)))
                            DoScriptText(SAY_EVENT_END_19_MARN, pTemp);
                        JumpToNextStep(3500);
                    break;
                case 47:
                    DoScriptText(SAY_EVENT_END_20, m_creature);
                    JumpToNextStep(8500);
                    break;
                case 48:
                    if (pInstance)
                        if (Creature* pTemp = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_ABEDNEUM)))
                            DoScriptText(SAY_EVENT_END_21_ABED, pTemp);
                        JumpToNextStep(5500);
                    break;
                case 49:
                {
                    if (pInstance)
                    {
                        pInstance->HandleGameObject(pInstance->GetData64(DATA_GO_KADDRAK),false);
                        pInstance->HandleGameObject(pInstance->GetData64(DATA_GO_MARNAK),false);
                        pInstance->HandleGameObject(pInstance->GetData64(DATA_GO_ABEDNEUM),false);
                        pInstance->HandleGameObject(pInstance->GetData64(DATA_GO_SKY_FLOOR),false);
                    }
                    Player* pPlayer = GetPlayerForEscort();
                    if (pPlayer)
                        pPlayer->GroupEventHappens(QUEST_HALLS_OF_STONE, m_creature);
                    m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
                    JumpToNextStep(180000);
                    break;
                }
                case 50:
                    SetEscortPaused(false);
                    break;
            }
        } else uiPhaseTimer -= uiDiff;

        if (!bIsLowHP && HealthBelowPct(30))
        {
            DoScriptText(SAY_LOW_HEALTH, m_creature);
            bIsLowHP = true;
        } 
        else if (bIsLowHP && !HealthBelowPct(30))
            bIsLowHP = false;

        if (!UpdateVictim())
            return;

        DoMeleeAttackIfReady();
    }
Пример #5
0
        void UpdateEscortAI(const uint32 uiDiff)
        {
            if (uiPhaseTimer <= uiDiff)
            {
                switch (uiStep)
                {
                    case 1:
                        if (instance)
                        {
                            if (instance->GetData(DATA_BRANN_EVENT) != NOT_STARTED)
                                return;
                            instance->SetData(DATA_BRANN_EVENT, IN_PROGRESS);
                        }
                        bIsBattle = false;
                        DoScriptText(SAY_ESCORT_START, me);
                        SetRun(true);
                        JumpToNextStep(0);
                        break;
                    case 3:
                        SetEscortPaused(false);
                        JumpToNextStep(0);
                        break;
                    case 5:
                        if (instance)
                            if (Creature* temp = (Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM))))
                                DoScriptText(SAY_EVENT_INTRO_3_ABED, temp);
                            JumpToNextStep(8500);
                        break;
                    case 6:
                        DoScriptText(SAY_EVENT_A_1, me);
                        JumpToNextStep(6500);
                        break;
                    case 7:
                        if (instance)
                            if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_KADDRAK)))
                                DoScriptText(SAY_EVENT_A_2_KADD, temp);
                            JumpToNextStep(12500);
                        break;
                    case 8:
                        DoScriptText(SAY_EVENT_A_3, me);
                        if (instance)
                            if (GameObject* goKaddrak = instance->instance->GetGameObject(instance->GetData64(DATA_GO_KADDRAK)))
                            {
                                goKaddrak->SetGoAnimProgress(0);
                                goKaddrak->SendCustomAnim(goKaddrak->GetGoAnimProgress());
                            }

                        if (Creature* temp = Unit::GetCreature(*me, uiControllerGUID))
                            CAST_AI(mob_tribuna_controller::mob_tribuna_controllerAI, temp->AI())->bKaddrakActivated = true;
                        JumpToNextStep(5000);
                        break;
                    case 9:
                        me->SetReactState(REACT_PASSIVE);
                        SpawnDwarf(1);
                        JumpToNextStep(20000);
                        break;
                    case 10:
                        DoScriptText(SAY_EVENT_B_1, me);
                        JumpToNextStep(6000);
                        break;
                    case 11:
                        if (instance)
                            if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_MARNAK)))
                                DoScriptText(SAY_EVENT_B_2_MARN, temp);
                        SpawnDwarf(1);
                        JumpToNextStep(20000);
                        break;
                    case 12:
                        DoScriptText(SAY_EVENT_B_3, me);
                        if (instance)
                            if (GameObject* goMarnak = instance->instance->GetGameObject(instance->GetData64(DATA_GO_MARNAK)))
                            {
                                goMarnak->SetGoAnimProgress(0);
                                goMarnak->SendCustomAnim(goMarnak->GetGoAnimProgress());
                            }

                        if (Creature* temp = Unit::GetCreature(*me, uiControllerGUID))
                            CAST_AI(mob_tribuna_controller::mob_tribuna_controllerAI, temp->AI())->bMarnakActivated = true;
                        JumpToNextStep(10000);
                        break;
                    case 13:
                        SpawnDwarf(1);
                        JumpToNextStep(10000);
                        break;
                    case 14:
                        SpawnDwarf(2);
                        JumpToNextStep(20000);
                        break;
                    case 15:
                        DoScriptText(SAY_EVENT_C_1, me);
                        SpawnDwarf(1);
                        JumpToNextStep(10000);
                        break;
                    case 16:
                        SpawnDwarf(2);
                        JumpToNextStep(20000);
                        break;
                    case 17:
                        if (instance)
                            if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
                                DoScriptText(SAY_EVENT_C_2_ABED, temp);
                            SpawnDwarf(1);
                        JumpToNextStep(20000);
                        break;
                    case 18:
                        DoScriptText(SAY_EVENT_C_3, me);
                        if (instance)
                            if (GameObject* goAbedneum = instance->instance->GetGameObject(instance->GetData64(DATA_GO_ABEDNEUM)))
                            {
                                goAbedneum->SetGoAnimProgress(0);
                                goAbedneum->SendCustomAnim(goAbedneum->GetGoAnimProgress());
                            }

                        if (Creature* temp = Unit::GetCreature(*me, uiControllerGUID))
                            CAST_AI(mob_tribuna_controller::mob_tribuna_controllerAI, temp->AI())->bAbedneumActivated = true;
                        JumpToNextStep(5000);
                        break;
                    case 19:
                        SpawnDwarf(2);
                        JumpToNextStep(10000);
                        break;
                    case 20:
                        SpawnDwarf(1);
                        JumpToNextStep(15000);
                        break;
                    case 21:
                        DoScriptText(SAY_EVENT_D_1, me);
                        SpawnDwarf(3);
                        JumpToNextStep(20000);
                        break;
                    case 22:
                        if (instance)
                            if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
                                DoScriptText(SAY_EVENT_D_2_ABED, temp);
                        SpawnDwarf(1);
                        JumpToNextStep(5000);
                        break;
                    case 23:
                        SpawnDwarf(2);
                        JumpToNextStep(15000);
                        break;
                    case 24:
                        DoScriptText(SAY_EVENT_D_3, me);
                        SpawnDwarf(3);
                        JumpToNextStep(5000);
                        break;
                    case 25:
                        SpawnDwarf(1);
                        JumpToNextStep(5000);
                        break;
                    case 26:
                        SpawnDwarf(2);
                        JumpToNextStep(10000);
                        break;
                    case 27:
                        if (instance)
                            if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
                                DoScriptText(SAY_EVENT_D_4_ABED, temp);
                        SpawnDwarf(1);
                        JumpToNextStep(10000);
                        break;
                    case 28:
                        me->SetReactState(REACT_DEFENSIVE);
                        DoScriptText(SAY_EVENT_END_01, me);
                        me->SetStandState(UNIT_STAND_STATE_STAND);

                        DespawnDwarf();

                        if (instance)
                        {
                            instance->HandleGameObject(instance->GetData64(DATA_GO_SKY_FLOOR), true);
                            instance->HandleGameObject(instance->GetData64(DATA_GO_KADDRAK), true);
                            instance->HandleGameObject(instance->GetData64(DATA_GO_MARNAK), true);
                            instance->HandleGameObject(instance->GetData64(DATA_GO_ABEDNEUM), true);
                        }

                        if (Creature* temp = Unit::GetCreature(*me, uiControllerGUID))
                        {
                            CAST_AI(mob_tribuna_controller::mob_tribuna_controllerAI, temp->AI())->activatedByBrann = false;
                            temp->DealDamage(temp, temp->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
                        }
                        bIsBattle = true;
                        SetEscortPaused(false);
                        JumpToNextStep(6500);
                        break;
                    case 29:
                    {
                        DoScriptText(SAY_EVENT_END_02, me);
                        if (instance)
                        {
                            instance->SetData(DATA_BRANN_EVENT, DONE);

                            // Achievement criteria is with spell 59046 which does not exist.
                            // There is thus no way it can be given by casting the spell on the players.
                            instance->UpdateEncounterState(ENCOUNTER_CREDIT_CAST_SPELL, 59046, me);
                        }

                        me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
                        me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);

                        Player* player = GetPlayerForEscort();
                        if (player)
                            player->GroupEventHappens(QUEST_HALLS_OF_STONE, me);

                        JumpToNextStep(5500);
                        break;
                    }
                    case 30:
                        if (instance)
                            if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
                                DoScriptText(SAY_EVENT_END_03_ABED, temp);
                        JumpToNextStep(8500);
                        break;
                    case 31:
                        DoScriptText(SAY_EVENT_END_04, me);
                        JumpToNextStep(11500);
                        break;
                    case 32:
                        if (instance)
                            if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
                                DoScriptText(SAY_EVENT_END_05_ABED, temp);
                            JumpToNextStep(11500);
                        break;
                    case 33:
                        DoScriptText(SAY_EVENT_END_06, me);
                        JumpToNextStep(4500);
                        break;
                    case 34:
                        if (instance)
                            if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
                                DoScriptText(SAY_EVENT_END_07_ABED, temp);
                            JumpToNextStep(22500);
                        break;
                    case 35:
                        DoScriptText(SAY_EVENT_END_08, me);
                        JumpToNextStep(7500);
                        break;
                    case 36:
                        if (instance)
                            if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_KADDRAK)))
                                DoScriptText(SAY_EVENT_END_09_KADD, temp);
                        JumpToNextStep(18500);
                        break;
                    case 37:
                        DoScriptText(SAY_EVENT_END_10, me);
                        JumpToNextStep(5500);
                        break;
                    case 38:
                        if (instance)
                            if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_KADDRAK)))
                                DoScriptText(SAY_EVENT_END_11_KADD, temp);
                            JumpToNextStep(20500);
                        break;
                    case 39:
                        DoScriptText(SAY_EVENT_END_12, me);
                        JumpToNextStep(2500);
                        break;
                    case 40:
                        if (instance)
                            if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_KADDRAK)))
                                DoScriptText(SAY_EVENT_END_13_KADD, temp);
                        JumpToNextStep(19500);
                        break;
                    case 41:
                        DoScriptText(SAY_EVENT_END_14, me);
                        JumpToNextStep(10500);
                        break;
                    case 42:
                        if (instance)
                            if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_MARNAK)))
                                DoScriptText(SAY_EVENT_END_15_MARN, temp);
                            JumpToNextStep(6500);
                        break;
                    case 43:
                        DoScriptText(SAY_EVENT_END_16, me);
                        JumpToNextStep(6500);
                        break;
                    case 44:
                        if (instance)
                            if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_MARNAK)))
                                DoScriptText(SAY_EVENT_END_17_MARN, temp);
                            JumpToNextStep(25500);
                        break;
                    case 45:
                        DoScriptText(SAY_EVENT_END_18, me);
                        JumpToNextStep(23500);
                        break;
                    case 46:
                        if (instance)
                            if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_MARNAK)))
                                DoScriptText(SAY_EVENT_END_19_MARN, temp);
                            JumpToNextStep(3500);
                        break;
                    case 47:
                        DoScriptText(SAY_EVENT_END_20, me);
                        JumpToNextStep(8500);
                        break;
                    case 48:
                        if (instance)
                            if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
                                DoScriptText(SAY_EVENT_END_21_ABED, temp);
                            JumpToNextStep(5500);
                        break;
                    case 49:
                    {
                        if (instance)
                        {
                            instance->HandleGameObject(instance->GetData64(DATA_GO_TRIBUNAL_CONSOLE), false);
                            instance->HandleGameObject(instance->GetData64(DATA_GO_KADDRAK), false);
                            instance->HandleGameObject(instance->GetData64(DATA_GO_MARNAK), false);
                            instance->HandleGameObject(instance->GetData64(DATA_GO_ABEDNEUM), false);
                            instance->HandleGameObject(instance->GetData64(DATA_GO_SKY_FLOOR), false);
                        }
                        JumpToNextStep(180000);
                        break;
                    }
                    case 50:
                        SetEscortPaused(false);
                        break;
                }
            } else uiPhaseTimer -= uiDiff;

            if (!bIsLowHP && HealthBelowPct(30))
            {
                DoScriptText(SAY_LOW_HEALTH, me);
                bIsLowHP = true;
            }
            else if (bIsLowHP && !HealthBelowPct(30))
                bIsLowHP = false;

            if (!UpdateVictim())
                return;

            DoMeleeAttackIfReady();
        }