您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ HealthBelowPct函数代码示例

51自学网 2021-06-01 21:25:47
  C++
这篇教程C++ HealthBelowPct函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中HealthBelowPct函数的典型用法代码示例。如果您正苦于以下问题:C++ HealthBelowPct函数的具体用法?C++ HealthBelowPct怎么用?C++ HealthBelowPct使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了HealthBelowPct函数的28个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: UpdateAI

        void UpdateAI(uint32 diff) override        {            events.Update(diff);            // Speech            if (!UpdateVictim())            {                while (uint32 eventId = events.ExecuteEvent())                {                    switch (eventId)                    {                        case EVENT_SPEECH_1:                            Talk(SAY_LINE1);                            me->SetStandState(UNIT_STAND_STATE_STAND);                            me->HandleEmoteCommand(EMOTE_ONESHOT_TALK);                            events.ScheduleEvent(EVENT_SPEECH_2, 12000);                            break;                        case EVENT_SPEECH_2:                            Talk(SAY_LINE2);                            me->HandleEmoteCommand(EMOTE_ONESHOT_TALK);                            events.ScheduleEvent(EVENT_SPEECH_3, 12000);                            break;                        case EVENT_SPEECH_3:                            Talk(SAY_LINE3);                            me->HandleEmoteCommand(EMOTE_ONESHOT_TALK);                            events.ScheduleEvent(EVENT_SPEECH_4, 16000);                            break;                        case EVENT_SPEECH_4:                            me->setFaction(103);                            if (Player* player = ObjectAccessor::GetPlayer(*me, PlayerGUID))                                AttackStart(player);                            break;                    }                }                return;            }            if (me->HasUnitState(UNIT_STATE_CASTING))                return;            while (uint32 eventId = events.ExecuteEvent())            {                switch (eventId)                {                    case EVENT_CLEAVE:                        events.ScheduleEvent(EVENT_CLEAVE, 15000);                        DoCastVictim(SPELL_CLEAVE);                        break;                    case EVENT_FLAMEBREATH:                        DoCastVictim(SPELL_FLAMEBREATH);                        events.ScheduleEvent(EVENT_FLAMEBREATH, urand(8000, 14000));                        break;                    case EVENT_FIRENOVA:                        DoCastVictim(SPELL_FIRENOVA);                        events.ScheduleEvent(EVENT_FIRENOVA, 15000);                        break;                    case EVENT_TAILSWIPE:                        //Only cast if we are behind                        /*if (!me->HasInArc(M_PI, me->GetVictim()))                        {                        DoCast(me->GetVictim(), SPELL_TAILSWIPE);                        }*/                        events.ScheduleEvent(EVENT_TAILSWIPE, 15000);                        break;                    case EVENT_BURNINGADRENALINE_CASTER:                        {                            Unit* target = NULL;                            uint8 i = 0;                            while (i < 3)   // max 3 tries to get a random target with power_mana                            {                                ++i;                                target = SelectTarget(SELECT_TARGET_RANDOM, 1, 100, true); // not aggro leader                                if (target && target->getPowerType() == POWER_MANA)                                    i = 3;                            }                            if (target)                                     // cast on self (see below)                                target->CastSpell(target, SPELL_BURNINGADRENALINE, true);                        }                        events.ScheduleEvent(EVENT_BURNINGADRENALINE_CASTER, 15000);                        break;                    case EVENT_BURNINGADRENALINE_TANK:                        // have the victim cast the spell on himself otherwise the third effect aura will be applied to Vael instead of the player                        me->EnsureVictim()->CastSpell(me->GetVictim(), SPELL_BURNINGADRENALINE, true);                        events.ScheduleEvent(EVENT_BURNINGADRENALINE_TANK, 45000);                        break;                }            }            // Yell if hp lower than 15%            if (HealthBelowPct(15) && !HasYelled)            {                Talk(SAY_HALFLIFE);                HasYelled = true;            }            DoMeleeAttackIfReady();        }
开发者ID:maximusfun,项目名称:funcorecata,代码行数:98,


示例2: UpdateAI

        void UpdateAI(const uint32 diff)        {            // Always decrease our global cooldown first            if (GlobalCooldown > diff)                GlobalCooldown -= diff;            else                GlobalCooldown = 0;            // Buff timer (only buff when we are alive and not in combat            if (!me->isInCombat() && me->isAlive())            {                if (BuffTimer <= diff)                {                    // Find a spell that targets friendly and applies an aura (these are generally buffs)                    SpellInfo const* info = SelectSpell(me, 0, 0, SELECT_TARGET_ANY_FRIEND, 0, 0, 0, 0, SELECT_EFFECT_AURA);                    if (info && !GlobalCooldown)                    {                        // Cast the buff spell                        DoCastSpell(me, info);                        // Set our global cooldown                        GlobalCooldown = GENERIC_CREATURE_COOLDOWN;                        // Set our timer to 10 minutes before rebuff                        BuffTimer = 600000;                    } // Try again in 30 seconds                    else BuffTimer = 30000;                }                else BuffTimer -= diff;            }            // Return since we have no target            if (!UpdateVictim())                return;            // If we are within range melee the target            if (me->IsWithinMeleeRange(me->getVictim()))            {                // Make sure our attack is ready and we aren't currently casting                if (me->isAttackReady() && !me->IsNonMeleeSpellCasted(false))                {                    bool Healing = false;                    SpellInfo const* info = NULL;                    // Select a healing spell if less than 30% hp                    if (HealthBelowPct(30))                        info = SelectSpell(me, 0, 0, SELECT_TARGET_ANY_FRIEND, 0, 0, 0, 0, SELECT_EFFECT_HEALING);                    // No healing spell available, select a hostile spell                    if (info) Healing = true;                    else                        info = SelectSpell(me->getVictim(), 0, 0, SELECT_TARGET_ANY_ENEMY, 0, 0, 0, 0, SELECT_EFFECT_DONTCARE);                    // 50% chance if elite or higher, 20% chance if not, to replace our white hit with a spell                    if (info && (rand() % (me->GetCreatureTemplate()->rank > 1 ? 2 : 5) == 0) && !GlobalCooldown)                    {                        // Cast the spell                        if (Healing)DoCastSpell(me, info);                        else                            DoCastSpell(me->getVictim(), info);                        // Set our global cooldown                        GlobalCooldown = GENERIC_CREATURE_COOLDOWN;                    }                    else me->AttackerStateUpdate(me->getVictim());                    me->resetAttackTimer();                }            }            else            {                // Only run this code if we aren't already casting                if (!me->IsNonMeleeSpellCasted(false))                {                    bool Healing = false;                    SpellInfo const* info = NULL;                    // Select a healing spell if less than 30% hp ONLY 33% of the time                    if (HealthBelowPct(30) && rand() % 3 == 0)                        info = SelectSpell(me, 0, 0, SELECT_TARGET_ANY_FRIEND, 0, 0, 0, 0, SELECT_EFFECT_HEALING);                    // No healing spell available, See if we can cast a ranged spell (Range must be greater than ATTACK_DISTANCE)                    if (info) Healing = true;                    else                        info = SelectSpell(me->getVictim(), 0, 0, SELECT_TARGET_ANY_ENEMY, 0, 0, NOMINAL_MELEE_RANGE, 0, SELECT_EFFECT_DONTCARE);                    // Found a spell, check if we are not on a cooldown                    if (info && !GlobalCooldown)                    {                        // If we are currently moving stop us and set the movement generator                        if (!IsSelfRooted)                            IsSelfRooted = true;                        // Cast spell                        if (Healing) DoCastSpell(me, info);                        else                            DoCastSpell(me->getVictim(), info);                        // Set our global cooldown//.........这里部分代码省略.........
开发者ID:AwkwardDev,项目名称:Darkcore-Rebase,代码行数:101,


示例3: UpdateAI

        void UpdateAI(const uint32 diff)        {            //Only if not incombat check if the event is started            if (!me->isInCombat() && pInstance && pInstance->GetData(DATA_MAULGAREVENT))            {                Unit *pTarget = Unit::GetUnit((*me), pInstance->GetData64(DATA_MAULGAREVENT_TANK));                if (pTarget)                {                    AttackStart(pTarget);                    GetCouncil();                }            }            //Return since we have no target            if (!UpdateVictim())                return;            //someone evaded!            if (pInstance && !pInstance->GetData(DATA_MAULGAREVENT))            {                EnterEvadeMode();                return;            }            //ArcingSmash_Timer            if (ArcingSmash_Timer <= diff)            {                DoCast(me->getVictim(), SPELL_ARCING_SMASH);                ArcingSmash_Timer = 10000;            } else ArcingSmash_Timer -= diff;            //Whirlwind_Timer                   if (Whirlwind_Timer <= diff)                   {                        DoCast(me->getVictim(), SPELL_WHIRLWIND);                        Whirlwind_Timer = 55000;                   } else Whirlwind_Timer -= diff;            //MightyBlow_Timer            if (MightyBlow_Timer <= diff)            {                DoCast(me->getVictim(), SPELL_MIGHTY_BLOW);                MightyBlow_Timer = 30000+rand()%10000;            } else MightyBlow_Timer -= diff;            //Entering Phase 2            if (!Phase2 && HealthBelowPct(50))            {                Phase2 = true;                DoScriptText(SAY_ENRAGE, me);                DoCast(me, SPELL_DUAL_WIELD, true);                me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID, 0);                me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID+1, 0);            }            if (Phase2)            {                //Charging_Timer                if (Charging_Timer <= diff)                {                    Unit *pTarget = NULL;                    pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0);                    if (pTarget)                    {                        AttackStart(pTarget);                        DoCast(pTarget, SPELL_BERSERKER_C);                    }                    Charging_Timer = 20000;                } else Charging_Timer -= diff;                //Intimidating Roar                if (Roar_Timer <= diff)                {                    DoCast(me, SPELL_ROAR);                    Roar_Timer = 40000+(rand()%10000);                } else Roar_Timer -= diff;            }            DoMeleeAttackIfReady();        }
开发者ID:tauri,项目名称:ArkCORE,代码行数:82,


示例4: UpdateAI

        void UpdateAI(const uint32 uiDiff)        {            if (!UpdateVictim())                return;            //Common to PHASE_START && PHASE_END            if (m_uiPhase == PHASE_START || m_uiPhase == PHASE_END)            {                //Specific to PHASE_START || PHASE_END                if (m_uiPhase == PHASE_START)                {                    if (HealthBelowPct(60))                    {                        SetCombatMovement(false);                        m_uiPhase = PHASE_BREATH;                        me->GetMotionMaster()->MovePoint(10, Phase2Location);                        return;                    }                }                else                {                    if (m_uiBellowingRoarTimer <= uiDiff)                    {                        DoCastVictim(SPELL_BELLOWING_ROAR);                        // Eruption                        GameObject* pFloor = NULL;                        Trinity::GameObjectInRangeCheck check(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 15);                        Trinity::GameObjectLastSearcher<Trinity::GameObjectInRangeCheck> searcher(me, pFloor, check);                        me->VisitNearbyGridObject(30, searcher);                        if (m_pInstance && pFloor)                            m_pInstance->SetData64(DATA_FLOOR_ERUPTION_GUID, pFloor->GetGUID());                        m_uiBellowingRoarTimer = 30000;                    }                    else                        m_uiBellowingRoarTimer -= uiDiff;                }                if (m_uiFlameBreathTimer <= uiDiff)                {                    DoCastVictim(SPELL_FLAME_BREATH);                    m_uiFlameBreathTimer = urand(10000, 20000);                }                else                    m_uiFlameBreathTimer -= uiDiff;                if (m_uiTailSweepTimer <= uiDiff)                {                    DoCastAOE(SPELL_TAIL_SWEEP);                    m_uiTailSweepTimer = urand(15000, 20000);                }                else                    m_uiTailSweepTimer -= uiDiff;                if (m_uiCleaveTimer <= uiDiff)                {                    DoCastVictim(SPELL_CLEAVE);                    m_uiCleaveTimer = urand(2000, 5000);                }                else                    m_uiCleaveTimer -= uiDiff;                if (m_uiWingBuffetTimer <= uiDiff)                {                    DoCastVictim(SPELL_WING_BUFFET);                    m_uiWingBuffetTimer = urand(15000, 30000);                }                else                    m_uiWingBuffetTimer -= uiDiff;                DoMeleeAttackIfReady();            }            else            {                if (HealthBelowPct(40))                {                    m_uiPhase = PHASE_END;                    if (m_pInstance)                        m_pInstance->SetData(DATA_ONYXIA_PHASE, m_uiPhase);                    DoScriptText(SAY_PHASE_3_TRANS, me);                    SetCombatMovement(true);                    me->SetFlying(false);                    m_bIsMoving = false;                    me->GetMotionMaster()->MovePoint(9,me->GetHomePosition());                    return;                }                if (m_uiDeepBreathTimer <= uiDiff)                {                    if (!m_bIsMoving)                    {                        if (me->IsNonMeleeSpellCasted(false))                            me->InterruptNonMeleeSpells(false);                        DoScriptText(EMOTE_BREATH, me);                        DoCast(me, m_pPointData->uiSpellId);                        m_uiDeepBreathTimer = 70000;                    }                }                else//.........这里部分代码省略.........
开发者ID:1024wow,项目名称:TrinityCore,代码行数:101,


示例5: UpdateAI

        void UpdateAI(const uint32 diff)        {            if(!UpdateVictim())                return;            if(!bIsFrenzy && HealthBelowPct(25) && !bIsExploded)            {                DoScriptText(SAY_ENRAGE, me);                DoCast(me, SPELL_FRENZY, true);                bIsFrenzy = true;            }            if(!bIsFrenzy)            {                if(uiBubbleCheckerTimer <= diff)                {                    if(!bIsExploded)                    {                        if(!me->HasAura(SPELL_PROTECTIVE_BUBBLE, 0))                        {                            DoScriptText(SAY_SHATTER, me);                            DoCast(me, SPELL_WATER_BLAST);                            DoCast(me, SPELL_DRAINED);                            bIsExploded = true;                            me->AttackStop();                            me->SetVisible(false);                            for(uint8 i = 0; i < 10; i++)                            {                                int tmp = urand(0, MAX_SPAWN_LOC-1);                                me->SummonCreature(NPC_ICHOR_GLOBULE, SpawnLoc[tmp], TEMPSUMMON_CORPSE_DESPAWN);                            }                        }                    }                    else                    {                        bool bIsWaterElementsAlive = false;                        if(!m_waterElements.empty())                        {                            for(std::list<uint64>::const_iterator itr = m_waterElements.begin(); itr != m_waterElements.end(); ++itr)                                if(Creature* pTemp = Unit::GetCreature(*me, *itr))                                    if(pTemp->isAlive())                                    {                                        bIsWaterElementsAlive = true;                                        break;                                    }                        }                        if(!bIsWaterElementsAlive)                            DoExplodeCompleted();                    }                    uiBubbleCheckerTimer = 1000;                }                else uiBubbleCheckerTimer -= diff;            }            if(!bIsExploded)            {                if(uiWaterBoltVolleyTimer <= diff)                {                    DoCast(me, SPELL_WATER_BOLT_VOLLEY);                    uiWaterBoltVolleyTimer = urand(10000, 15000);                }                else uiWaterBoltVolleyTimer -= diff;                DoMeleeAttackIfReady();            }        }
开发者ID:Naios,项目名称:MythCore,代码行数:67,


示例6: UpdateAI

        void UpdateAI(uint32 diff) override        {            if (!UpdateVictim())                return;            if (instance && !instance->GetData(TYPE_MOROES))            {                EnterEvadeMode();                return;            }            if (!Enrage && HealthBelowPct(30))            {                DoCast(me, SPELL_FRENZY);                Enrage = true;            }            if (CheckAdds_Timer <= diff)            {                for (uint8 i = 0; i < 4; ++i)                {                    if (AddGUID[i])                    {                        Creature* temp = Unit::GetCreature((*me), AddGUID[i]);                        if (temp && temp->IsAlive())                            if (!temp->GetVictim())                                temp->AI()->AttackStart(me->GetVictim());                    }                }                CheckAdds_Timer = 5000;            } else CheckAdds_Timer -= diff;            if (!Enrage)            {                //Cast Vanish, then Garrote random victim                if (Vanish_Timer <= diff)                {                    DoCast(me, SPELL_VANISH);                    InVanish = true;                    Vanish_Timer = 30000;                    Wait_Timer = 5000;                } else Vanish_Timer -= diff;                if (Gouge_Timer <= diff)                {                    DoCastVictim(SPELL_GOUGE);                    Gouge_Timer = 40000;                } else Gouge_Timer -= diff;                if (Blind_Timer <= diff)                {                    std::list<Unit*> targets;                    SelectTargetList(targets, 5, SELECT_TARGET_RANDOM, me->GetMeleeReach()*5, true);                    for (std::list<Unit*>::const_iterator i = targets.begin(); i != targets.end(); ++i)                        if (!me->IsWithinMeleeRange(*i))                        {                            DoCast(*i, SPELL_BLIND);                            break;                        }                    Blind_Timer = 40000;                } else Blind_Timer -= diff;            }            if (InVanish)            {                if (Wait_Timer <= diff)                {                    Talk(SAY_SPECIAL);                    if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))                        target->CastSpell(target, SPELL_GARROTE, true);                    InVanish = false;                } else Wait_Timer -= diff;            }            if (!InVanish)                DoMeleeAttackIfReady();        }
开发者ID:Caydan,项目名称:WoWSCore548,代码行数:79,


示例7: UpdateAI

            void UpdateAI(uint32 diff) override            {                if (!UpdateVictim())                    return;                events.Update(diff);                if (me->HasUnitState(UNIT_STATE_CASTING))                    return;                while (uint32 eventId = events.ExecuteEvent())                {                    switch (eventId)                    {                        case EVENT_MORTALCLEAVE:                            DoCastVictim(SPELL_MORTALCLEAVE, true);                            events.ScheduleEvent(EVENT_MORTALCLEAVE, urand(15000, 20000), 0, PHASE_ONE);                            break;                        case EVENT_SILENCE:                            DoCastVictim(SPELL_SILENCE, true);                            events.ScheduleEvent(EVENT_SILENCE, urand(20000, 25000), 0, PHASE_ONE);                            break;                        case EVENT_RESURRECT_TIMER:                            //Thekal will transform to Tiger if he died and was not resurrected after 10 seconds.                            if (WasDead)                            {                                DoCast(me, SPELL_TIGER_FORM); // SPELL_AURA_TRANSFORM                                me->SetObjectScale(2.00f);                                me->SetStandState(UNIT_STAND_STATE_STAND);                                me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);                                /*                                CreatureTemplate const* cinfo = me->GetCreatureTemplate();                                me->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (cinfo->mindmg +((cinfo->mindmg/100) * 40)));                                me->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (cinfo->maxdmg +((cinfo->maxdmg/100) * 40)));                                me->UpdateDamagePhysical(BASE_ATTACK);                                */                                me->ApplyStatPctModifier(UNIT_MOD_DAMAGE_MAINHAND, TOTAL_PCT, DamageIncrease); // hack                                ResetThreatList();                                events.ScheduleEvent(EVENT_FRENZY, 30000, 0, PHASE_TWO);          // Phase 2                                events.ScheduleEvent(EVENT_FORCEPUNCH, 4000, 0, PHASE_TWO);       // Phase 2                                events.ScheduleEvent(EVENT_SPELL_CHARGE, 12000, 0, PHASE_TWO);    // Phase 2                                events.ScheduleEvent(EVENT_ENRAGE, 32000, 0, PHASE_TWO);          // Phase 2                                events.ScheduleEvent(EVENT_SUMMONTIGERS, 25000, 0, PHASE_TWO);    // Phase 2                                events.SetPhase(PHASE_TWO);                            }                            events.ScheduleEvent(EVENT_RESURRECT_TIMER, 10000, 0, PHASE_ONE);                            break;                        case EVENT_CHECK_TIMER:                            //Check_Timer for the death of LorKhan and Zath.                            if (!WasDead)                            {                                if (instance->GetBossState(DATA_LORKHAN) == SPECIAL)                                {                                    //Resurrect LorKhan                                    if (Unit* pLorKhan = ObjectAccessor::GetUnit(*me, instance->GetGuidData(DATA_LORKHAN)))                                    {                                        pLorKhan->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);                                        pLorKhan->SetFaction(FACTION_MONSTER);                                        pLorKhan->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);                                        pLorKhan->SetFullHealth();                                        instance->SetData(DATA_LORKHAN, DONE);                                    }                                }                                if (instance->GetBossState(DATA_ZATH) == SPECIAL)                                {                                    //Resurrect Zath                                    if (Unit* pZath = ObjectAccessor::GetUnit(*me, instance->GetGuidData(DATA_ZATH)))                                    {                                        pZath->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);                                        pZath->SetFaction(FACTION_MONSTER);                                        pZath->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);                                        pZath->SetFullHealth();                                        instance->SetBossState(DATA_ZATH, DONE);                                    }                                }                            }                            events.ScheduleEvent(EVENT_CHECK_TIMER, 5000, 0, PHASE_ONE);                            break;                        case EVENT_FRENZY:                            DoCast(me, SPELL_FRENZY);                            events.ScheduleEvent(EVENT_FRENZY, 30000, 0, PHASE_TWO);                            break;                        case EVENT_FORCEPUNCH:                            DoCastVictim(SPELL_FORCEPUNCH, true);                            events.ScheduleEvent(EVENT_FORCEPUNCH, urand(16000, 21000), 0, PHASE_TWO);                            break;                        case EVENT_CHARGE:                            if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))                            {                                DoCast(target, SPELL_CHARGE);                                ResetThreatList();                                AttackStart(target);                            }                            events.ScheduleEvent(EVENT_CHARGE, urand(15000, 22000), 0, PHASE_TWO);                            break;                        case EVENT_ENRAGE:                            if (HealthBelowPct(11) && !Enraged)                            {                                DoCast(me, SPELL_ENRAGE);//.........这里部分代码省略.........
开发者ID:Refuge89,项目名称:TrinityCore,代码行数:101,


示例8: UpdateAI

        void UpdateAI(const uint32 diff)        {            if(!UpdateVictim())                return;            if(uiChainLightningTimer <= diff)            {                if(Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))                    DoCast(pTarget, SPELL_CHAIN_LIGHTING);                uiChainLightningTimer = urand(12000, 15000);            } else uiChainLightningTimer -= diff;            if(uiStaticChargeTimer <= diff)            {                if(Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))                    DoCast(pTarget, SPELL_STATIC_CHARGE);                 uiStaticChargeTimer = 25000;            } else uiStaticChargeTimer -= diff;            if(uiLightningRingTimer <= diff)            {                DoCast(me, SPELL_LIGHTING_RING);                uiLightningRingTimer = urand(30000, 35000);            } else uiLightningRingTimer -= diff;            if(uiLightningShieldTimer <= diff)            {                CheckLightningShield();                uiLightningShieldTimer = urand(45000, 55000);            } else uiLightningShieldTimer -= diff;            if(uiCheckPhaseTimer <= diff)            {                if(HealthBelowPct(75) && uiSummonPhase == 1)                {                    uiSummonEntry = CREATURE_FORGED_IRON_TROGG;                    uiSummonTimer = 1000;                    uiSummonPhase = 2;                }                else if(HealthBelowPct(50) && uiSummonPhase == 2)                {                    uiSummonEntry = CREATURE_MALFORMED_OOZE;                    uiSummonTimer = 1000;                    uiSummonPhase = 3;                }                else if(HealthBelowPct(25) && uiSummonPhase == 3)                {                    uiSummonEntry = CREATURE_EARTHEN_DWARF;                    uiSummonTimer = 1000;                    uiSummonPhase = 4;                }                uiCheckPhaseTimer = 1000;            } else uiCheckPhaseTimer -= diff;            if(uiSummonTimer <= diff)            {                uint32 rnd = urand(0, 1);                if(uiSummonEntry)                    me->SummonCreature(uiSummonEntry, PipeLocations[rnd].x, PipeLocations[rnd].y, PipeLocations[rnd].z, 0.0f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30000);                switch(uiSummonPhase)                {                        case 1: uiSummonTimer = 20000; break;                    case 2: uiSummonTimer = 7500; break;                        case 3: uiSummonTimer = 2500; break;                    case 4: uiSummonTimer = 5000; break;                }            } else uiSummonTimer -= diff;            if(!bIsFrenzy)                if(HealthBelowPct(25))                    if(!me->IsNonMeleeSpellCasted(false))                    {                        DoCast(me, SPELL_FRENZY);                        bIsFrenzy = true;                    }            DoMeleeAttackIfReady();        }
开发者ID:Desch,项目名称:MythCore,代码行数:83,


示例9: UpdateAI

//.........这里部分代码省略.........                }                NormalCastTimer = 1000;            }            else NormalCastTimer -= diff;            if (SecondarySpellTimer <= diff)            {                DoCast(me, SPELL_AOE_CS);                SecondarySpellTimer = urand(10000, 40000);            }            else SecondarySpellTimer -= diff;            if (SuperCastTimer <= diff)            {                uint8 Available[2];                switch (LastSuperSpell)                {                    case SUPER_AE:                        Available[0] = SUPER_FLAME;                        Available[1] = SUPER_BLIZZARD;                        break;                    case SUPER_FLAME:                        Available[0] = SUPER_AE;                        Available[1] = SUPER_BLIZZARD;                        break;                    case SUPER_BLIZZARD:                        Available[0] = SUPER_FLAME;                        Available[1] = SUPER_AE;                        break;                    default:                        Available[0] = 0;                        Available[1] = 0;                        break;                }                LastSuperSpell = Available[urand(0, 1)];                switch (LastSuperSpell)                {                    case SUPER_AE:                        DoScriptText(RAND(SAY_EXPLOSION1, SAY_EXPLOSION2), me);                        DoCast(me, SPELL_TELEPORT_MIDDLE, true);                        DoCast(me, SPELL_MAGNETIC_PULL, true);                        DoCast(me, SPELL_MASSSLOW, true);                        DoCast(me, SPELL_AEXPLOSION, false);                        DrinkingDelay = 15000;                        break;                    case SUPER_FLAME:                        DoScriptText(RAND(SAY_FLAMEWREATH1, SAY_FLAMEWREATH2), me);                        DrinkingDelay = 25000;                        break;                    case SUPER_BLIZZARD:                        DoScriptText(RAND(SAY_BLIZZARD1, SAY_BLIZZARD2), me);                        DrinkingDelay = 30000;                        break;                }                SuperCastTimer = urand(35000, 40000);            }            else SuperCastTimer -= diff;            if (!ElementalsSpawned && HealthBelowPct(40))            {                ElementalsSpawned = true;                DoCast(me, SPELL_TELEPORT_MIDDLE, true);                DoCast(me, SPELL_MAGNETIC_PULL, true);                DoCast(me, SPELL_ELEMENTAL1, true);                DoCast(me, SPELL_ELEMENTAL2, true);                DoCast(me, SPELL_ELEMENTAL3, true);                DoCast(me, SPELL_ELEMENTAL4, true);                DoScriptText(SAY_ELEMENTALS, me);            }        }                if (BerserkTimer <= diff)        {            for (uint32 i = 0; i < 8; ++i)            {                if (Creature* unit = me->SummonCreature(CREATURE_SHADOW_OF_ARAN, shadowOfAranSpawnPoints[i][0], shadowOfAranSpawnPoints[i][1], me->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000))                {                    unit->Attack(me->getVictim(), true);                    unit->setFaction(me->getFaction());                }            }            DoScriptText(SAY_TIMEOVER, me);            BerserkTimer = 60000;        }        else BerserkTimer -= diff;        if (ArcaneCooldown && FireCooldown && FrostCooldown)            DoMeleeAttackIfReady();    }
开发者ID:Blumfield,项目名称:TBCPvP,代码行数:101,


示例10: UpdateAI

        void UpdateAI(const uint32 uiDiff)        {            //Return since we have no target            if (!UpdateVictim())                return;            // Splitted            if (!me->IsVisible())            {                if (uiSplitTimer <= uiDiff)                {                    uiSplitTimer = 2500;                    // Return sparks to where Ionar splitted                    if (bIsSplitPhase)                    {                        CallBackSparks();                        bIsSplitPhase = false;                    }                    // Lightning effect and restore Ionar                    else if (lSparkList.empty())                    {                        me->SetVisible(true);                        me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE|UNIT_FLAG_DISABLE_MOVE);                        DoCast(me, SPELL_SPARK_DESPAWN, false);                        uiSplitTimer = 25*IN_MILLISECONDS;                        bIsSplitPhase = true;                        if (me->getVictim())                            me->GetMotionMaster()->MoveChase(me->getVictim());                    }                }                else                    uiSplitTimer -= uiDiff;                return;            }            if (uiStaticOverloadTimer <= uiDiff)            {                if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))                    DoCast(target, SPELL_STATIC_OVERLOAD);                uiStaticOverloadTimer = urand(5*IN_MILLISECONDS, 6*IN_MILLISECONDS);            }            else                uiStaticOverloadTimer -= uiDiff;            if (uiBallLightningTimer <= uiDiff)            {                DoCast(me->getVictim(), SPELL_BALL_LIGHTNING);                uiBallLightningTimer = urand(10*IN_MILLISECONDS, 11*IN_MILLISECONDS);            }            else                uiBallLightningTimer -= uiDiff;            // Health check            if (!bHasDispersed && HealthBelowPct(uiDisperseHealth))            {                bHasDispersed = true;                DoScriptText(RAND(SAY_SPLIT_1, SAY_SPLIT_2), me);                if (me->IsNonMeleeSpellCasted(false))                    me->InterruptNonMeleeSpells(false);                DoCast(me, SPELL_DISPERSE, false);            }            DoMeleeAttackIfReady();        }
开发者ID:A-Shox,项目名称:TrinityCore,代码行数:73,


示例11: UpdateAI

//.........这里部分代码省略.........                            events.ScheduleEvent(EVENT_NERUBIAN_SHADOW_STRIKE, 30*IN_MILLISECONDS, 0, PHASE_MELEE);                            break;                        }                        case EVENT_SUBMERGE:                            if (!_reachedPhase3 && !me->HasAura(SPELL_BERSERK))                            {                                DoCast(me, SPELL_SUBMERGE_ANUBARAK);                                DoCast(me, SPELL_CLEAR_ALL_DEBUFFS);                                me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);                                Talk(EMOTE_BURROWER);                                events.SetPhase(PHASE_SUBMERGED);                                events.ScheduleEvent(EVENT_PURSUING_SPIKE, 2*IN_MILLISECONDS, 0, PHASE_SUBMERGED);                                events.ScheduleEvent(EVENT_SUMMON_SCARAB, 4*IN_MILLISECONDS, 0, PHASE_SUBMERGED);                                events.ScheduleEvent(EVENT_EMERGE, 1*MINUTE*IN_MILLISECONDS, 0, PHASE_SUBMERGED);                            }                            break;                        case EVENT_PURSUING_SPIKE:                            DoCast(SPELL_SPIKE_CALL);                            break;                        case EVENT_SUMMON_SCARAB:                        {                            /* WORKAROUND                            * - The correct implementation is more likely the comment below but it needs spell knowledge                            */                            GuidList::iterator i = _burrowGUID.begin();                            uint32 at = urand(0, _burrowGUID.size()-1);                            for (uint32 k = 0; k < at; k++)                                ++i;                            if (Creature* pBurrow = ObjectAccessor::GetCreature(*me, *i))                                pBurrow->CastSpell(pBurrow, 66340, false);                            events.ScheduleEvent(EVENT_SUMMON_SCARAB, 4*IN_MILLISECONDS, 0, PHASE_SUBMERGED);                            /*It seems that this spell have something more that needs to be taken into account                            //Need more sniff info                            DoCast(SPELL_SUMMON_BEATLES);                            // Just to make sure it won't happen again in this phase                            m_uiSummonScarabTimer = 90*IN_MILLISECONDS;*/                            break;                        }                        case EVENT_EMERGE:                            events.ScheduleEvent(EVENT_SUBMERGE, 80*IN_MILLISECONDS, 0, PHASE_MELEE);                            DoCast(SPELL_SPIKE_TELE);                            summons.DespawnEntry(NPC_SPIKE);                            me->RemoveAurasDueToSpell(SPELL_SUBMERGE_ANUBARAK);                            me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);                            DoCast(me, SPELL_EMERGE_ANUBARAK);                            Talk(EMOTE_EMERGE);                            events.SetPhase(PHASE_MELEE);                            events.ScheduleEvent(EVENT_FREEZE_SLASH, 15*IN_MILLISECONDS, 0, PHASE_MELEE);                            events.ScheduleEvent(EVENT_PENETRATING_COLD, 20*IN_MILLISECONDS, PHASE_MELEE);                            events.ScheduleEvent(EVENT_SUMMON_NERUBIAN, 10*IN_MILLISECONDS, 0, PHASE_MELEE);                            events.ScheduleEvent(EVENT_SUBMERGE, 80*IN_MILLISECONDS, 0, PHASE_MELEE);                            if (IsHeroic())                                events.ScheduleEvent(EVENT_NERUBIAN_SHADOW_STRIKE, 30*IN_MILLISECONDS, 0, PHASE_MELEE);                            return;                        case EVENT_SUMMON_FROST_SPHERE:                        {                            uint8 startAt = urand(0, 5);                            uint8 i = startAt;                            do                            {                                if (Unit* pSphere = ObjectAccessor::GetCreature(*me, _sphereGUID[i]))                                {                                    if (!pSphere->HasAura(SPELL_FROST_SPHERE))                                    {                                        if (Creature* summon = me->SummonCreature(NPC_FROST_SPHERE, SphereSpawn[i]))                                            _sphereGUID[i] = summon->GetGUID();                                        break;                                    }                                }                                i = (i + 1) % 6;                            }                            while                                (i != startAt);                            events.ScheduleEvent(EVENT_SUMMON_FROST_SPHERE, urand(20*IN_MILLISECONDS, 30*IN_MILLISECONDS));                            break;                        }                        case EVENT_BERSERK:                            DoCast(me, SPELL_BERSERK);                            break;                        default:                            break;                    }                    if (me->HasUnitState(UNIT_STATE_CASTING))                        return;                }                if (HealthBelowPct(30) && events.IsInPhase(PHASE_MELEE) && !_reachedPhase3)                {                    _reachedPhase3 = true;                    DoCastAOE(SPELL_LEECHING_SWARM);                    Talk(EMOTE_LEECHING_SWARM);                    Talk(SAY_LEECHING_SWARM);                }                if (events.IsInPhase(PHASE_MELEE))                    DoMeleeAttackIfReady();            }
开发者ID:Refuge89,项目名称:TrinityCore,代码行数:101,


示例12: UpdateAI

        void UpdateAI(uint32 diff)        {            //Return since we have no target            if (!UpdateVictim())                return;            if (bIsWaitingToAppear)            {                me->StopMoving();                me->AttackStop();                if (uiIsWaitingToAppearTimer <= diff)                {                    me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);                    bIsWaitingToAppear = false;                } else uiIsWaitingToAppearTimer -= diff;                return;            }            if ((Phase == 1) ||(Phase == 3))            {                if (bFireMagusDead && bFrostMagusDead && bArcaneMagusDead)                {                    for (uint8 n = 0; n < 3; ++n)                        time[n] = 0;                    me->GetMotionMaster()->Clear();                    me->SetPosition(CenterOfRoom.GetPositionX(), CenterOfRoom.GetPositionY(), CenterOfRoom.GetPositionZ(), CenterOfRoom.GetOrientation());                    DoCast(me, SPELL_TELESTRA_BACK);                    me->SetVisible(true);                    if (Phase == 1)                        Phase = 2;                    if (Phase == 3)                        Phase = 4;                    uiFireMagusGUID = 0;                    uiFrostMagusGUID = 0;                    uiArcaneMagusGUID = 0;                    bIsWaitingToAppear = true;                    uiIsWaitingToAppearTimer = 4*IN_MILLISECONDS;                    Talk(SAY_MERGE);                }                else                    return;            }            if ((Phase == 0) && HealthBelowPct(50))            {                Phase = 1;                me->CastStop();                me->RemoveAllAuras();                me->SetVisible(false);                me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);                uiFireMagusGUID = SplitPersonality(MOB_FIRE_MAGUS);                uiFrostMagusGUID = SplitPersonality(MOB_FROST_MAGUS);                uiArcaneMagusGUID = SplitPersonality(MOB_ARCANE_MAGUS);                bFireMagusDead = false;                bFrostMagusDead = false;                bArcaneMagusDead = false;                Talk(SAY_SPLIT);                return;            }            if (IsHeroic() && (Phase == 2) && HealthBelowPct(10))            {                Phase = 3;                me->CastStop();                me->RemoveAllAuras();                me->SetVisible(false);                me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);                uiFireMagusGUID = SplitPersonality(MOB_FIRE_MAGUS);                uiFrostMagusGUID = SplitPersonality(MOB_FROST_MAGUS);                uiArcaneMagusGUID = SplitPersonality(MOB_ARCANE_MAGUS);                bFireMagusDead = false;                bFrostMagusDead = false;                bArcaneMagusDead = false;                Talk(SAY_SPLIT);                return;            }            if (uiCooldown)            {                if (uiCooldown <= diff)                    uiCooldown = 0;                else                {                    uiCooldown -= diff;                    return;                }            }            if (uiIceNovaTimer <= diff)            {                if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))                {                    DoCast(target, SPELL_ICE_NOVA, false);                    uiCooldown = 1500;                }                uiIceNovaTimer = 15*IN_MILLISECONDS;            } else uiIceNovaTimer -= diff;            if (uiGravityWellTimer <= diff)            {//.........这里部分代码省略.........
开发者ID:Arkania,项目名称:ArkCORE4,代码行数:101,


示例13: UpdateAI

            void UpdateAI(uint32 diff) override            {                if (events.IsInPhase(IDLE))                    return;                if (events.IsInPhase(NORMAL) && !UpdateVictim())                    return;                events.Update(diff);                if (!_sacrificed && HealthBelowPct(50))                {                    _sacrificed = true;                    events.SetPhase(SACRIFICING);                    events.ScheduleEvent(EVENT_RITUAL_PREPARATION, 0, 0, SACRIFICING);                }                if (events.IsInPhase(NORMAL))                    DoMeleeAttackIfReady();                while (uint32 eventId = events.ExecuteEvent())                {                    switch (eventId)                    {                        case EVENT_INTRO_SVALA_TALK_0:                            Talk(SAY_SVALA_INTRO_0);                            events.ScheduleEvent(EVENT_INTRO_ARTHAS_TALK_0, 8.1 * IN_MILLISECONDS, 0, INTRO);                            break;                        case EVENT_INTRO_ARTHAS_TALK_0:                            if (Creature* arthas = ObjectAccessor::GetCreature(*me, _arthasGUID))                                arthas->AI()->Talk(SAY_DIALOG_OF_ARTHAS_1);                            events.ScheduleEvent(EVENT_INTRO_TRANSFORM_0, 10 * IN_MILLISECONDS, 0, INTRO);                            break;                        case EVENT_INTRO_TRANSFORM_0:                        {                            if (Creature* arthas = ObjectAccessor::GetCreature(*me, _arthasGUID))                                arthas->CastSpell(me, SPELL_TRANSFORMING_CHANNEL, true);                            Position pos;                            pos.Relocate(me);                            pos.m_positionZ += 8.0f;                            me->GetMotionMaster()->MoveTakeoff(0, pos);                            // spectators flee event                            std::list<Creature*> lspectatorList;                            GetCreatureListWithEntryInGrid(lspectatorList, me, NPC_SPECTATOR, 100.0f);                            for (std::list<Creature*>::iterator itr = lspectatorList.begin(); itr != lspectatorList.end(); ++itr)                            {                                if ((*itr)->IsAlive())                                {                                    (*itr)->SetStandState(UNIT_STAND_STATE_STAND);                                    (*itr)->SetWalk(false);                                    (*itr)->GetMotionMaster()->MovePoint(1, spectatorWP[0]);                                }                            }                            events.ScheduleEvent(EVENT_INTRO_TRANSFORM_1, 4.2 * IN_MILLISECONDS, 0, INTRO);                            break;                        }                        case EVENT_INTRO_TRANSFORM_1:                            me->CastSpell(me, SPELL_SVALA_TRANSFORMING1, false);                            events.ScheduleEvent(EVENT_INTRO_TRANSFORM_2, 6.2 * IN_MILLISECONDS, 0, INTRO);                            break;                        case EVENT_INTRO_TRANSFORM_2:                            me->CastSpell(me, SPELL_SVALA_TRANSFORMING2, false);                            if (Creature* arthas = ObjectAccessor::GetCreature(*me, _arthasGUID))                            {                                arthas->InterruptNonMeleeSpells(true);                                me->SetFacingToObject(arthas);                            }                            me->RemoveAllAuras();                            me->UpdateEntry(NPC_SVALA_SORROWGRAVE);                            me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);                            events.ScheduleEvent(EVENT_INTRO_SVALA_TALK_1, 10 * IN_MILLISECONDS, 0, INTRO);                            break;                        case EVENT_INTRO_SVALA_TALK_1:                            Talk(SAY_SVALA_INTRO_1);                            events.ScheduleEvent(EVENT_INTRO_ARTHAS_TALK_1, 3.2 * IN_MILLISECONDS, 0, INTRO);                            break;                        case EVENT_INTRO_ARTHAS_TALK_1:                            if (Creature* arthas = ObjectAccessor::GetCreature(*me, _arthasGUID))                                arthas->AI()->Talk(SAY_DIALOG_OF_ARTHAS_2);                            events.ScheduleEvent(EVENT_INTRO_SVALA_TALK_2, 7.2 * IN_MILLISECONDS, 0, INTRO);                            break;                        case EVENT_INTRO_SVALA_TALK_2:                            Talk(SAY_SVALA_INTRO_2);                            me->SetFacingTo(1.58f);                            if (Creature* arthas = ObjectAccessor::GetCreature(*me, _arthasGUID))                                arthas->SetVisible(false);                            events.ScheduleEvent(EVENT_INTRO_RELOCATE_SVALA, 13.8 * IN_MILLISECONDS, 0, INTRO);                            break;                        case EVENT_INTRO_RELOCATE_SVALA:                        {                            Position pos;                            pos.Relocate(me);                            pos.m_positionX = me->GetHomePosition().GetPositionX();                            pos.m_positionY = me->GetHomePosition().GetPositionY();                            pos.m_positionZ = 90.6065f;                            me->GetMotionMaster()->MoveLand(0, pos);                            me->SetDisableGravity(false, true);                            me->SetHover(true);                            events.ScheduleEvent(EVENT_INTRO_DESPAWN_ARTHAS, 3 * IN_MILLISECONDS, 0, INTRO);                            break;//.........这里部分代码省略.........
开发者ID:AllThing,项目名称:TrinityCore,代码行数:101,


示例14: UpdateAI

        void UpdateAI(uint32 diff) override        {            if (!CanAttack && Intro)            {                if (AggroTimer <= diff)                {                    CanAttack = true;                    me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);                    AggroTimer=19000;                }                else                {                    AggroTimer -= diff;                    return;                }            }            // to prevent abuses during phase 2            if (Phase == 2 && !me->GetVictim() && me->IsInCombat())            {                EnterEvadeMode();                return;            }            // Return since we have no target            if (!UpdateVictim())                return;            if (Phase == 1 || Phase == 3)            {                // ShockBlastTimer                if (ShockBlastTimer <= diff)                {                    // Shock Burst                    // Randomly used in Phases 1 and 3 on Vashj's target, it's a Shock spell doing 8325-9675 nature damage and stunning the target for 5 seconds, during which she will not attack her target but switch to the next person on the aggro list.                    DoCastVictim(SPELL_SHOCK_BLAST);                    ShockBlastTimer = 1000 + rand32() % 14000;       // random cooldown                } else ShockBlastTimer -= diff;                // StaticChargeTimer                if (StaticChargeTimer <= diff)                {                    // Static Charge                    // Used on random people (only 1 person at any given time) in Phases 1 and 3, it's a debuff doing 2775 to 3225 Nature damage to the target and everybody in about 5 yards around it, every 1 seconds for 30 seconds. It can be removed by Cloak of Shadows, Iceblock, Divine Shield, etc, but not by Cleanse or Dispel Magic.                    Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 200, true);                    if (target && !target->HasAura(SPELL_STATIC_CHARGE_TRIGGER))                        DoCast(target, SPELL_STATIC_CHARGE_TRIGGER); // cast Static Charge every 2 seconds for 20 seconds                    StaticChargeTimer = 10000 + rand32() % 20000;                } else StaticChargeTimer -= diff;                // EntangleTimer                if (EntangleTimer <= diff)                {                    if (!Entangle)                    {                        // Entangle                        // Used in Phases 1 and 3, it casts Entangling Roots on everybody in a 15 yard radius of Vashj, immobilzing them for 10 seconds and dealing 500 damage every 2 seconds. It's not a magic effect so it cannot be dispelled, but is removed by various buffs such as Cloak of Shadows or Blessing of Freedom.                        DoCastVictim(SPELL_ENTANGLE);                        Entangle = true;                        EntangleTimer = 10000;                    }                    else                    {                        CastShootOrMultishot();                        Entangle = false;                        EntangleTimer = 20000 + rand32() % 5000;                    }                } else EntangleTimer -= diff;                // Phase 1                if (Phase == 1)                {                    // Start phase 2                    if (HealthBelowPct(70))                    {                        // Phase 2 begins when Vashj hits 70%. She will run to the middle of her platform and surround herself in a shield making her invulerable.                        Phase = 2;                        me->GetMotionMaster()->Clear();                        DoTeleportTo(MIDDLE_X, MIDDLE_Y, MIDDLE_Z);                        for (uint8 i = 0; i < 4; ++i)                            if (Creature* creature = me->SummonCreature(SHIED_GENERATOR_CHANNEL, ShieldGeneratorChannelPos[i][0],  ShieldGeneratorChannelPos[i][1],  ShieldGeneratorChannelPos[i][2],  ShieldGeneratorChannelPos[i][3], TEMPSUMMON_CORPSE_DESPAWN, 0))                                ShieldGeneratorChannel[i] = creature->GetGUID();                        Talk(SAY_PHASE2);                    }                }                // Phase 3                else                {                    // SummonSporebatTimer                    if (SummonSporebatTimer <= diff)                    {                        if (Creature* sporebat = me->SummonCreature(TOXIC_SPOREBAT, SPOREBAT_X, SPOREBAT_Y, SPOREBAT_Z, SPOREBAT_O, TEMPSUMMON_CORPSE_DESPAWN, 0))                            if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))                                sporebat->AI()->AttackStart(target);                        // summon sporebats faster and faster                        if (SummonSporebatStaticTimer > 1000)//.........这里部分代码省略.........
开发者ID:ElunaLuaEngine,项目名称:ElunaTrinityWotlk,代码行数:101,


示例15: UpdateAI

//.........这里部分代码省略.........                return;            while (uint32 eventId = events.ExecuteEvent())            {                switch (eventId)                {                    case EVENT_SHADOWFLAME:                        DoCastVictim(SPELL_SHADOWFLAME);                        events.ScheduleEvent(EVENT_SHADOWFLAME, 12000);                        break;                    case EVENT_FEAR:                        DoCastVictim(SPELL_BELLOWINGROAR);                        events.ScheduleEvent(EVENT_FEAR, urand(25000, 35000));                        break;                    case EVENT_VEILOFSHADOW:                        DoCastVictim(SPELL_VEILOFSHADOW);                        events.ScheduleEvent(EVENT_VEILOFSHADOW, urand(25000, 35000));                        break;                    case EVENT_CLEAVE:                        DoCastVictim(SPELL_CLEAVE);                        events.ScheduleEvent(EVENT_CLEAVE, 7000);                        break;                    case EVENT_TAILLASH:                        // Cast NYI since we need a better check for behind target                        DoCastVictim(SPELL_TAILLASH);                        events.ScheduleEvent(EVENT_TAILLASH, 10000);                        break;                    case EVENT_CLASSCALL:                        if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true))                            switch (target->getClass())                        {                            case CLASS_MAGE:                                Talk(SAY_MAGE);                                DoCast(me, SPELL_MAGE);                                break;                            case CLASS_WARRIOR:                                Talk(SAY_WARRIOR);                                DoCast(me, SPELL_WARRIOR);                                break;                            case CLASS_DRUID:                                Talk(SAY_DRUID);                                DoCast(target, SPELL_DRUID);                                break;                            case CLASS_PRIEST:                                Talk(SAY_PRIEST);                                DoCast(me, SPELL_PRIEST);                                break;                            case CLASS_PALADIN:                                Talk(SAY_PALADIN);                                DoCast(me, SPELL_PALADIN);                                break;                            case CLASS_SHAMAN:                                Talk(SAY_SHAMAN);                                DoCast(me, SPELL_SHAMAN);                                break;                            case CLASS_WARLOCK:                                Talk(SAY_WARLOCK);                                DoCast(me, SPELL_WARLOCK);                                break;                            case CLASS_HUNTER:                                Talk(SAY_HUNTER);                                DoCast(me, SPELL_HUNTER);                                break;                            case CLASS_ROGUE:                                Talk(SAY_ROGUE);                                DoCast(me, SPELL_ROGUE);                                break;                            case CLASS_DEATH_KNIGHT:                                Talk(SAY_DEATH_KNIGHT);                                DoCast(me, SPELL_DEATH_KNIGHT);                                break;                            default:                                break;                        }                        events.ScheduleEvent(EVENT_CLASSCALL, urand(30000, 35000));                        break;                }            }            // Phase3 begins when health below 20 pct            if (!Phase3 && HealthBelowPct(20))            {                std::list<Creature*> constructList;                me->GetCreatureListWithEntryInGrid(constructList, NPC_BONE_CONSTRUCT, 500.0f);                for (std::list<Creature*>::const_iterator itr = constructList.begin(); itr != constructList.end(); ++itr)                    if ((*itr) && !(*itr)->IsAlive())                    {                        (*itr)->Respawn();                        (*itr)->SetInCombatWithZone();                        (*itr)->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);                        (*itr)->SetReactState(REACT_AGGRESSIVE);                        (*itr)->SetStandState(UNIT_STAND_STATE_STAND);                    }                Phase3 = true;                Talk(SAY_RAISE_SKELETONS);            }            DoMeleeAttackIfReady();        }
开发者ID:Fose,项目名称:TrinityCore,代码行数:101,


示例16: UpdateAI

        void UpdateAI(const uint32 diff)        {            //Return since we have no target            if (!UpdateVictim())                return;            if (TeleportTimer <= diff)            {                DoScriptText(SAY_TELEPORT, me);                std::list<HostileReference*>& threatlist = me->getThreatManager().getThreatList();                std::list<HostileReference*>::const_iterator i = threatlist.begin();                for (i = threatlist.begin(); i!= threatlist.end(); ++i)                {                    Unit* unit = Unit::GetUnit(*me, (*i)->getUnitGuid());                    if (unit && (unit->GetTypeId() == TYPEID_PLAYER))                    {                        DoTeleportPlayer(unit, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()+3, unit->GetOrientation());                    }                }                DoResetThreat();                TeleportTimer = 30000;            } else TeleportTimer -= diff;            //        //MarkOfFrostTimer            //        if (MarkOfFrostTimer <= diff)            //        {            //            DoCast(me->getVictim(), SPELL_MARKOFFROST);            //            MarkOfFrostTimer = 25000;            //        } else MarkOfFrostTimer -= diff;            //ChillTimer            if (ChillTimer <= diff)            {                DoCast(me->getVictim(), SPELL_CHILL);                ChillTimer = urand(13000, 25000);            } else ChillTimer -= diff;            //BreathTimer            if (BreathTimer <= diff)            {                DoCast(me->getVictim(), SPELL_FROSTBREATH);                BreathTimer = urand(10000, 15000);            } else BreathTimer -= diff;            //ManaStormTimer            if (ManaStormTimer <= diff)            {                if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))                    DoCast(target, SPELL_MANASTORM);                ManaStormTimer = urand(7500, 12500);            } else ManaStormTimer -= diff;            //ReflectTimer            if (ReflectTimer <= diff)            {                DoCast(me, SPELL_REFLECT);                ReflectTimer = urand(20000, 35000);            } else ReflectTimer -= diff;            //CleaveTimer            if (CleaveTimer <= diff)            {                DoCast(me->getVictim(), SPELL_CLEAVE);                CleaveTimer = 7000;            } else CleaveTimer -= diff;            //EnrageTimer            if (HealthBelowPct(26) && !Enraged)            {                DoCast(me, SPELL_ENRAGE);                Enraged = true;            }            DoMeleeAttackIfReady();        }
开发者ID:S-proyect,项目名称:Emu-S,代码行数:76,


示例17: UpdateAI

        void UpdateAI(const uint32 diff)        {            //Return since we have no target            if (!UpdateVictim())                return;            //Frenzy_Timer            if (!Frenzy && Frenzy_Timer <= diff)            {                DoCast(me, SPELL_FRENZY);                DoScriptText(EMOTE_GENERIC_FRENZY_KILL, me);                Frenzy = true;                PoisonBolt_Timer = 3000;                Frenzy_Timer = urand(25000, 35000);            } else Frenzy_Timer -= diff;            // Wyvern Timer            if (Wyvern_Timer <= diff)            {                if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))                    DoCast(target, SPELL_WYVERNSTING);                Wyvern_Timer = urand(15000, 32000);            } else Wyvern_Timer -= diff;            //Spit Timer            if (Spit_Timer <= diff)            {                DoCast(me->getVictim(), SPELL_ACIDSPIT);                Spit_Timer = urand(5000, 10000);            } else Spit_Timer -= diff;            //NoxiousPoison_Timer            if (NoxiousPoison_Timer <= diff)            {                DoCast(me->getVictim(), SPELL_NOXIOUSPOISON);                NoxiousPoison_Timer = urand(12000, 24000);            } else NoxiousPoison_Timer -= diff;            //PoisonBolt only if frenzy or berserk            if (Frenzy || Berserk)            {                if (PoisonBolt_Timer <= diff)                {                    DoCast(me->getVictim(), SPELL_POISONBOLT);                    PoisonBolt_Timer = 3000;                } else PoisonBolt_Timer -= diff;            }            //FrenzyBack_Timer            if (Frenzy && FrenzyBack_Timer <= diff)            {                me->InterruptNonMeleeSpells(false);                Frenzy = false;                FrenzyBack_Timer = 15000;            } else FrenzyBack_Timer -= diff;            if (!Berserk && HealthBelowPct(31))            {                me->InterruptNonMeleeSpells(false);                DoScriptText(EMOTE_GENERIC_BERSERK, me);                DoCast(me, SPELL_BERSERK);                Berserk = true;            }            DoMeleeAttackIfReady();        }
开发者ID:Gosa1979,项目名称:ArkCORE2,代码行数:66,


示例18: UpdateAI

        void UpdateAI(const uint32 diff)        {            if(!UpdateVictim())                return;            if(bIsWaitingToAppear)            {                me->StopMoving();                me->AttackStop();                if(uiIsWaitingToAppearTimer <= diff)                {                    me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);                    bIsWaitingToAppear = false;                } else uiIsWaitingToAppearTimer -= diff;                return;            }            if((Phase == 1) ||(Phase == 3))            {                if(bIsAchievementTimerRunning)                    uiAchievementTimer += diff;                if(bFireMagusDead && bFrostMagusDead && bArcaneMagusDead)                {                    if(uiAchievementTimer <= ACHIEV_TIMER)                        uiAchievementProgress +=1;                    me->GetMotionMaster()->Clear();                    me->GetMap()->CreatureRelocation(me, CenterOfRoom.GetPositionX(), CenterOfRoom.GetPositionY(), CenterOfRoom.GetPositionZ(), CenterOfRoom.GetOrientation());                    DoCast(me, SPELL_TELESTRA_BACK);                    me->SetVisible(true);                    Phase++;                    uiFireMagusGUID = 0;                    uiFrostMagusGUID = 0;                    uiArcaneMagusGUID = 0;                    bIsWaitingToAppear = true;                    uiIsWaitingToAppearTimer = 4*IN_MILLISECONDS;                    DoScriptText(SAY_MERGE, me);                    bIsAchievementTimerRunning = false;                    uiAchievementTimer = 0;                } else return;            }            if((Phase == 0) && HealthBelowPct(50))            {                Phase = 1;                me->CastStop();                me->RemoveAllAuras();                me->SetVisible(false);                me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);                uiFireMagusGUID = SplitPersonality(MOB_FIRE_MAGUS);                uiFrostMagusGUID = SplitPersonality(MOB_FROST_MAGUS);                uiArcaneMagusGUID = SplitPersonality(MOB_ARCANE_MAGUS);                bFireMagusDead = false;                bFrostMagusDead = false;                bArcaneMagusDead = false;                DoScriptText(RAND(SAY_SPLIT_1,SAY_SPLIT_2), me);                return;            }        if(IsHeroic() && (Phase == 2) && HealthBelowPct(15))            {                Phase = 3;                me->CastStop();                me->RemoveAllAuras();                me->SetVisible(false);                me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);                uiFireMagusGUID = SplitPersonality(MOB_FIRE_MAGUS);                uiFrostMagusGUID = SplitPersonality(MOB_FROST_MAGUS);                uiArcaneMagusGUID = SplitPersonality(MOB_ARCANE_MAGUS);                bFireMagusDead = false;                bFrostMagusDead = false;                bArcaneMagusDead = false;                DoScriptText(RAND(SAY_SPLIT_1,SAY_SPLIT_2), me);                return;            }            if(uiCooldown)            {                if(uiCooldown <= diff)                    uiCooldown = 0;                else                {                    uiCooldown -= diff;                    return;                }            }            if(uiIceNovaTimer <= diff)            {                if(Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))                {                    DoCast(target, SPELL_ICE_NOVA, false);                    uiCooldown = 1500;                }                uiIceNovaTimer = 15*IN_MILLISECONDS;            } else uiIceNovaTimer -= diff;            if(uiGravityWellTimer <= diff)            {                if(Unit* target = me->getVictim())                {//.........这里部分代码省略.........
开发者ID:Naios,项目名称:MythCore,代码行数:101,


示例19: UpdateAI

            void UpdateAI(const uint32 diff)            {                if (instance && instance->GetBossState(BOSS_MAJORDOMO_EXECUTUS) != DONE)                {                    if (!UpdateVictim())                        return;                    events.Update(diff);                    if (!me->FindNearestCreature(NPC_FLAMEWAKER_HEALER, 100.0f) && !me->FindNearestCreature(NPC_FLAMEWAKER_ELITE, 100.0f))                    {                        instance->UpdateEncounterState(ENCOUNTER_CREDIT_KILL_CREATURE, me->GetEntry(), me);                        me->setFaction(35);                        me->AI()->EnterEvadeMode();                        Talk(SAY_DEFEAT);                        _JustDied();                        events.ScheduleEvent(EVENT_OUTRO_1, 32000);                        return;                    }                    if (me->HasUnitState(UNIT_STATE_CASTING))                        return;                    if (HealthBelowPct(50))                        DoCast(me, SPELL_AEGIS_OF_RAGNAROS, true);                    while (uint32 eventId = events.ExecuteEvent())                    {                        switch (eventId)                        {                            case EVENT_MAGIC_REFLECTION:                                DoCast(me, SPELL_MAGIC_REFLECTION);                                events.ScheduleEvent(EVENT_MAGIC_REFLECTION, 30000);                                break;                            case EVENT_DAMAGE_REFLECTION:                                DoCast(me, SPELL_DAMAGE_REFLECTION);                                events.ScheduleEvent(EVENT_DAMAGE_REFLECTION, 30000);                                break;                            case EVENT_BLAST_WAVE:                                DoCastVictim(SPELL_BLAST_WAVE);                                events.ScheduleEvent(EVENT_BLAST_WAVE, 10000);                                break;                            case EVENT_TELEPORT:                                if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1))                                    DoCast(target, SPELL_TELEPORT);                                events.ScheduleEvent(EVENT_TELEPORT, 20000);                                break;                            default:                                break;                        }                    }                    DoMeleeAttackIfReady();                }                else                {                    events.Update(diff);                    while (uint32 eventId = events.ExecuteEvent())                    {                        switch (eventId)                        {                            case EVENT_OUTRO_1:                                me->NearTeleportTo(RagnarosTelePos.GetPositionX(), RagnarosTelePos.GetPositionY(), RagnarosTelePos.GetPositionZ(), RagnarosTelePos.GetOrientation());                                me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);                                break;                            case EVENT_OUTRO_2:                                if (instance)                                    instance->instance->SummonCreature(NPC_RAGNAROS, RagnarosSummonPos);                                break;                            case EVENT_OUTRO_3:                                Talk(SAY_ARRIVAL2_MAJ);                                break;                            default:                                break;                        }                    }                }            }
开发者ID:Adeer,项目名称:Patchs,代码行数:79,


示例20: UpdateAI

            void UpdateAI(uint32 const Diff)            {                if (!UpdateVictim())                    return;                events.Update(Diff);                if (HealthBelowPct(50) && !PermaGround)                    EnterPermaGround();                if (EnrageTimer <= Diff && !Enraged)                {                    DoCast(me, SPELL_BERSERK);                    Enraged = true;                }                else                    EnrageTimer -= Diff;                if (HarpoonCounter == RAID_MODE(2, 4))                {                    HarpoonCounter = 0;                    me->GetMotionMaster()->MovePoint(1, RazorGround);                }                if (phase == PHASE_GROUND)                {                    while (uint32 eventId = events.ExecuteEvent())                    {                        switch (eventId)                        {                            case EVENT_FLIGHT:                                phase = PHASE_FLIGHT;                                events.SetPhase(PHASE_FLIGHT);                                me->SetFlying(true);                                me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);                                me->SetReactState(REACT_PASSIVE);                                me->AttackStop();                                me->GetMotionMaster()->MovePoint(0, RazorFlight);                                events.ScheduleEvent(EVENT_FIREBALL, 7000, 0, PHASE_FLIGHT);                                events.ScheduleEvent(EVENT_DEVOURING, 10000, 0, PHASE_FLIGHT);                                events.ScheduleEvent(EVENT_SUMMON, 5000, 0, PHASE_FLIGHT);                                ++FlyCount;                                return;                            case EVENT_LAND:                                me->SetFlying(false);                                me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);                                me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED);                                if (Creature* commander = ObjectAccessor::GetCreature(*me, instance ? instance->GetData64(DATA_EXPEDITION_COMMANDER) : 0))                                    commander->AI()->DoAction(ACTION_GROUND_PHASE);                                events.ScheduleEvent(EVENT_BREATH, 30000, 0, PHASE_GROUND);                                events.ScheduleEvent(EVENT_BUFFET, 33000, 0, PHASE_GROUND);                                events.ScheduleEvent(EVENT_FLIGHT, 35000, 0, PHASE_GROUND);                                return;                            case EVENT_BREATH:                                me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED);                                me->RemoveAllAuras();                                me->SetReactState(REACT_AGGRESSIVE);                                DoScriptText(EMOTE_BREATH, me, 0);                                DoCastAOE(SPELL_FLAMEBREATH);                                events.CancelEvent(EVENT_BREATH);                                return;                            case EVENT_BUFFET:                                DoCastAOE(SPELL_WINGBUFFET);                                if (Creature* controller = ObjectAccessor::GetCreature(*me, instance ? instance->GetData64(DATA_RAZORSCALE_CONTROL) : 0))                                    controller->CastSpell(controller, SPELL_FLAMED, true);                                events.CancelEvent(EVENT_BUFFET);                                return;                        }                    }                }                if (phase == PHASE_PERMAGROUND)                {                    while (uint32 eventId = events.ExecuteEvent())                    {                        switch (eventId)                        {                            case EVENT_FLAME:                                DoCastAOE(SPELL_FLAMEBUFFET);                                events.ScheduleEvent(EVENT_FLAME, 10000, 0, PHASE_PERMAGROUND);                                return;                            case EVENT_BREATH:                                me->MonsterTextEmote(EMOTE_BREATH, 0, true);                                DoCastVictim(SPELL_FLAMEBREATH);                                events.ScheduleEvent(EVENT_BREATH, 20000, 0, PHASE_PERMAGROUND);                                return;                            case EVENT_FIREBALL:                                if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 200.0f, true))                                    DoCast(target, SPELL_FIREBALL);                                events.ScheduleEvent(EVENT_FIREBALL, 3000, 0, PHASE_PERMAGROUND);                                return;                            case EVENT_DEVOURING:                                if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 200.0f, true))                                    DoCast(target, SPELL_DEVOURING_FLAME);                                events.ScheduleEvent(EVENT_DEVOURING, 10000, 0, PHASE_PERMAGROUND);                                return;                            case EVENT_BUFFET:                                DoCastAOE(SPELL_WINGBUFFET);                                events.CancelEvent(EVENT_BUFFET);                                return;                            case EVENT_FUSE://.........这里部分代码省略.........
开发者ID:SkyFireArchives,项目名称:SkyFireEMU_406a,代码行数:101,


示例21: DoCast

void boss_attumen::boss_attumenAI::UpdateAI(const uint32 diff){    if (ResetTimer)    {        if (ResetTimer <= diff)        {            ResetTimer = 0;            Unit* midnight = Unit::GetUnit(*me, Midnight);            if (midnight)            {                midnight->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);                midnight->SetVisible(true);            }            Midnight = 0;            me->SetVisible(false);            me->Kill(me);        }    } else ResetTimer -= diff;    //Return since we have no target    if (!UpdateVictim())        return;    if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE))        return;    if (CleaveTimer <= diff)    {        DoCast(me->getVictim(), SPELL_SHADOWCLEAVE);        CleaveTimer = urand(10000, 15000);    } else CleaveTimer -= diff;    if (CurseTimer <= diff)    {        DoCast(me->getVictim(), SPELL_INTANGIBLE_PRESENCE);        CurseTimer = 30000;    } else CurseTimer -= diff;    if (RandomYellTimer <= diff)    {        DoScriptText(RAND(SAY_RANDOM1, SAY_RANDOM2), me);        RandomYellTimer = urand(30000, 60000);    } else RandomYellTimer -= diff;    if (me->GetUInt32Value(UNIT_FIELD_DISPLAYID) == MOUNTED_DISPLAYID)    {        if (ChargeTimer <= diff)        {            Unit* target = NULL;            std::list<HostileReference*> t_list = me->getThreatManager().getThreatList();            std::vector<Unit*> target_list;            for (std::list<HostileReference*>::const_iterator itr = t_list.begin(); itr!= t_list.end(); ++itr)            {                target = Unit::GetUnit(*me, (*itr)->getUnitGuid());                if (target && !target->IsWithinDist(me, ATTACK_DISTANCE, false))                    target_list.push_back(target);                target = NULL;            }            if (!target_list.empty())                target = *(target_list.begin()+rand()%target_list.size());            DoCast(target, SPELL_BERSERKER_CHARGE);            ChargeTimer = 20000;        } else ChargeTimer -= diff;    }    else    {        if (HealthBelowPct(25))        {            Creature* midnight = Unit::GetCreature(*me, Midnight);            if (midnight && midnight->GetTypeId() == TYPEID_UNIT)            {                CAST_AI(boss_midnight::boss_midnightAI, (midnight->AI()))->Mount(me);                me->SetHealth(midnight->GetHealth());                DoResetThreat();            }        }    }    DoMeleeAttackIfReady();}
开发者ID:Exodius,项目名称:Atlantiss,代码行数:81,


示例22: UpdateAI

            void UpdateAI(const uint32 diff)            {                if (!Init)                {                    if (EventProgress_Timer <= diff)                    {                        if (Phase < 8)                        {                            switch(Phase)                            {                            case 1:                                DoScriptText(SAY_INTRO_1, me);                                EventProgress_Timer = 18000;                                break;                            case 2:                                DoScriptText(SAY_INTRO_2, me);                                EventProgress_Timer = 18000;                                break;                            case 3:                                DoScriptText(SAY_WATER, me);                                DoCast(me, SPELL_CONJURE_WATER);                                EventProgress_Timer = 7000;                                break;                            case 4:                                DoScriptText(SAY_BUFFS, me);                                DoCast(me, SPELL_ICE_ARMOR);                                EventProgress_Timer = 7000;                                break;                            case 5:                                DoScriptText(SAY_DRINK, me);                                DoCast(me, SPELL_ARCANE_INTELLECT);                                EventProgress_Timer = 7000;                                break;                            case 6:                                DoScriptText(SAY_READY, me);                                EventProgress_Timer = 6000;                                break;                            case 7:                                if (pInstance)                                    pInstance->SetData(TYPE_WARDEN_2, DONE);                                Init = true;                                break;                            }                            ++Phase;                        }                    }                    else                        EventProgress_Timer -= diff;                }                if (!UpdateVictim())                    return;                if (!LowHp && HealthBelowPct(20))                {                    DoScriptText(SAY_LOWHP, me);                    LowHp = true;                }                if (Pyroblast_Timer <= diff)                {                    if (me->IsNonMeleeSpellCasted(false))                        return;                    DoScriptText(SAY_PYRO, me);                    DoCast(me->getVictim(), SPELL_PYROBLAST);                    Pyroblast_Timer = 40000;                }                else                    Pyroblast_Timer -=diff;                if (Fireball_Timer <= diff)                {                    DoCast(me->getVictim(), SPELL_FIREBALL);                    Fireball_Timer = 4000;                }                else                    Fireball_Timer -=diff;                DoMeleeAttackIfReady();            }
开发者ID:FrenchCORE,项目名称:OLD_FrenchCORE,代码行数:81,


示例23: UpdateAI

        void UpdateAI(const uint32 diff)        {            //Return since we have no target            if (!UpdateVictim())                return;            //Earthquake_Timer            if (Earthquake_Timer <= diff)            {                if (!Earthquake)                {                    DoCast(me->getVictim(), SPELL_EARTHQUAKE);                    Earthquake = true;                    Earthquake_Timer = 10000;                }                else                {                    DoScriptText(RAND(SAY_SUMMON1, SAY_SUMMON2), me);                    for (uint8 i = 0; i < 10; ++i)                    {                        Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0);                        Creature* Murloc = me->SummonCreature(NPC_TIDEWALKER_LURKER, MurlocCords[i][0], MurlocCords[i][1], MurlocCords[i][2], MurlocCords[i][3], TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000);                        if (target && Murloc)                            Murloc->AI()->AttackStart(target);                    }                    DoScriptText(EMOTE_EARTHQUAKE, me);                    Earthquake = false;                    Earthquake_Timer = 40000+rand()%5000;                }            } else Earthquake_Timer -= diff;            //TidalWave_Timer            if (TidalWave_Timer <= diff)            {                DoCast(me->getVictim(), SPELL_TIDAL_WAVE);                TidalWave_Timer = 20000;            } else TidalWave_Timer -= diff;            if (!Phase2)            {                //WateryGrave_Timer                if (WateryGrave_Timer <= diff)                {                    //Teleport 4 players under the waterfalls                    Unit* target;                    std::set<uint64> list;                    std::set<uint64>::const_iterator itr;                    for (uint8 i = 0; i < 4; ++i)                    {                        counter = 0;                        do                        {                            target = SelectTarget(SELECT_TARGET_RANDOM, 1, 50, true);    //target players only                            if (counter < Playercount)                                break;                            if (target)                                itr = list.find(target->GetGUID());                            ++counter;                        } while (itr != list.end());                        if (target)                        {                            list.insert(target->GetGUID());                            ApplyWateryGrave(target, i);                        }                    }                    DoScriptText(RAND(SAY_SUMMON_BUBL1, SAY_SUMMON_BUBL2), me);                    DoScriptText(EMOTE_WATERY_GRAVE, me);                    WateryGrave_Timer = 30000;                } else WateryGrave_Timer -= diff;                //Start Phase2                if (HealthBelowPct(25))                    Phase2 = true;            }            else            {                //WateryGlobules_Timer                if (WateryGlobules_Timer <= diff)                {                    Unit* pGlobuleTarget;                    std::set<uint64> globulelist;                    std::set<uint64>::const_iterator itr;                    for (uint8 g = 0; g < 4; g++)  //one unit can't cast more than one spell per update, so some players have to cast for us XD                    {                        counter = 0;                        do                        {                            pGlobuleTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 50, true);                            if (pGlobuleTarget)                                itr = globulelist.find(pGlobuleTarget->GetGUID());                            if (counter > Playercount)                                break;                            ++counter;                        } while (itr != globulelist.end());                        if (pGlobuleTarget)                        {//.........这里部分代码省略.........
开发者ID:LocosPorelVerde,项目名称:LPV-Server,代码行数:101,


示例24: UpdateAI

            void UpdateAI(const uint32 diff)            {                //Return since we have no target                if (!UpdateVictim())                    return;                if (Summon_Timer <= diff)                {                    for (uint8 i = 0; i < 3; ++i)                    {                        Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0);                        Creature* Wraith = me->SummonCreature(21062, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000);                        if (target && Wraith)                            Wraith->AI()->AttackStart(target);                    }                    DoScriptText(SAY_SUMMON, me);                    Summon_Timer = urand(30000, 45000);                }                else                    Summon_Timer -= diff;                if (ManaTap_Timer <= diff)                {                    DoCast(me->getVictim(), SPELL_MANA_TAP);                    ManaTap_Timer = urand(14000, 22000);                }                else                    ManaTap_Timer -= diff;                if (ArcaneTorrent_Timer <= diff)                {                    DoCast(me->getVictim(), SPELL_ARCANE_TORRENT);                    ArcaneTorrent_Timer = urand(12000, 18000);                }                else                    ArcaneTorrent_Timer -= diff;                if (Domination_Timer <= diff)                {                    if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1))                    {                        DoScriptText(RAND(SAY_DOMINATION_1, SAY_DOMINATION_2), me);                        DoCast(target, SPELL_DOMINATION);                    }                    Domination_Timer = urand(25000, 30000);                }                else                    Domination_Timer -= diff;                //Only casting if Heroic Mode is used                if (IsHeroic())                {                    if (ArcaneExplosion_Timer <= diff)                    {                        DoCast(me->getVictim(), H_SPELL_ARCANE_EXPLOSION);                        ArcaneExplosion_Timer = urand(10000, 14000);                    }                    else                        ArcaneExplosion_Timer -= diff;                }                if (!Enraged && HealthBelowPct(21))                {                    DoCast(me, SPELL_FRENZY);                    DoScriptText(SAY_ENRAGE, me);                    Enraged = true;                }                DoMeleeAttackIfReady();            }
开发者ID:4m1g0,项目名称:TrinityCore,代码行数:71,


示例25: UpdateAI

        void UpdateAI(const uint32 diff)        {            switch (Phase)            {                case COMBAT:                    //Return since we have no target                    if (!UpdateVictim())                        return;                    if (!bYelled && HealthBelowPct(30))                    {                        Talk(SAY_30HEALTH);                        bYelled = true;                    }                    if (!bYelled2 && HealthBelowPct(15))                    {                        Talk(SAY_15HEALTH);                        bYelled2 = true;                    }                    if (HealthBelowPct(1))                    {                        //Handle Escape Event: Don't forget to add Player::RewardPlayerAndGroupAtEvent                        me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);                        uiOutroStep = 1;                        Phase = OUTRO;                        return;                    }                    if (Creature* pArthas = me->GetCreature(*me, instance ? instance->GetData64(DATA_ARTHAS) : 0))                        if (pArthas->isDead())                        {                            EnterEvadeMode();                            me->DisappearAndDie();                            if (instance)                                instance->SetData(DATA_MAL_GANIS_EVENT, FAIL);                        }                    if (uiCarrionSwarmTimer < diff)                    {                        DoCastVictim(SPELL_CARRION_SWARM);                        uiCarrionSwarmTimer = 7000;                    } else uiCarrionSwarmTimer -= diff;                    if (uiMindBlastTimer < diff)                    {                        if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))                            DoCast(target, SPELL_MIND_BLAST);                        uiMindBlastTimer = 6000;                    } else uiMindBlastTimer -= diff;                    if (uiVampiricTouchTimer < diff)                    {                        DoCast(me, SPELL_VAMPIRIC_TOUCH);                        uiVampiricTouchTimer = 32000;                    } else uiVampiricTouchTimer -= diff;                    if (uiSleepTimer < diff)                    {                        Talk(SAY_SLEEP);                        if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))                            DoCast(target, SPELL_SLEEP);                        uiSleepTimer = urand(15000, 20000);                    } else uiSleepTimer -= diff;                    DoMeleeAttackIfReady();                    break;                case OUTRO:                    if (uiOutroTimer < diff)                    {                        switch (uiOutroStep)                        {                            case 1:                                Talk(SAY_ESCAPE_SPEECH_1);                                me->GetMotionMaster()->MoveTargetedHome();                                ++uiOutroStep;                                uiOutroTimer = 8000;                                break;                            case 2:                                me->SetTarget(instance ? instance->GetData64(DATA_ARTHAS) : 0);                                me->HandleEmoteCommand(29);                                Talk(SAY_ESCAPE_SPEECH_2);                                ++uiOutroStep;                                uiOutroTimer = 9000;                                break;                            case 3:                                Talk(SAY_OUTRO);                                ++uiOutroStep;                                uiOutroTimer = 16000;                                break;                            case 4:                                me->HandleEmoteCommand(33);                                ++uiOutroStep;                                uiOutroTimer = 500;                                break;                            case 5:                                me->SetVisible(false);                                me->Kill(me);                                break;//.........这里部分代码省略.........
开发者ID:8Infinity8,项目名称:InfinityCore,代码行数:101,


示例26: UpdateEscortAI

//.........这里部分代码省略.........                        if (instance)                            if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_KADDRAK)))                                temp->AI()->Talk(SAY_EVENT_END_09_KADD);                        JumpToNextStep(18500);                        break;                    case 37:                        Talk(SAY_EVENT_END_10);                        JumpToNextStep(5500);                        break;                    case 38:                        if (instance)                            if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_KADDRAK)))                                temp->AI()->Talk(SAY_EVENT_END_11_KADD);                            JumpToNextStep(20500);                        break;                    case 39:                        Talk(SAY_EVENT_END_12);                        JumpToNextStep(2500);                        break;                    case 40:                        if (instance)                            if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_KADDRAK)))                                temp->AI()->Talk(SAY_EVENT_END_13_KADD);                        JumpToNextStep(19500);                        break;                    case 41:                        Talk(SAY_EVENT_END_14);                        JumpToNextStep(10500);                        break;                    case 42:                        if (instance)                            if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_MARNAK)))                                temp->AI()->Talk(SAY_EVENT_END_15_MARN);                            JumpToNextStep(6500);                        break;                    case 43:                        Talk(SAY_EVENT_END_16);                        JumpToNextStep(6500);                        break;                    case 44:                        if (instance)                            if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_MARNAK)))                                temp->AI()->Talk(SAY_EVENT_END_17_MARN);                            JumpToNextStep(25500);                        break;                    case 45:                        Talk(SAY_EVENT_END_18);                        JumpToNextStep(23500);                        break;                    case 46:                        if (instance)                            if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_MARNAK)))                                temp->AI()->Talk(SAY_EVENT_END_19_MARN);                            JumpToNextStep(3500);                        break;                    case 47:                        Talk(SAY_EVENT_END_20);                        JumpToNextStep(8500);                        break;                    case 48:                        if (instance)                            if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))                                temp->AI()->Talk(SAY_EVENT_END_21_ABED);                            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))            {                Talk(SAY_LOW_HEALTH);                bIsLowHP = true;            }            else if (bIsLowHP && !HealthBelowPct(30))                bIsLowHP = false;            if (!UpdateVictim())                return;            DoMeleeAttackIfReady();        }
开发者ID:Carbinfibre,项目名称:Script-Land,代码行数:101,


示例27: UpdateAI

             void UpdateAI(const uint32 diff)            {                if (!UpdateVictim())                    return;                if (BerserkTimer <= diff)                {                    me->MonsterYell(YELL_BERSERK, LANG_UNIVERSAL, NULL);                    DoPlaySoundToSet(me, SOUND_BERSERK);                    DoCast(me, SPELL_BERSERK, true);                    BerserkTimer = 60000;                } else BerserkTimer -= diff;                if (Phase == PHASE_LYNX || Phase == PHASE_ENRAGE)                {                    if (SaberlashTimer <= diff)                    {                        // A tank with more than 490 defense skills should receive no critical hit                        //DoCast(me, 41296, true);                        DoCast(me->getVictim(), SPELL_SABER_LASH, true);                        //me->RemoveAurasDueToSpell(41296);                        SaberlashTimer = 30000;                    } else SaberlashTimer -= diff;                    if (FrenzyTimer <= diff)                    {                        DoCast(me, SPELL_FRENZY);                        FrenzyTimer = urand(10000,15000);                    } else FrenzyTimer -= diff;                    if (Phase == PHASE_LYNX)                    {                        if (CheckTimer <= diff)                        {                            if (HealthBelowPct(25 * (3 - TransformCount)))                                EnterPhase(PHASE_SPLIT);                            CheckTimer = 1000;                        } else CheckTimer -= diff;                    }                }                if (Phase == PHASE_HUMAN || Phase == PHASE_ENRAGE)                {                    if (TotemTimer <= diff)                    {                        DoCast(me, SPELL_SUMMON_TOTEM);                        TotemTimer = 20000;                    } else TotemTimer -= diff;                    if (ShockTimer <= diff)                    {                        if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0))                        {                            if (pTarget->IsNonMeleeSpellCasted(false))                                DoCast(pTarget, SPELL_EARTHSHOCK);                            else                                DoCast(pTarget, SPELL_FLAMESHOCK);                            ShockTimer = 10000 + rand()%5000;                        }                    } else ShockTimer -= diff;                    if (Phase == PHASE_HUMAN)                    {                        if (CheckTimer <= diff)                        {                            if (!HealthAbovePct(20) /*HealthBelowPct(10)*/)                                EnterPhase(PHASE_MERGE);                            else                            {                                Unit *Lynx = Unit::GetUnit(*me, LynxGUID);                                if (Lynx && !Lynx->HealthAbovePct(20) /*Lynx->HealthBelowPct(10)*/)                                    EnterPhase(PHASE_MERGE);                            }                            CheckTimer = 1000;                        } else CheckTimer -= diff;                    }                }                if (Phase == PHASE_MERGE)                {                    if (CheckTimer <= diff)                    {                        Unit *Lynx = Unit::GetUnit(*me, LynxGUID);                        if (Lynx)                        {                            Lynx->GetMotionMaster()->MoveFollow(me, 0, 0);                            me->GetMotionMaster()->MoveFollow(Lynx, 0, 0);                            if (me->IsWithinDistInMap(Lynx, 6.0f))                            {                                if (TransformCount < 3)                                    EnterPhase(PHASE_LYNX);                                else                                    EnterPhase(PHASE_ENRAGE);                            }                        }                        CheckTimer = 1000;                    } else CheckTimer -= diff;                }                DoMeleeAttackIfReady();//.........这里部分代码省略.........
开发者ID:1024wow,项目名称:TrinityCore,代码行数:101,


示例28: UpdateAI

        void UpdateAI(const uint32 diff)        {            if (!UpdateVictim())                return;            //Shimmer_Timer Timer            if (Shimmer_Timer <= diff)            {                //Remove old vulnerabilty spell                if (CurrentVurln_Spell)                    me->RemoveAurasDueToSpell(CurrentVurln_Spell);                //Cast new random vulnerabilty on self                uint32 spell = RAND(SPELL_FIRE_VULNERABILITY, SPELL_FROST_VULNERABILITY,                    SPELL_SHADOW_VULNERABILITY, SPELL_NATURE_VULNERABILITY, SPELL_ARCANE_VULNERABILITY);                DoCast(me, spell);                CurrentVurln_Spell = spell;                DoScriptText(EMOTE_SHIMMER, me);                Shimmer_Timer = 45000;            } else Shimmer_Timer -= diff;            //Breath1_Timer            if (Breath1_Timer <= diff)            {                DoCast(me->getVictim(), Breath1_Spell);                Breath1_Timer = 60000;            } else Breath1_Timer -= diff;            //Breath2_Timer            if (Breath2_Timer <= diff)            {                DoCast(me->getVictim(), Breath2_Spell);                Breath2_Timer = 60000;            } else Breath2_Timer -= diff;            //Affliction_Timer            if (Affliction_Timer <= diff)            {                std::list<HostileReference*> threatlist = me->getThreatManager().getThreatList();                for (std::list<HostileReference*>::const_iterator i = threatlist.begin(); i != threatlist.end(); ++i)                {                    Unit* pUnit;                    if ((*i) && (*i)->getSource())                    {                        pUnit = Unit::GetUnit((*me), (*i)->getUnitGuid());                        if (pUnit)                        {                            //Cast affliction                            DoCast(pUnit, RAND(SPELL_BROODAF_BLUE, SPELL_BROODAF_BLACK,                                               SPELL_BROODAF_RED, SPELL_BROODAF_BRONZE, SPELL_BROODAF_GREEN), true);                            //Chromatic mutation if target is effected by all afflictions                            if (pUnit->HasAura(SPELL_BROODAF_BLUE)                                && pUnit->HasAura(SPELL_BROODAF_BLACK)                                && pUnit->HasAura(SPELL_BROODAF_RED)                                && pUnit->HasAura(SPELL_BROODAF_BRONZE)                                && pUnit->HasAura(SPELL_BROODAF_GREEN))                            {                                //pTarget->RemoveAllAuras();                                //DoCast(pTarget, SPELL_CHROMATIC_MUT_1);                                //Chromatic mutation is causing issues                                //Assuming it is caused by a lack of core support for Charm                                //So instead we instant kill our target                                //WORKAROUND                                if (pUnit->GetTypeId() == TYPEID_PLAYER)                                    pUnit->CastSpell(pUnit, 5, false);                            }                        }                    }                }                Affliction_Timer = 10000;            } else Affliction_Timer -= diff;            //Frenzy_Timer            if (Frenzy_Timer <= diff)            {                DoCast(me, SPELL_FRENZY);                DoScriptText(EMOTE_FRENZY, me);                Frenzy_Timer = urand(10000, 15000);            } else Frenzy_Timer -= diff;            //Enrage if not already enraged and below 20%            if (!Enraged && HealthBelowPct(20))            {                DoCast(me, SPELL_ENRAGE);                Enraged = true;            }            DoMeleeAttackIfReady();        }
开发者ID:AwkwardDev,项目名称:CataOld,代码行数:95,



注:本文中的HealthBelowPct函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ HeapAlloc函数代码示例
C++ HealthAbovePct函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。