Пример #1
0
 void WaypointReached(uint32 i)
 {
     Player* pPlayer = GetPlayerForEscort();
     if (!pPlayer)
         return;
     switch (i)
     {
         case 9:
             if (Creature *Mrfloppy = GetClosestCreatureWithEntry(me, NPC_MRFLOPPY, 100.0f))
                 MrfloppyGUID = Mrfloppy->GetGUID();
             break;
         case 10:
             if (Unit::GetCreature(*me, MrfloppyGUID))
             {
                 DoScriptText(SAY_WORGHAGGRO1, me);
                 me->SummonCreature(NPC_HUNGRY_WORG, me->GetPositionX()+5, me->GetPositionY()+2, me->GetPositionZ()+1, 3.229f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 120000);
             }
             break;
         case 11:
             if (Creature *Mrfloppy = Unit::GetCreature(*me, MrfloppyGUID))
                 Mrfloppy->GetMotionMaster()->MoveFollow(me, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE);
             break;
         case 17:
             if (Creature *Mrfloppy = Unit::GetCreature(*me, MrfloppyGUID))
                 Mrfloppy->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ());
             DoScriptText(SAY_WORGRAGGRO3, me);
             if (Creature *RWORG = me->SummonCreature(NPC_RAVENOUS_WORG, me->GetPositionX()+10, me->GetPositionY()+8, me->GetPositionZ()+2, 3.229f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 120000))
             {
                 RWORG->setFaction(35);
                 RWORGGUID = RWORG->GetGUID();
             }
             break;
         case 18:
             if (Creature *Mrfloppy = Unit::GetCreature(*me, MrfloppyGUID))
             {
                 if (Creature *RWORG = Unit::GetCreature(*me, RWORGGUID))
                     RWORG->GetMotionMaster()->MovePoint(0, Mrfloppy->GetPositionX(), Mrfloppy->GetPositionY(), Mrfloppy->GetPositionZ());
                 DoCast(Mrfloppy, SPELL_MRFLOPPY);
             }
             break;
         case 19:
             if (Creature *Mrfloppy = Unit::GetCreature(*me, MrfloppyGUID))
             {
                 if (Mrfloppy->HasAura(SPELL_MRFLOPPY, 0))
                 {
                     if (Creature *RWORG = Unit::GetCreature(*me, RWORGGUID))
                         Mrfloppy->EnterVehicle(RWORG);
                 }
             }
             break;
         case 20:
             if (Creature *RWORG = Unit::GetCreature(*me, RWORGGUID))
                 RWORG->HandleEmoteCommand(34);
             break;
         case 21:
             if (Creature *Mrfloppy = Unit::GetCreature(*me, MrfloppyGUID))
             {
                 if (Creature *RWORG = Unit::GetCreature(*me, RWORGGUID))
                 {
                     RWORG->Kill(Mrfloppy);
                     Mrfloppy->ExitVehicle();
                     RWORG->setFaction(14);
                     RWORG->GetMotionMaster()->MovePoint(0, RWORG->GetPositionX()+10, RWORG->GetPositionY()+80, RWORG->GetPositionZ());
                     DoScriptText(SAY_VICTORY2, me);
                 }
             }
             break;
         case 22:
             if (Creature *Mrfloppy = Unit::GetCreature(*me, MrfloppyGUID))
             {
                 if (Mrfloppy->isDead())
                 {
                     if (Creature *RWORG = Unit::GetCreature(*me, RWORGGUID))
                         RWORG->DisappearAndDie();
                     me->GetMotionMaster()->MovePoint(0, Mrfloppy->GetPositionX(), Mrfloppy->GetPositionY(), Mrfloppy->GetPositionZ());
                     Mrfloppy->setDeathState(ALIVE);
                     Mrfloppy->GetMotionMaster()->MoveFollow(me, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE);
                     DoScriptText(SAY_VICTORY3, me);
                 }
             }
             break;
         case 24:
             if (pPlayer)
             {
                 Completed = true;
                 pPlayer->GroupEventHappens(QUEST_PERILOUS_ADVENTURE, me);
                 DoScriptText(SAY_QUEST_COMPLETE, me, pPlayer);
             }
             me->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING);
             break;
         case 25:
             DoScriptText(SAY_VICTORY4, me);
             break;
         case 27:
             me->DisappearAndDie();
             if (Creature *Mrfloppy = Unit::GetCreature(*me, MrfloppyGUID))
                 Mrfloppy->DisappearAndDie();
             break;
     }
 }
Пример #2
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();
        }
        void WaypointReached(uint32 waypointId) override
        {
            Player* player = GetPlayerForEscort();
            if (!player)
                return;

            switch (waypointId)
            {
                case 9:
                    if (Creature* Mrfloppy = GetClosestCreatureWithEntry(me, NPC_MRFLOPPY, 100.0f))
                        _mrfloppyGUID = Mrfloppy->GetGUID();
                    break;
                case 10:
                    if (ObjectAccessor::GetCreature(*me, _mrfloppyGUID))
                    {
                        Talk(SAY_WORGHAGGRO1);
                        me->SummonCreature(NPC_HUNGRY_WORG, me->GetPositionX()+5, me->GetPositionY()+2, me->GetPositionZ()+1, 3.229f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 120000);
                    }
                    break;
                case 11:
                    if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID))
                        Mrfloppy->GetMotionMaster()->MoveFollow(me, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE);
                    break;
                case 17:
                    if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID))
                        Mrfloppy->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ());
                    Talk(SAY_WORGRAGGRO3);
                    if (Creature* RWORG = me->SummonCreature(NPC_RAVENOUS_WORG, me->GetPositionX()+10, me->GetPositionY()+8, me->GetPositionZ()+2, 3.229f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 120000))
                    {
                        RWORG->setFaction(35);
                        _RavenousworgGUID = RWORG->GetGUID();
                    }
                    break;
                case 18:
                    if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID))
                    {
                        if (Creature* RWORG = ObjectAccessor::GetCreature(*me, _RavenousworgGUID))
                            RWORG->GetMotionMaster()->MovePoint(0, Mrfloppy->GetPositionX(), Mrfloppy->GetPositionY(), Mrfloppy->GetPositionZ());
                        DoCast(Mrfloppy, SPELL_MRFLOPPY);
                    }
                    break;
                case 19:
                    if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID))
                    {
                        if (Mrfloppy->HasAura(SPELL_MRFLOPPY))
                        {
                            if (Creature* RWORG = ObjectAccessor::GetCreature(*me, _RavenousworgGUID))
                                Mrfloppy->EnterVehicle(RWORG);
                        }
                    }
                    break;
                case 20:
                    if (Creature* RWORG = ObjectAccessor::GetCreature(*me, _RavenousworgGUID))
                        RWORG->HandleEmoteCommand(34);
                    break;
                case 21:
                    if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID))
                    {
                        if (Creature* RWORG = ObjectAccessor::GetCreature(*me, _RavenousworgGUID))
                        {
                            RWORG->Kill(Mrfloppy);
                            Mrfloppy->ExitVehicle();
                            RWORG->setFaction(14);
                            RWORG->GetMotionMaster()->MovePoint(0, RWORG->GetPositionX()+10, RWORG->GetPositionY()+80, RWORG->GetPositionZ());
                            Talk(SAY_VICTORY2);
                        }
                    }
                    break;
                case 22:
                    if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID))
                    {
                        if (Mrfloppy->isDead())
                        {
                            if (Creature* RWORG = ObjectAccessor::GetCreature(*me, _RavenousworgGUID))
                                RWORG->DisappearAndDie();
                            me->GetMotionMaster()->MovePoint(0, Mrfloppy->GetPositionX(), Mrfloppy->GetPositionY(), Mrfloppy->GetPositionZ());
                            Mrfloppy->setDeathState(ALIVE);
                            Mrfloppy->GetMotionMaster()->MoveFollow(me, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE);
                            Talk(SAY_VICTORY3);
                        }
                    }
                    break;
                case 24:
                    if (player)
                    {
                        player->GroupEventHappens(QUEST_PERILOUS_ADVENTURE, me);
                        Talk(SAY_QUEST_COMPLETE, player);
                    }
                    me->SetWalk(false);
                    break;
                case 25:
                    Talk(SAY_VICTORY4);
                    break;
                case 27:
                    me->DisappearAndDie();
                    if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID))
                        Mrfloppy->DisappearAndDie();
                    break;
            }
        }
Пример #4
0
        void UpdateAI(uint32 diff)
        {
            if (speechCounter)
            {
                if (speechTimer <= diff)
                {
                    Player* player = Unit::GetPlayer(*me, playerGUID);
                    if (!player)
                    {
                        EnterEvadeMode();
                        return;
                    }

                    switch (speechCounter)
                    {
                        case 1:
                            Talk(SAY_PERSUADED1);
                            speechTimer = 8000;
                            break;

                        case 2:
                            Talk(SAY_PERSUADED2);
                            speechTimer = 8000;
                            break;

                        case 3:
                            Talk(SAY_PERSUADED3);
                            speechTimer = 8000;
                            break;

                        case 4:
                            Talk(SAY_PERSUADED4);
                            speechTimer = 8000;
                            break;

                        case 5:
                            sCreatureTextMgr->SendChat(me, SAY_PERSUADED5, 0, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_NORMAL, 0, TEAM_OTHER, false, player);
                            speechTimer = 8000;
                            break;

                        case 6:
                            Talk(SAY_PERSUADED6);
                            player->Kill(me);
                            speechCounter = 0;
                            player->GroupEventHappens(QUEST_HOW_TO_WIN_FRIENDS, me);
                            return;
                    }

                    ++speechCounter;
                    DoCastAOE(SPELL_THREAT_PULSE, true);

                } else
                    speechTimer -= diff;

                return;
            }

            if (!UpdateVictim())
                return;

            DoMeleeAttackIfReady();
        }
Пример #5
0
    void WaypointReached(uint32 i)
    {
        Player* pPlayer = GetPlayerForEscort();

        if (!pPlayer)
            return;

        switch(i)
        {
            case 23:
                DoScriptText(SAY_OOX_AMBUSH, me);
                break;
            case 24:
                for (uint8 i = 0; i < 3; ++i)
                {
                    float x, y, z;
                    switch (i)
                    {
                        case 0:
                            me->GetNearPoint(x, y, z, 0.0f, 15.0f, 0.0f);
                            me->SummonCreature(SPAWN_FIRST, x, y, z, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
                            break;
                        case 1:
                            me->GetNearPoint(x, y, z, 0.0f, 15.0f, 2.0f);
                            me->SummonCreature(SPAWN_FIRST, x, y, z, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
                            break;
                        case 2:
                            me->GetNearPoint(x, y, z, 0.0f, 15.0f, 4.0f);
                            me->SummonCreature(SPAWN_FIRST, x, y, z, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
                            break;
                    }
                }
                break;
            case 57:
                DoScriptText(SAY_OOX_AMBUSH, me);
                break;
            case 58:
                for (uint8 i = 0; i < 3; ++i)
                {
                    float x, y, z;
                    switch (i)
                    {
                        case 0:
                            me->GetNearPoint(x, y, z, 0.0f, 15.0f, 0.0f);
                            me->SummonCreature(SPAWN_SECOND_1, x, y, z, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
                            break;
                        case 1:
                            me->GetNearPoint(x, y, z, 0.0f, 15.0f, 2.0f);
                            me->SummonCreature(SPAWN_SECOND_2, x, y, z, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
                            break;
                        case 2:
                            me->GetNearPoint(x, y, z, 0.0f, 15.0f, 4.0f);
                            me->SummonCreature(SPAWN_SECOND_2, x, y, z, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
                            break;
                    }
                }
                break;
            case 88:
                if (pPlayer)
                {
                    DoScriptText(SAY_OOX_END, me);
                    pPlayer->GroupEventHappens(Q_OOX17, me);
                }
                break;
        }
    }
Пример #6
0
        void WaypointReached(uint32 i) override
        {
            Player* pPlayer = GetPlayerForEscort();

            if (!pPlayer)
            {
                return;
            }

            switch (i)
            {
            case 0:
                DoScriptText(SAY_START_2, m_creature, pPlayer);
                break;
            case 13:
#if defined (WOTLK) || defined (CATA)
                DoScriptText(SAY_END, m_creature, pPlayer);
#endif
#if defined (CLASSIC) || defined (TBC)
                switch (urand(0, 1))
                {
                case 0:
                    DoScriptText(SAY_END, m_creature, pPlayer);
                    break;
                case 1:
                    DoScriptText(SAY_PROGRESS, m_creature);
                    break;
                }
#endif
                pPlayer->GroupEventHappens(QUEST_ERLAND, m_creature);
#if defined (CLASSIC) || defined (TBC)
                m_creature->SetWalk(false);
#endif
                break;
#if defined (WOTLK) || defined (CATA)
            case 14:
                if (Creature* pRane = GetClosestCreatureWithEntry(m_creature, NPC_RANE, 45.0f))
                    DoScriptText(SAY_RANE, pRane, m_creature);
                break;
            case 15:
                DoScriptText(SAY_RANE_REPLY, m_creature);
                break;
#endif
            case 16:
#if defined (WOTLK) || defined (CATA)
                DoScriptText(SAY_CHECK_NEXT, m_creature);
#endif
#if defined (CLASSIC) || defined (TBC)
                m_creature->SetWalk(true);
                SetEscortPaused(true);
#endif
                break;
#if defined (WOTLK) || defined (CATA)
            case 24:
                DoScriptText(SAY_QUINN, m_creature);
                break;
#endif
            case 25:
#if defined (CLASSIC) || defined (TBC)
                SetEscortPaused(true);
#endif
#if defined (WOTLK) || defined (CATA)
                if (Creature* pQuinn = GetClosestCreatureWithEntry(m_creature, NPC_QUINN, 45.0f))
                    DoScriptText(SAY_QUINN_REPLY, pQuinn, m_creature);
#endif
                break;
#if defined (WOTLK) || defined (CATA)
            case 26:
                DoScriptText(SAY_BYE, m_creature);
                break;
#endif
            }
        }
Пример #7
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();
        }
Пример #8
0
void SmartAI::EndPath(bool fail)
{
    GetScript()->ProcessEventsFor(SMART_EVENT_WAYPOINT_ENDED, nullptr, mLastWP->id, GetScript()->GetPathId());

    RemoveEscortState(SMART_ESCORT_ESCORTING | SMART_ESCORT_PAUSED | SMART_ESCORT_RETURNING);
    mWayPoints = nullptr;
    mCurrentWPID = 0;
    mWPPauseTimer = 0;
    mLastWP = nullptr;

    if (mCanRepeatPath)
    {
        if (IsAIControlled())
            StartPath(mRun, GetScript()->GetPathId(), true);
    }
    else
        GetScript()->SetPathId(0);

    ObjectList* targets = GetScript()->GetTargetList(SMART_ESCORT_TARGETS);
    if (targets && mEscortQuestID)
    {
        if (targets->size() == 1 && GetScript()->IsPlayer((*targets->begin())))
        {
            Player* player = (*targets->begin())->ToPlayer();
            if (!fail && player->IsAtGroupRewardDistance(me) && !player->HasCorpse())
                player->GroupEventHappens(mEscortQuestID, me);

            if (fail && player->GetQuestStatus(mEscortQuestID) == QUEST_STATUS_INCOMPLETE)
                player->FailQuest(mEscortQuestID);

            if (Group* group = player->GetGroup())
            {
                for (GroupReference* groupRef = group->GetFirstMember(); groupRef != nullptr; groupRef = groupRef->next())
                {
                    Player* groupGuy = groupRef->GetSource();

                    if (!fail && groupGuy->IsAtGroupRewardDistance(me) && !groupGuy->HasCorpse())
                        groupGuy->AreaExploredOrEventHappens(mEscortQuestID);
                    if (fail && groupGuy->GetQuestStatus(mEscortQuestID) == QUEST_STATUS_INCOMPLETE)
                        groupGuy->FailQuest(mEscortQuestID);
                }
            }
        }
        else
        {
            for (ObjectList::iterator iter = targets->begin(); iter != targets->end(); ++iter)
            {
                if (GetScript()->IsPlayer((*iter)))
                {
                    Player* player = (*iter)->ToPlayer();
                    if (!fail && player->IsAtGroupRewardDistance(me) && !player->HasCorpse())
                        player->AreaExploredOrEventHappens(mEscortQuestID);
                    if (fail && player->GetQuestStatus(mEscortQuestID) == QUEST_STATUS_INCOMPLETE)
                        player->FailQuest(mEscortQuestID);
                }
            }
        }
    }
    if (mDespawnState == 1)
        StartDespawn();
}
Пример #9
0
 void WaypointReached(uint32 i)
 {
     Player* pPlayer = GetPlayerForEscort();
     if (!pPlayer)
         return;
     Creature* Godfrey = me->FindNearestCreature(NPC_GODFREY, 50, true);
     if (!Godfrey)
         return;  
     switch (i)
     {
         case 1:            
             DoScriptText(SAY_WP_1, me, Godfrey);
             me->SetUInt64Value(UNIT_FIELD_TARGET, Godfrey->GetGUID());
             me->HandleEmoteCommand(5);
             me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
             me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);            
             break;
         case 2:
             Godfrey->HandleEmoteCommand(434);
             DoScriptText(SAY_WP_2, me, Godfrey);
             me->HandleEmoteCommand(15);
             break;
         case 3:            
             DoScriptText(SAY_WP_3, me, Godfrey);
             me->HandleEmoteCommand(1);
             break;
         case 4:
             DoScriptText(SAY_WP_4, Godfrey);
             break;
         case 5:
             DoScriptText(SAY_WP_5, Godfrey);
             break;
         case 6:
             DoScriptText(SAY_WP_6, Godfrey);
             break;
         case 7:
             DoScriptText(SAY_WP_7, me, Godfrey);
             me->HandleEmoteCommand(1);
             break;
         case 8:
             DoScriptText(SAY_WP_8, me, Godfrey);
             me->HandleEmoteCommand(16);
             break;
         case 9:
             DoScriptText(SAY_WP_9, me, Godfrey);            
             me->HandleEmoteCommand(5);
             break;
         case 10:
             DoScriptText(SAY_WP_10, me, Godfrey);
             DoCast(Godfrey, SPELL_HOLY_FIRE);
             break;
         case 11:
             Godfrey->HandleEmoteCommand(434);
             DoScriptText(SAY_WP_11, Godfrey);
             break;
         case 12:
             DoScriptText(SAY_WP_12, me, Godfrey);
             DoCast(Godfrey, SPELL_HOLY_FIRE);
             break;
         case 13:
             DoScriptText(SAY_WP_13, me, Godfrey);
             DoCast(Godfrey, SPELL_HOLY_FIRE);
             break;
         case 14:
             Godfrey->HandleEmoteCommand(434);
             DoScriptText(SAY_WP_14, Godfrey);
             break;
         case 15:
             DoScriptText(SAY_WP_15, me, Godfrey);
             DoCast(Godfrey, SPELL_HOLY_FIRE);
             break;
         case 16:
             DoScriptText(SAY_WP_16, me, Godfrey);
             break;
         case 17:
             DoScriptText(SAY_WP_17, me, Godfrey);
             break;
         case 18:
             DoScriptText(SAY_WP_18, Godfrey);
             break;
         case 19:
             DoScriptText(SAY_WP_19, me, Godfrey);
             break;
         case 20:
             DoScriptText(SAY_WP_20, Godfrey);
             break;
         case 21:
             DoScriptText(SAY_WP_21, Godfrey);
             break;
         case 22:
             DoScriptText(SAY_WP_22, me, Godfrey);
             break;
         case 23:
             DoScriptText(SAY_WP_23, Godfrey);
             break;
         case 24:
             DoScriptText(SAY_WP_24, Godfrey);
             break;
         case 25:
             DoScriptText(SAY_WP_25, me, Godfrey);
             break;
         case 26:
             DoScriptText(SAY_WP_26, me);
             me->SetUInt64Value(UNIT_FIELD_TARGET, pPlayer->GetGUID());
             break;
         case 27:
             DoScriptText(SAY_WP_27, me, Godfrey);
             me->SetUInt64Value(UNIT_FIELD_TARGET, Godfrey->GetGUID());
             Completed = true;            
             if (pPlayer)
                 pPlayer->GroupEventHappens(QUEST_A_RIGHTEOUS_SERMON, me);
             break;                      
     }
 }
        void WaypointReached(uint32 waypointId)
        {
            Player* player = GetPlayerForEscort();
            if (!player)
                return;

            switch (waypointId)
            {
                case 0:
                    DoScriptText(SAY1, me, player);
                    break;
                case 4:
                    DoScriptText(WHISP1, me, player);
                    break;
                case 6:
                    DoScriptText(WHISP2, me, player);
                    break;
                case 7:
                    DoScriptText(WHISP3, me, player);
                    break;
                case 8:
                    DoScriptText(WHISP4, me, player);
                    break;
                case 17:
                    DoScriptText(WHISP5, me, player);
                    break;
                case 18:
                    DoScriptText(WHISP6, me, player);
                    break;
                case 19:
                    DoScriptText(WHISP7, me, player);
                    break;
                case 33:
                    DoScriptText(WHISP8, me, player);
                    break;
                case 34:
                    DoScriptText(WHISP9, me, player);
                    break;
                case 35:
                    DoScriptText(WHISP10, me, player);
                    break;
                case 36:
                    DoScriptText(WHISP11, me, player);
                    break;
                case 43:
                    DoScriptText(WHISP12, me, player);
                    break;
                case 44:
                    DoScriptText(WHISP13, me, player);
                    break;
                case 49:
                    DoScriptText(WHISP14, me, player);
                    break;
                case 50:
                    DoScriptText(WHISP15, me, player);
                    break;
                case 51:
                    DoScriptText(WHISP16, me, player);
                    break;
                case 52:
                    DoScriptText(WHISP17, me, player);
                    break;
                case 53:
                    DoScriptText(WHISP18, me, player);
                    break;
                case 54:
                    DoScriptText(WHISP19, me, player);
                    break;
                case 55:
                    DoScriptText(WHISP20, me, player);
                    break;
                case 56:
                    DoScriptText(WHISP21, me, player);
                    player->GroupEventHappens(10211, me);
                    break;
            }
        }
    void SetData(uint32 type, uint32 data)
    {
        Player* player = GetPlayerInMap();

        if (!player)
        {
            sLog->outDebug("TSCR: Instance Black Portal: SetData (Type: %u Data %u) cannot find any player.", type, data);
            return;
        }

        switch (type)
        {
        case TYPE_MEDIVH:
            if (data == SPECIAL && Encounter[0] == IN_PROGRESS)
            {
                --mShieldPercent;
                UpdateBMWorldState(WORLD_STATE_BM_SHIELD, mShieldPercent);

                if (!mShieldPercent)
                {
                    if (Unit *medivh = Unit::GetUnit(*player, MedivhGUID))
                    {
                        if (medivh->isAlive())
                        {
                            medivh->DealDamage(medivh, medivh->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
                            Encounter[0] = FAIL;
                            Encounter[1] = NOT_STARTED;
                        }
                    }
                }
            }
            else
            {
                if (data == IN_PROGRESS)
                {
                    sLog->outDebug("TSCR: Instance Dark Portal: Starting event.");
                    InitWorldState();
                    Encounter[1] = IN_PROGRESS;
                    NextPortal_Timer = 15000;
                }

                if (data == DONE)
                {
                    //this may be completed further out in the post-event
                    if (Unit *medivh = Unit::GetUnit(*player, MedivhGUID))
                    {
                        player->GroupEventHappens(QUEST_OPENING_PORTAL, medivh);
                        player->GroupEventHappens(QUEST_MASTER_TOUCH, medivh);
                    }
                }

                Encounter[0] = data;
            }
            break;
        case TYPE_RIFT:
            if (data == SPECIAL)
            {
                if (mRiftPortalCount < 7)
                    NextPortal_Timer = 5000;
            }
            else
                Encounter[1] = data;
            break;
        }
    }
Пример #12
0
	    void WaypointReached(uint32 i)
        {
            Player* player = GetPlayerForEscort();

            if (!player)
                return;

            switch(i)
            {
                case 0:
                    me->HandleEmoteCommand(EMOTE_ONESHOT_ATTACK1H);
                    break;
                case 1:
                    if (GameObject* cage = me->FindNearestGameObject(GO_CAGE_HARRISON, 20))
                    {
                        cage->SetGoState(GO_STATE_ACTIVE);
                        cageH = cage->GetGUID();
                    }
                    Talk(JONES_SAY_START);
                    break;
                case 5:
                    Talk(JONES_SAY_PROGRESS1);
                    // Summon Adarrah
                    if (Creature* adarrah = me->SummonCreature(NPC_ADARRAH, 4912.772461f, -4797.773458f, 32.644875f, 3.741192f, TEMPSUMMON_TIMED_DESPAWN,300000))
                        adarrahGUID = adarrah->GetGUID();
                    if (GameObject* cage = GameObject::GetGameObject(*me,cageH))
                        cage->SetGoState(GO_STATE_READY);               // Close Jones's cage
                    break;
                case 6:
                    Talk(JONES_SAY_PROGRESS2);
                    break;
                case 8:
                    me->HandleEmoteCommand(EMOTE_ONESHOT_USE_STANDING);  // Jones manipulates cage lock
                    break;
                case 9:
                    if (GameObject* cage = me->FindNearestGameObject(GO_CAGE_ADARRAH, 20))
                    {
                        cage->SetGoState(GO_STATE_ACTIVE);
                        cageA = cage->GetGUID();
                    }
                    Talk(JONES_SAY_PROGRESS3);

                    // Set Adarrah's data to 1 1
                    if (Creature* adarrah = Creature::GetCreature(*me,adarrahGUID))
                        adarrah->AI()->SetData(1,1);
                    break;
                case 13:
                    me->SetStandState(UNIT_STAND_STATE_KNEEL);  // Kneels and gets skull mace from pile (for gong)
                    break;
                case 14:
                    // Change equipment, show Jones with skull mace
                    me->SetStandState(UNIT_STAND_STATE_STAND);
                    SetEquipmentSlots(false, EQUIP_ID_MAIN_HAND, EQUIP_ID_OFF_HAND, EQUIP_NO_CHANGE);

                    if (GameObject* cage = GameObject::GetGameObject(*me,cageA))
                        cage->SetGoState(GO_STATE_READY); // Close Adarrah's cage
                    break;
                case 16:
                    // gong hit 1
                    me->HandleEmoteCommand(EMOTE_ONESHOT_ATTACK1H);
                    me->PlayDirectSound(SOUND_GONG);
                    DoCast(player,SPELL_CAMERA_SHAKE_MED);
                    break;
                case 17:
                    // gong hit 2
                    me->HandleEmoteCommand(EMOTE_ONESHOT_ATTACK1H);
                    me->PlayDirectSound(SOUND_GONG);
                    DoCast(player,SPELL_CAMERA_SHAKE_MED);
                    break;
                case 18:
                    Talk(JONES_SAY_PROGRESS4);
                    break;
                case 19:
                    Talk(JONES_SAY_PROGRESS5);
                    break;
                case 21:
                    // set firewall state to block exit
                    if (GameObject* firewall = me->FindNearestGameObject(GO_FIREWALL,50))
                    {
                        firewall->SetGoState(GO_STATE_READY);
                        firewallGUID = firewall->GetGUID();
                    }
                    // spawn Tecahuna (snake boss)
                    if (Creature* tecahuna = me->SummonCreature(NPC_TECAHUNA,4906.78f,-4818.94f,32.55777f,2.447285f,TEMPSUMMON_CORPSE_TIMED_DESPAWN,5000))
                        tecahunaGUID = tecahuna->GetGUID();
                    break;
                case 22:
                    Talk(JONES_SAY_PROGRESS6);
                    SetRun();
                    break;
                case 23:
                    SetRun(false);
                    break;
                case 24:
                    Talk(JONES_SAY_PROGRESS7);
                    break;
                case 25:
                    Talk(JONES_SAY_PROGRESS8);
                    SetRun();
                    break;
                case 26:
                    // Change Tecahuna factionID
                if (Creature* tecahuna = Creature::GetCreature(*me,tecahunaGUID))
                        tecahuna->setFaction(16);   // Set hostile
                    break;
                case 27:
                    // set firewall state to open
                    if (GameObject* firewall = GameObject::GetGameObject(*me,firewallGUID))
                        firewall->SetGoState(GO_STATE_ACTIVE);
                    break;
                case 48:
                    Talk(JONES_SAY_END);
                    player->GroupEventHappens(QUEST_DUN_DA_DUN_TAH,me);
                    break;
            }
        }
Пример #13
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();
    }
Пример #14
0
            void UpdateAI(const uint32 diff)
            {
                if (!phase)
                    return;

                if (timer <= diff)
                {
                    Player* player = Player::GetPlayer(*me, playerGUID);
                    Creature* orphan = Creature::GetCreature(*me, orphanGUID);

                    if (!orphan || !player)
                    {
                        Reset();
                        return;
                    }

                    switch (phase)
                    {
                        case 1:
                            orphan->GetMotionMaster()->MovePoint(0, me->GetPositionX() + cos(me->GetOrientation()) * 5, me->GetPositionY() + sin(me->GetOrientation()) * 5, me->GetPositionZ());
                            orphan->AI()->Talk(TEXT_ORACLE_ORPHAN_11);
                            timer = 5000;
                            break;
                        case 2:
                            orphan->SetFacingToObject(me);
                            orphan->AI()->Talk(TEXT_ORACLE_ORPHAN_12);
                            timer = 5000;
                            break;
                        case 3:
                            orphan->AI()->Talk(TEXT_ORACLE_ORPHAN_13);
                            timer = 5000;
                            break;
                        case 4:
                            Talk(TEXT_ALEXSTRASZA_2);
                            me->SetStandState(UNIT_STAND_STATE_KNEEL);
                            me->SetFacingToObject(orphan);
                            timer = 5000;
                            break;
                        case 5:
                            orphan->AI()->Talk(TEXT_ORACLE_ORPHAN_14);
                            timer = 5000;
                            break;
                        case 6:
                            me->SetStandState(UNIT_STAND_STATE_STAND);
                            me->SetOrientation(me->GetHomePosition().GetOrientation());
                            player->GroupEventHappens(QUEST_THE_DRAGON_QUEEN_ORACLE, me);
                            orphan->GetMotionMaster()->MoveFollow(player, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE);
                            Reset();
                            return;
                        case 7:
                            orphan->GetMotionMaster()->MovePoint(0, me->GetPositionX() + cos(me->GetOrientation()) * 5, me->GetPositionY() + sin(me->GetOrientation()) * 5, me->GetPositionZ());
                            orphan->AI()->Talk(TEXT_WOLVAR_ORPHAN_11);
                            timer = 5000;
                            break;
                        case 8:
                            if(Creature* krasus = me->FindNearestCreature(NPC_KRASUS, 10.0f))
                            {
                                orphan->SetFacingToObject(krasus);
                                krasus->AI()->Talk(TEXT_KRASUS_8);
                            }
                            timer = 5000;
                            break;
                        case 9:
                            orphan->AI()->Talk(TEXT_WOLVAR_ORPHAN_12);
                            timer = 5000;
                            break;
                        case 10:
                            orphan->SetFacingToObject(me);
                            Talk(TEXT_ALEXSTRASZA_2);
                            timer = 5000;
                            break;
                        case 11:
                            orphan->AI()->Talk(TEXT_WOLVAR_ORPHAN_13);
                            timer = 5000;
                            break;
                        case 12:
                            player->GroupEventHappens(QUEST_THE_DRAGON_QUEEN_WOLVAR, me);
                            orphan->GetMotionMaster()->MoveFollow(player, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE);
                            Reset();
                            return;
                    }
                    ++phase;
                }
                else
                    timer -= diff;
            }
Пример #15
0
    void HandleAnimation()
    {
        Player* plr = Unit::GetPlayer(*me, PlayerGUID);
        if (!plr)
            return;

        Unit* Fandral = plr->FindNearestCreature(C_FANDRAL_STAGHELM, 100, me);
        Unit* Arygos = plr->FindNearestCreature(C_ARYGOS, 100,me);
        Unit* Caelestrasz = plr->FindNearestCreature(C_CAELESTRASZ, 100, me);
        Unit* Merithra = plr->FindNearestCreature(C_MERITHRA, 100,me);

        if (!Fandral || !Arygos || !Caelestrasz || !Merithra)
            return;

        Unit* mob;
        AnimationTimer = EventAnim[AnimationCount].Timer;
        if (eventEnd == false)
        {
            switch (AnimationCount)
            {
                case 0:
                    DoScriptText(ANACHRONOS_SAY_1, me , Fandral);
                    break;
                case 1:
                    Fandral->SetUInt64Value(UNIT_FIELD_TARGET, me->GetGUID());
                    DoScriptText(FANDRAL_SAY_1, Fandral,me);
                    break;
                case 2:
                    Fandral->SetUInt64Value(UNIT_FIELD_TARGET,0);
                    DoScriptText(MERITHRA_EMOTE_1,Merithra);
                    break;
                case 3:
                    DoScriptText(MERITHRA_SAY_1,Merithra);
                    break;
                case 4:
                    DoScriptText(ARYGOS_EMOTE_1,Arygos);
                    break;
                case 5:
                    Caelestrasz->SetUInt64Value(UNIT_FIELD_TARGET, Fandral->GetGUID());
                    DoScriptText(CAELESTRASZ_SAY_1, Caelestrasz);
                    break;
                case 6:
                    DoScriptText(MERITHRA_SAY_2, Merithra);
                    break;
                case 7:
                    Caelestrasz->SetUInt64Value(UNIT_FIELD_TARGET, 0);
                    Merithra->GetMotionMaster()->MoveCharge(-8065,1530,2.61f,10);
                    break;
                case 8:
                    DoScriptText(MERITHRA_YELL_1,Merithra);
                    break;
                case 9:
                    Merithra->CastSpell(Merithra,25105,true);
                    break;
                case 10:
                    Merithra->HandleEmoteCommand(EMOTE_ONESHOT_LIFTOFF);
                    Merithra->AddUnitMovementFlag(MOVEFLAG_LEVITATING);
                    Merithra->GetMotionMaster()->MoveCharge(-8065,1530,6.61f,3);
                    break;
                case 11:
                    Merithra->CastSpell(Merithra,24818,false);
                    break;
                case 12:
                    Merithra->GetMotionMaster()->MoveCharge(-8100,1530,50,42);
                    break;
                case 13:
                    break;
                case 14:
                    DoScriptText(ARYGOS_SAY_1,Arygos);
                    Merithra->SetVisibility(VISIBILITY_OFF);
                    break;
                case 15:
                    Arygos->GetMotionMaster()->MoveCharge(-8065,1530,2.61f,10);
                    Merithra->GetMotionMaster()->MoveCharge(-8034.535f,1535.14f,2.61f,42);
                    break;
                case 16:
                    DoScriptText(ARYGOS_YELL_1, Arygos);
                    break;
                case 17:
                    Arygos->CastSpell(Arygos,25107,true);
                    break;
                case 18:
                    Arygos->HandleEmoteCommand(EMOTE_ONESHOT_LIFTOFF);
                    Arygos->AddUnitMovementFlag(MOVEFLAG_LEVITATING);
                    Arygos->GetMotionMaster()->MoveCharge(-8065,1530,6.61f,42);
                    break;
                case 19:
                    Arygos->CastSpell(Arygos,44799,false);
                    break;
                case 20:
                    Arygos->GetMotionMaster()->MoveCharge(-8095,1530,50,42);
                    break;
                case 21:
                    break;
                case 22:
                    DoScriptText(CAELESTRASZ_SAY_2,Caelestrasz, Fandral);
                    break;
                case 23:
                    Caelestrasz->GetMotionMaster()->MoveCharge(-8065,1530,2.61f,10);
                    Arygos->SetVisibility(VISIBILITY_OFF);
                    Arygos->GetMotionMaster()->MoveCharge(-8034.535f,1535.14f,2.61f,10);
                    break;
                case 24:
                    DoScriptText(CAELESTRASZ_YELL_1, Caelestrasz);
                    break;
                case 25:
                    Caelestrasz->CastSpell(Caelestrasz,25106,true);
                    break;
                case 26:
                    Caelestrasz->HandleEmoteCommand(254);
                    Caelestrasz->AddUnitMovementFlag(MOVEFLAG_LEVITATING);
                    Caelestrasz->GetMotionMaster()->MoveCharge(-8065,1530,7.61f,4);
                    break;
                case 27:
                    Caelestrasz->CastSpell(Caelestrasz,43294,false);
                    break;
                case 28:
                    DoScriptText(ANACHRONOS_SAY_2,me, Fandral);
                    break;
                case 29:
                    Caelestrasz->GetMotionMaster()->MoveCharge(-8095,1530,50,42);
                    DoScriptText(FANDRAL_SAY_2, Fandral, me);
                    break;
                case 30:
                    break;
                case 31:
                    DoScriptText(ANACHRONOS_SAY_3, me, Fandral);
                    break;
                case 32:
                    Caelestrasz->SetVisibility(VISIBILITY_OFF);
                    Caelestrasz->GetMotionMaster()->MoveCharge(-8034.535f,1535.14f,2.61f,42);
                    Fandral->GetMotionMaster()->MoveCharge(-8108,1529,2.77f,8);
                    me->GetMotionMaster()->MoveCharge(-8113,1525,2.77f,8);
                    break;//both run to the gate
                case 33:
                    DoScriptText(ANACHRONOS_SAY_4, me);
                    Caelestrasz->GetMotionMaster()->MoveCharge(-8050,1473,65,15);
                    break; //Text: sands will stop
                case 34:
                    DoCast(plr, 23017, true);//Arcane Channeling
                    break;
                case 35:
                    me->CastSpell(-8088,1520.43f,2.67f,25158,true);
                    break;
                case 36:
                    DoCast(plr, 25159, true);
                    break;
                case 37:
                    me->SummonGameObject(GO_GATE_OF_AHN_QIRAJ,-8130,1525,17.5f,0,0,0,0,0,0);
                    break;
                case 38:
                    DoCast(plr, 25166, true);
                    me->SummonGameObject(GO_GLYPH_OF_AHN_QIRAJ,-8130,1525,17.5f,0,0,0,0,0,0);
                    break;
                case 39:
                    DoScriptText(ANACHRONOS_SAY_5, me, Fandral);
                    break;
                case 40:
                    Fandral->CastSpell(me, 25167, true);
                    break;
                case 41:
                    Fandral->SummonGameObject(GO_ROOTS_OF_AHN_QIRAJ,-8130,1525,17.5f,0,0,0,0,0,0);
                    DoScriptText(FANDRAL_SAY_3, Fandral);
                    break;
                case 42:
                    me->CastStop();
                    DoScriptText(FANDRAL_EMOTE_1, Fandral);
                    break;
                case 43:
                    Fandral->CastStop();
                    break;
                case 44:
                    DoScriptText(ANACHRONOS_SAY_6, me);
                    break;
                case 45:
                    DoScriptText(ANACHRONOS_SAY_7, me);
                    break;
                case 46:
                    DoScriptText(ANACHRONOS_SAY_8, me);
                    me->GetMotionMaster()->MoveCharge(-8110,1527,2.77f,4);
                    break;
                case 47:
                    DoScriptText(ANACHRONOS_EMOTE_1, me);
                    break;
                case 48:
                    DoScriptText(FANDRAL_SAY_4,Fandral,me);
                    break;
                case 49:
                    DoScriptText(FANDRAL_SAY_5,Fandral,me);
                    break;
                case 50:
                    DoScriptText(FANDRAL_EMOTE_2,Fandral);
                    Fandral->CastSpell(-8127,1525,17.5f,33806,true);
                    break;
                case 51:
                {
                    uint32 loopbreaker = 0;
                    uint32 entries[4] = { 15423, 15424, 15414, 15422 };
                    for (uint8 i = 0; i < 4; i++)
                    {
                        mob = plr->FindNearestCreature(entries[i],300,true);
                        loopbreaker = 0;
                        while (mob != NULL && loopbreaker < 67)
                        {
                            mob->RemoveFromWorld();
                            mob = plr->FindNearestCreature(entries[i],300,true);
                            loopbreaker++;
                        }
                        mob = plr->FindNearestCreature(entries[i],300,false);
                        loopbreaker = 0;
                        while (mob != NULL && loopbreaker < 67)
                        {
                            mob->RemoveFromWorld();
                            mob = plr->FindNearestCreature(entries[i],300,false);
                            loopbreaker++;
                        }
                    }
                    break;
                }
                case 52:
                    Fandral->GetMotionMaster()->MoveCharge(-8028.75f, 1538.795f, 2.61f,4);
                    DoScriptText(ANACHRONOS_SAY_9, me,Fandral);
                    break;
                case 53:
                    DoScriptText(FANDRAL_SAY_6,Fandral);
                    break;
                case 54:
                    DoScriptText(ANACHRONOS_EMOTE_2,me);
                    break;
                case 55:
                    Fandral->SetVisibility(VISIBILITY_OFF);
                    break;
                case 56:
                    DoScriptText(ANACHRONOS_EMOTE_3, me);
                    me->GetMotionMaster()->MoveCharge(-8116,1522,3.65f,4);
                    break;
                case 57:
                    me->GetMotionMaster()->MoveCharge(-8116.7f,1527,3.7f,4);
                    break;
                case 58:
                    me->GetMotionMaster()->MoveCharge(-8112.67f,1529.9f,2.86f,4);
                    break;
                case 59:
                    me->GetMotionMaster()->MoveCharge(-8117.99f,1532.24f,3.94f,4);
                    break;
                case 60:
                    if (plr)
                        DoScriptText(ANACHRONOS_SAY_10, me,plr);
                    me->GetMotionMaster()->MoveCharge(-8113.46f,1524.16f,2.89f,4);
                    break;
                case 61:
                    me->GetMotionMaster()->MoveCharge(-8057.1f,1470.32f,2.61f,6);
                    if (plr->IsInRange(me,0,15))
                        plr->GroupEventHappens(QUEST_A_PAWN_ON_THE_ETERNAL_BOARD ,me);
                    break;
                case 62:
                    me->SetDisplayId(15500);
                    break;
                case 63:
                    me->HandleEmoteCommand(254);
                    me->AddUnitMovementFlag(MOVEFLAG_LEVITATING);
                    break;
                case 64:
                    me->GetMotionMaster()->MoveCharge(-8000,1400,150,9);
                    break;
                case 65:
                    me->SetVisibility(VISIBILITY_OFF);
                    if (Creature* AnachronosQuestTrigger = (Unit::GetCreature(*me, AnachronosQuestTriggerGUID)))
                    {
                        DoScriptText(ARYGOS_YELL_1,me);
                        AnachronosQuestTrigger->AI()->EnterEvadeMode();
                        eventEnd=true;
                    }
                    break;
            }
        }
        ++AnimationCount;
    }
Пример #16
0
    void UpdateAI(const uint32 uiDiff)
    {
        if (m_bIsEventInProgress)
        {
            if (m_uiTimeOutTimer && m_uiTimeOutTimer < uiDiff)
            {
                if (!m_playerGuid)
                {
                    //player are expected to use GO within a minute, if not, event will fail.
                    Reset();
                    return;
                }

                m_uiTimeOutTimer = 0;
            }
            else
                m_uiTimeOutTimer -= uiDiff;

            if (m_uiCheckAliveStateTimer < uiDiff)
            {
                if (Creature* pChallenger = m_creature->GetMap()->GetCreature(m_aChallengerGuids[m_uiChallengerCount]))
                {
                    if (!pChallenger->isAlive())
                    {
                        Player* pPlayer = m_creature->GetMap()->GetPlayer(m_playerGuid);

                        if (pPlayer && !pPlayer->isAlive())
                        {
                            Reset();
                            return;
                        }

                        ++m_uiChallengerCount;

                        //count starts at 0
                        if (m_uiChallengerCount == MAX_CHALLENGER)
                        {
                            if (pPlayer && pPlayer->isAlive())
                                pPlayer->GroupEventHappens(QUEST_SECOND_TRIAL, m_creature);

                            Reset();
                            return;
                        }
                        else
                            m_uiEngageTimer = 15000;
                    }
                }
                m_uiCheckAliveStateTimer = 2500;
            }
            else
                m_uiCheckAliveStateTimer -= uiDiff;

            if (m_uiEngageTimer && m_uiEngageTimer < uiDiff)
            {
                Player* pPlayer = m_creature->GetMap()->GetPlayer(m_playerGuid);

                if (pPlayer && pPlayer->isAlive())
                {
                    if (Creature* pCreature = m_creature->GetMap()->GetCreature(m_aChallengerGuids[m_uiChallengerCount]))
                    {
                        DoScriptText(uiSayId[m_uiChallengerCount], m_creature, pPlayer);
                        pCreature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
                        pCreature->AI()->AttackStart(pPlayer);
                    }
                }

                m_uiEngageTimer = 0;
            }
            else
                m_uiEngageTimer -= uiDiff;
        }
    }
Пример #17
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;
    }
Пример #18
0
        void WaypointReached(uint32 i)
        {
            Player* pPlayer = GetPlayerForEscort();

            if (!pPlayer)
                return;

            switch(i)
            {
                case 0:
                    DoScriptText(SAY_REM_START, me, pPlayer);
                    break;
                case 5:
                    DoScriptText(SAY_REM_RAMP1_1, me, pPlayer);
                    break;
                case 6:
                    DoSpawnCreature(NPC_GRAVEL_SCOUT, -10.0f, 5.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
                    DoSpawnCreature(NPC_GRAVEL_BONE, -10.0f, 7.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
                    break;
                case 9:
                    DoScriptText(SAY_REM_RAMP1_2, me, pPlayer);
                    break;
                case 14:
                    //depend quest rewarded?
                    DoScriptText(SAY_REM_BOOK, me, pPlayer);
                    break;
                case 15:
                    DoScriptText(SAY_REM_TENT1_1, me, pPlayer);
                    break;
                case 16:
                    DoSpawnCreature(NPC_GRAVEL_SCOUT, -10.0f, 5.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
                    DoSpawnCreature(NPC_GRAVEL_BONE, -10.0f, 7.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
                    break;
                case 17:
                    DoScriptText(SAY_REM_TENT1_2, me, pPlayer);
                    break;
                case 26:
                    DoScriptText(SAY_REM_MOSS, me, pPlayer);
                    break;
                case 27:
                    DoScriptText(EMOTE_REM_MOSS, me, pPlayer);
                    break;
                case 28:
                    DoScriptText(SAY_REM_MOSS_PROGRESS, me, pPlayer);
                    break;
                case 29:
                    DoSpawnCreature(NPC_GRAVEL_SCOUT, -15.0f, 3.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
                    DoSpawnCreature(NPC_GRAVEL_BONE, -15.0f, 5.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
                    DoSpawnCreature(NPC_GRAVEL_GEO, -15.0f, 7.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
                    break;
                case 31:
                    DoScriptText(SAY_REM_PROGRESS, me, pPlayer);
                    break;
                case 41:
                    DoScriptText(SAY_REM_REMEMBER, me, pPlayer);
                    break;
                case 42:
                    DoScriptText(EMOTE_REM_END, me, pPlayer);
                    pPlayer->GroupEventHappens(QUEST_ABSENT_MINDED_PT2, me);
                    break;
            }
        }
Пример #19
0
    void UpdateAI(const uint32 diff)
    {
        if (SayTimer <= diff)
        {
            if (Event)
                SayTimer = NextStep(++Step);
        } else SayTimer -= diff;

        if (Attack)
        {
            Player* player = Unit::GetPlayer(*me, PlayerGUID);
            me->setFaction(14);
            me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
            if (player)
            {
            Unit* Creepjack = me->FindNearestCreature(NPC_CREEPJACK, 20);
            if (Creepjack)
            {
                Creepjack->Attack(player, true);
                Creepjack->setFaction(14);
                Creepjack->GetMotionMaster()->MoveChase(player);
                Creepjack->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
            }
            Unit* Malone = me->FindNearestCreature(NPC_MALONE, 20);
            if (Malone)
            {
                Malone->Attack(player, true);
                Malone->setFaction(14);
                Malone->GetMotionMaster()->MoveChase(player);
                Malone->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
            }
                DoStartMovement(player);
                AttackStart(player);
            }
            Attack = false;
        }

        if ((me->GetHealth()*100)/me->GetMaxHealth() < 1 && !Done)
        {
            Unit* Creepjack = me->FindNearestCreature(NPC_CREEPJACK, 20);
            if (Creepjack)
            {
                CAST_CRE(Creepjack)->AI()->EnterEvadeMode();
                Creepjack->setFaction(1194);
                Creepjack->GetMotionMaster()->MoveTargetedHome();
                Creepjack->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
            }
            Unit* Malone = me->FindNearestCreature(NPC_MALONE, 20);
            if (Malone)
            {
                CAST_CRE(Malone)->AI()->EnterEvadeMode();
                Malone->setFaction(1194);
                Malone->GetMotionMaster()->MoveTargetedHome();
                Malone->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
            }
            me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
            me->setFaction(1194);
            Done = true;
            DoScriptText(SAY_GIVEUP, me, NULL);
            me->DeleteThreatList();
            me->CombatStop();
            me->GetMotionMaster()->MoveTargetedHome();
            Player* player = Unit::GetPlayer(*me, PlayerGUID);
            if (player)
                player->GroupEventHappens(QUEST_WBI, me);
        }
        DoMeleeAttackIfReady();
    }