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

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

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

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

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

示例1: UpdateAI

    void UpdateAI (const uint32 diff)    {        if (!UpdateVictim())            return;        if (PhaseTwo)        {            me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);            me->setDeathState(JUST_DIED);            me->SetHealth(0);            me->GetMotionMaster()->Clear();            me->clearUnitState(UNIT_STAT_ALL_STATE);            me->LoadCreaturesAddon(true);            return;        }        if (ZathDead)            return;        // Resurrect        if (ThekalDead || LorkhanDead)            if (!IsResurrecting && (CheckDeath_Timer - 2000) <= diff)            {                if (LorkhanDead)                    if (Unit* pLorkhan = Unit::GetUnit(*me, LorkhanGUID))                        pLorkhan->CastSpell(pLorkhan, SPELL_RESURRECT, false, 0, 0, pLorkhan->GetGUID());                if (ThekalDead)                    if (Unit* pThekal = Unit::GetUnit(*me, ThekalGUID))                        pThekal->CastSpell(pThekal, SPELL_RESURRECT, false, 0, 0, pThekal->GetGUID());                IsResurrecting = true;            }            else            if (LorkhanDead && ThekalDead)                CheckDeath_Timer -= diff;        // Sweeping Strikes Timer        if (SweepingStrikes_Timer <= diff)        {            DoCast(me->getVictim(), SPELL_SWEEPINGSTRIKES);            SweepingStrikes_Timer = 22000 + rand()%4000;        }        else            SweepingStrikes_Timer -= diff;        // Sinister Strike Timer        if (SinisterStrike_Timer <= diff)        {            DoCast(me->getVictim(), SPELL_SINISTERSTRIKE);            SinisterStrike_Timer = 8000 + rand()%8000;        }        else            SinisterStrike_Timer -= diff;        // Gouge Timer        if (Gouge_Timer <= diff)        {            DoCast(me->getVictim(), SPELL_GOUGE);            if (DoGetThreat(me->getVictim()))                DoModifyThreatPercent(me->getVictim(), -100);            Gouge_Timer = 17000 + rand()%10000;        }        else            Gouge_Timer -= diff;        // Kick Timer        if (Kick_Timer <= diff)        {            DoCast(me->getVictim(), SPELL_KICK);            Kick_Timer = 15000 + rand()%10000;        }        else            Kick_Timer -= diff;        // Blind Timer        if (Blind_Timer <= diff)        {            DoCast(me->getVictim(), SPELL_BLIND);            Blind_Timer = 10000 + rand()%10000;        }        else            Blind_Timer -= diff;        DoMeleeAttackIfReady();    }
开发者ID:AwkwardDev,项目名称:Project-WoW,代码行数:86,


示例2: _ResetThreat

 void _ResetThreat(Unit* target) {     DoModifyThreatPercent(target, -100);     me->AddThreat(target, _tempThreat); }
开发者ID:heros,项目名称:LasCore,代码行数:5,


示例3: UpdateAI

    void UpdateAI(const uint32 diff)    {        if(!UpdateVictim())            return;        if(!m_creature->HasAura(SPELL_BERSERK, 0))        {            if(EnrageTimer < diff)            {                DoCast(m_creature, SPELL_BERSERK);                switch(rand()%2)                {                case 0: DoScriptText(SAY_ENRAGE1, m_creature); break;                case 1: DoScriptText(SAY_ENRAGE2, m_creature); break;                }            }else EnrageTimer -= diff;        }        if(ArcingSmashTimer < diff)        {            DoCast(m_creature->getVictim(),Phase1 ? SPELL_ARCING_SMASH_1 : SPELL_ARCING_SMASH_2);            ArcingSmashTimer = 10000;        }else ArcingSmashTimer -= diff;        if(FelBreathTimer < diff)        {            DoCast(m_creature->getVictim(),Phase1 ? SPELL_FELBREATH_1 : SPELL_FELBREATH_2);            FelBreathTimer = 25000;        }else FelBreathTimer -= diff;        if(EjectTimer < diff)        {            DoCast(m_creature->getVictim(),Phase1 ? SPELL_EJECT_1 : SPELL_EJECT_2);            EjectTimer = 15000;        }else EjectTimer -= diff;        if(Charge_Timer < diff)        {            if(m_creature->GetDistance2d(m_creature->getVictim()) > 15)                DoCast(m_creature->getVictim(),SPELL_CHARGE);            Charge_Timer = 10000;        }else Charge_Timer -= diff;        if(Phase1)        {            if(BewilderingStrikeTimer < diff)            {                DoCast(m_creature->getVictim(), SPELL_BEWILDERING_STRIKE);                BewilderingStrikeTimer = 20000;            }else BewilderingStrikeTimer -= diff;            if(BloodboilTimer < diff)            {                if(BloodboilCount < 5)                      // Only cast it five times.                {                    CastBloodboil(); // Causes issues on windows, so is commented out.                    //DoCast(m_creature->getVictim(), SPELL_BLOODBOIL);                    ++BloodboilCount;                    BloodboilTimer = 10000;                }            }else BloodboilTimer -= diff;        }        if(!Phase1)        {            if(FelGeyserTimer < diff)            {                DoCast(m_creature->getVictim(), SPELL_FEL_GEYSER);                FelGeyserTimer = 30000;            }else FelGeyserTimer -= diff;            if(m_creature->getVictim()->IsImmunedToDamage(SPELL_SCHOOL_MASK_ALL,true))                m_creature->getThreatManager().modifyThreatPercent(m_creature->getVictim(),-100);        }        if(PhaseChangeTimer < diff)        {            if(Phase1)            {                Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0,100,true);                if(target && target->isAlive())                {                    Phase1 = false;                    TargetThreat = DoGetThreat(target);                    TargetGUID = target->GetGUID();                    if(DoGetThreat(target))                        DoModifyThreatPercent(target, -100);                    m_creature->AddThreat(target, 50000000.0f);                    target->CastSpell(m_creature, SPELL_TAUNT_GURTOGG, true);                    m_creature->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_TAUNT, true);                    m_creature->ApplySpellImmune(0, IMMUNITY_EFFECT,SPELL_EFFECT_ATTACK_ME, true);                    // If VMaps are disabled, this spell can call the whole instance                    DoCast(m_creature, SPELL_INSIGNIFIGANCE, true);                    DoCast(target,SPELL_FEL_RAGE_1, true);                    DoCast(target,SPELL_FEL_RAGE_2, true);                    DoCast(target,SPELL_FEL_RAGE_3, true);                    DoCast(target,SPELL_FEL_RAGE_SCALE, true);//.........这里部分代码省略.........
开发者ID:Denominator13,项目名称:NeoCore,代码行数:101,


示例4: UpdateAI

        void UpdateAI(const uint32 diff)        {            if (!UpdateVictim())                return;            if (ArcingSmashTimer <= diff)            {                DoCast(me->getVictim(), SPELL_ARCING_SMASH);                ArcingSmashTimer = 10000;            } else ArcingSmashTimer -= diff;            if (FelAcidTimer <= diff)            {                DoCast(me->getVictim(), SPELL_FEL_ACID);                FelAcidTimer = 25000;            } else FelAcidTimer -= diff;            if (!me->HasAura(SPELL_BERSERK))            {                if (EnrageTimer <= diff)                {                    DoCast(me, SPELL_BERSERK);                    DoScriptText(RAND(SAY_ENRAGE1, SAY_ENRAGE2), me);                } else EnrageTimer -= diff;            }            if (Phase1)            {                if (BewilderingStrikeTimer <= diff)                {                    DoCast(me->getVictim(), SPELL_BEWILDERING_STRIKE);                    float mt_threat = DoGetThreat(me->getVictim());                    if (Unit* target = SelectTarget(SELECT_TARGET_TOPAGGRO, 1))                        me->AddThreat(target, mt_threat);                    BewilderingStrikeTimer = 20000;                } else BewilderingStrikeTimer -= diff;                if (EjectTimer <= diff)                {                    DoCast(me->getVictim(), SPELL_EJECT1);                    DoModifyThreatPercent(me->getVictim(), -40);                    EjectTimer = 15000;                } else EjectTimer -= diff;                if (AcidicWoundTimer <= diff)                {                    DoCast(me->getVictim(), SPELL_ACIDIC_WOUND);                    AcidicWoundTimer = 10000;                } else AcidicWoundTimer -= diff;                if (BloodboilTimer <= diff)                {                    if (BloodboilCount < 5)                      // Only cast it five times.                    {                        //CastBloodboil(); // Causes issues on windows, so is commented out.                        DoCast(me->getVictim(), SPELL_BLOODBOIL);                        ++BloodboilCount;                        BloodboilTimer = 10000*BloodboilCount;                    }                } else BloodboilTimer -= diff;            }            if (!Phase1)            {                if (AcidGeyserTimer <= diff)                {                    DoCast(me->getVictim(), SPELL_ACID_GEYSER);                    AcidGeyserTimer = 30000;                } else AcidGeyserTimer -= diff;                if (EjectTimer <= diff)                {                    DoCast(me->getVictim(), SPELL_EJECT2);                    EjectTimer = 15000;                } else EjectTimer -= diff;            }            if (PhaseChangeTimer <= diff)            {                if (Phase1)                {                    Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0);                    if (target && target->isAlive())                    {                        Phase1 = false;                        TargetThreat = DoGetThreat(target);                        TargetGUID = target->GetGUID();                        target->CastSpell(me, SPELL_TAUNT_GURTOGG, true);                        if (DoGetThreat(target))                            DoModifyThreatPercent(target, -100);                        me->AddThreat(target, 50000000.0f);                        me->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_TAUNT, true);                        me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_ATTACK_ME, true);                                                                // If VMaps are disabled, this spell can call the whole instance                        DoCast(me, SPELL_INSIGNIFIGANCE, true);                        DoCast(target, SPELL_FEL_RAGE_TARGET, true);                        DoCast(target, SPELL_FEL_RAGE_2, true);                        /* These spells do not work, comment them out for now.                        DoCast(target, SPELL_FEL_RAGE_2, true);//.........这里部分代码省略.........
开发者ID:kmN666,项目名称:Leroy,代码行数:101,


示例5: UpdateAI

//.........这里部分代码省略.........                    }                }                if (ShadowNovaTimer > 35000)                    ShadowNovaTimer = EnfeebleTimer + 5000;                return;            }            if (SunderArmorTimer <= diff)            {                DoCast(me->getVictim(), SPELL_SUNDER_ARMOR);                SunderArmorTimer = urand(10000,18000);            } else SunderArmorTimer -= diff;            if (Cleave_Timer <= diff)            {                DoCast(me->getVictim(), SPELL_CLEAVE);                Cleave_Timer = urand(6000,12000);            } else Cleave_Timer -= diff;        }        else        {            if (AxesTargetSwitchTimer <= diff)            {                AxesTargetSwitchTimer = urand(7500,20000);                if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))                {                    for (uint8 i = 0; i < 2; ++i)                    {                        if (Unit *axe = Unit::GetUnit(*me, axes[i]))                        {                            if (axe->getVictim())                                DoModifyThreatPercent(axe->getVictim(), -100);                            if (pTarget)                                axe->AddThreat(pTarget, 1000000.0f);                            //axe->getThreatManager().tauntFadeOut(axe->getVictim());                            //axe->getThreatManager().tauntApply(pTarget);                        }                    }                }            } else AxesTargetSwitchTimer -= diff;            if (AmplifyDamageTimer <= diff)            {                if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))                    DoCast(pTarget, SPELL_AMPLIFY_DAMAGE);                AmplifyDamageTimer = urand(20000,30000);            } else AmplifyDamageTimer -= diff;        }        //Time for global and double timers        if (InfernalTimer <= diff)        {            SummonInfernal(diff);            InfernalTimer = phase == 3 ? 14500 : 44500;    // 15 secs in phase 3, 45 otherwise        } else InfernalTimer -= diff;        if (ShadowNovaTimer <= diff)        {            DoCast(me->getVictim(), SPELL_SHADOWNOVA);            ShadowNovaTimer = phase == 3 ? 31000 : uint32(-1);        } else ShadowNovaTimer -= diff;        if (phase != 2)        {            if (SWPainTimer <= diff)            {                Unit *pTarget = NULL;                if (phase == 1)                    pTarget = me->getVictim();        // the tank                else                                          // anyone but the tank                    pTarget = SelectTarget(SELECT_TARGET_RANDOM, 1, 100, true);                if (pTarget)                    DoCast(pTarget, SPELL_SW_PAIN);                SWPainTimer = 20000;            } else SWPainTimer -= diff;        }        if (phase != 3)        {            if (EnfeebleTimer <= diff)            {                EnfeebleHealthEffect();                EnfeebleTimer = 30000;                ShadowNovaTimer = 5000;                EnfeebleResetTimer = 9000;            } else EnfeebleTimer -= diff;        }        if (phase == 2)            DoMeleeAttacksIfReady();        else            DoMeleeAttackIfReady();    }
开发者ID:Agustin1010,项目名称:Oregon-Core,代码行数:101,


示例6: UpdateAI

//.........这里部分代码省略.........                                axe->AddThreat(target, 10000000.0f);                            }                        }                    }                    if (ShadowNovaTimer > 35000)                        ShadowNovaTimer = EnfeebleTimer + 5000;                    return;                }                if (SunderArmorTimer <= diff)                {                    DoCastVictim(SPELL_SUNDER_ARMOR);                    SunderArmorTimer = urand(10000, 18000);                } else SunderArmorTimer -= diff;                if (Cleave_Timer <= diff)                {                    DoCastVictim(SPELL_CLEAVE);                    Cleave_Timer = urand(6000, 12000);                } else Cleave_Timer -= diff;            }            else            {                if (AxesTargetSwitchTimer <= diff)                {                    AxesTargetSwitchTimer = urand(7500, 20000);                    if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))                    {                        for (uint8 i = 0; i < 2; ++i)                        {                            if (Unit* axe = ObjectAccessor::GetUnit(*me, axes[i]))                            {                                if (axe->GetVictim())                                    DoModifyThreatPercent(axe->GetVictim(), -100);                                if (target)                                    axe->AddThreat(target, 1000000.0f);                                //axe->getThreatManager().tauntFadeOut(axe->GetVictim());                                //axe->getThreatManager().tauntApply(target);                            }                        }                    }                } else AxesTargetSwitchTimer -= diff;                if (AmplifyDamageTimer <= diff)                {                    if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))                        DoCast(target, SPELL_AMPLIFY_DAMAGE);                    AmplifyDamageTimer = urand(20000, 30000);                } else AmplifyDamageTimer -= diff;            }            //Time for global and double timers            if (InfernalTimer <= diff)            {                SummonInfernal(diff);                InfernalTimer = phase == 3 ? 14500 : 44500;    // 15 secs in phase 3, 45 otherwise            } else InfernalTimer -= diff;            if (ShadowNovaTimer <= diff)            {                DoCastVictim(SPELL_SHADOWNOVA);                ShadowNovaTimer = phase == 3 ? 31000 : uint32(-1);            } else ShadowNovaTimer -= diff;            if (phase != 2)            {                if (SWPainTimer <= diff)                {                    Unit* target = NULL;                    if (phase == 1)                        target = me->GetVictim();        // the tank                    else                                          // anyone but the tank                        target = SelectTarget(SELECT_TARGET_RANDOM, 1, 100, true);                    if (target)                        DoCast(target, SPELL_SW_PAIN);                    SWPainTimer = 20000;                } else SWPainTimer -= diff;            }            if (phase != 3)            {                if (EnfeebleTimer <= diff)                {                    EnfeebleHealthEffect();                    EnfeebleTimer = 30000;                    ShadowNovaTimer = 5000;                    EnfeebleResetTimer = 9000;                } else EnfeebleTimer -= diff;            }            if (phase == 2)                DoMeleeAttacksIfReady();            else                DoMeleeAttackIfReady();        }
开发者ID:AwkwardDev,项目名称:TinyCore,代码行数:101,


示例7: UpdateAI

        void UpdateAI(const uint32 diff)        {            // World Notify Cooldown            if (notifyCooldown >= diff)                notifyCooldown -= diff;            else                notifyCooldown = 0;            if (!UpdateVictim())                return;            // Defender Quest Credit            if (!defenderCredit)                if (me->getThreatManager().getThreatList().size() >= 5 && me->GetHealthPct() < 90.f) // Anti-Farming Conditions                    defenderCredit = true;            // Boss rescaling            if (rescaleTimer <= diff)            {                HandleScaling();                rescaleTimer = 10000;            } else rescaleTimer -= diff;            events.Update(diff);            if (me->HasUnitState(UNIT_STATE_CASTING))                return;            while (uint32 eventId = events.ExecuteEvent())            {                switch (eventId)                {                    case SPELL_BLIZZARD:                        if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 30.0f, true))                            DoCast(target, SPELL_BLIZZARD);                        events.ScheduleEvent(SPELL_BLIZZARD, urand(15000, 18000));                        break;                    case SPELL_FIRE_BLAST:                        if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 20.0f, true))                            DoCast(target, SPELL_FIRE_BLAST);                        events.ScheduleEvent(SPELL_FIRE_BLAST, urand(5000, 8000));                        break;                    case SPELL_FIREBALL:                        if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 50.0f, true))                            DoCast(target, SPELL_FIREBALL);                        events.ScheduleEvent(SPELL_FIREBALL, urand(7000, 10000));                        break;                    case SPELL_SUMMON_WATER_ELEMENT:                        if (Summons.size() < 4)                            DoCast(me, SPELL_SUMMON_WATER_ELEMENT);                        events.ScheduleEvent(SPELL_SUMMON_WATER_ELEMENT, urand(20000, 30000));                        break;                    case SPELL_TELEPORT:                        if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 50.0f, true))                        {                            DoModifyThreatPercent(target, 100); // Delete Target from Threat List                            DoCast(target, SPELL_TELEPORT);                        }                        events.ScheduleEvent(SPELL_TELEPORT, urand(37000, 52000));                        break;                }            }            DoMeleeAttackIfReady();        }
开发者ID:GlobalWoW,项目名称:TrinityCore,代码行数:65,


示例8: UpdateAI

        void UpdateAI(const uint32 diff)        {            if (!UpdateVictim())                return;            //ArcaneMissiles_Timer            if (ArcaneMissiles_Timer <= diff)            {                DoCast(me->getVictim(), SPELL_ARCANEMISSILES);                ArcaneMissiles_Timer = 8000;            }            else                ArcaneMissiles_Timer -= diff;            //ShadowShield_Timer            if (ShadowShield_Timer <= diff)            {                DoCast(me, SPELL_SHADOWSHIELD);                ShadowShield_Timer = urand(14000, 28000);            }            else                ShadowShield_Timer -= diff;            //Curse_Timer            if (Curse_Timer <= diff)            {                DoCast(me->getVictim(), SPELL_CURSE);                Curse_Timer = urand(15000, 27000);            }            else                Curse_Timer -= diff;            //Teleporting Random Target to one of the six pre boss rooms and spawn 3-4 skeletons near the gamer.            //We will only telport if gandling has more than 3% of hp so teleported gamers can always loot.            if (HealthAbovePct(3))            {                if (Teleport_Timer <= diff)                {                    Unit* target = NULL;                    target = SelectTarget(SELECT_TARGET_RANDOM, 0);                    if (target && target->GetTypeId() == TYPEID_PLAYER)                    {                        if (DoGetThreat(target))                            DoModifyThreatPercent(target, -100);                        Creature* Summoned = NULL;                        switch (rand()%6)                        {                        case 0:                            DoTeleportPlayer(target, 250.0696f, 0.3921f, 84.8408f, 3.149f);                            Summoned = me->SummonCreature(16119, 254.2325f, 0.3417f, 84.8407f, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000);                            if (Summoned)                                Summoned->AI()->AttackStart(target);                            Summoned = me->SummonCreature(16119, 257.7133f, 4.0226f, 84.8407f, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000);                            if (Summoned)                                Summoned->AI()->AttackStart(target);                            Summoned = me->SummonCreature(16119, 258.6702f, -2.60656f, 84.8407f, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000);                            if (Summoned)                                Summoned->AI()->AttackStart(target);                            break;                        case 1:                            DoTeleportPlayer(target, 181.4220f, -91.9481f, 84.8410f, 1.608f);                            Summoned = me->SummonCreature(16119, 184.0519f, -73.5649f, 84.8407f, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000);                            if (Summoned)                                Summoned->AI()->AttackStart(target);                            Summoned = me->SummonCreature(16119, 179.5951f, -73.7045f, 84.8407f, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000);                            if (Summoned)                                Summoned->AI()->AttackStart(target);                            Summoned = me->SummonCreature(16119, 180.6452f, -78.2143f, 84.8407f, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000);                            if (Summoned)                                Summoned->AI()->AttackStart(target);                            Summoned = me->SummonCreature(16119, 283.2274f, -78.1518f, 84.8407f, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000);                            if (Summoned)                                Summoned->AI()->AttackStart(target);                            break;                        case 2:                            DoTeleportPlayer(target, 95.1547f, -1.8173f, 85.2289f, 0.043f);                            Summoned = me->SummonCreature(16119, 100.9404f, -1.8016f, 85.2289f, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000);                            if (Summoned)                                Summoned->AI()->AttackStart(target);                            Summoned = me->SummonCreature(16119, 101.3729f, 0.4882f, 85.2289f, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000);                            if (Summoned)                                Summoned->AI()->AttackStart(target);                            Summoned = me->SummonCreature(16119, 101.4596f, -4.4740f, 85.2289f, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000);                            if (Summoned)                                Summoned->AI()->AttackStart(target);                            break;                        case 3:                            DoTeleportPlayer(target, 250.0696f, 0.3921f, 72.6722f, 3.149f);                            Summoned = me->SummonCreature(16119, 240.34481f, 0.7368f, 72.6722f, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000);                            if (Summoned)                                Summoned->AI()->AttackStart(target);                            Summoned = me->SummonCreature(16119, 240.3633f, -2.9520f, 72.6722f, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000);                            if (Summoned)                                Summoned->AI()->AttackStart(target);                            Summoned = me->SummonCreature(16119, 240.6702f, 3.34949f, 72.6722f, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000);                            if (Summoned)                                Summoned->AI()->AttackStart(target);                            break;                        case 4://.........这里部分代码省略.........
开发者ID:Grimtonz1337,项目名称:JadeCore,代码行数:101,


示例9: UpdateAI

            void UpdateAI(uint32 diff) override            {                if (!UpdateVictim())                    return;                if (me->HasUnitState(UNIT_STATE_CASTING))                    return;                while (uint32 eventId = events.ExecuteEvent())                {                    switch (eventId)                    {                        case EVENT_POUNDING:                            DoCastVictim(SPELL_POUNDING);                            Talk(SAY_POUNDING);                            events.ScheduleEvent(EVENT_POUNDING, 15000);                            break;                        case EVENT_ARCANE_ORB:                        {                            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 = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid());                                if (!target)                                    continue;                                // exclude pets & totems, 18 yard radius minimum                                if (target->GetTypeId() == TYPEID_PLAYER && target->IsAlive() && !target->IsWithinDist(me, 18, false))                                    target_list.push_back(target);                                target = NULL;                            }                            if (!target_list.empty())                                target = *(target_list.begin() + rand32() % target_list.size());                            else                                target = me->GetVictim();                            if (target)                                me->CastSpell(target, SPELL_ARCANE_ORB, false, NULL, NULL);                            events.ScheduleEvent(EVENT_ARCANE_ORB, 3000);                            break;                        }                        case EVENT_KNOCK_AWAY:                            DoCastVictim(SPELL_KNOCK_AWAY);                            // Drop 25% aggro                            if (DoGetThreat(me->GetVictim()))                                DoModifyThreatPercent(me->GetVictim(), -25);                            events.ScheduleEvent(EVENT_KNOCK_AWAY, 30000);                            break;                        case EVENT_BERSERK:                            if (!Enraged)                            {                                DoCast(me, SPELL_BERSERK);                                Enraged = true;                            }                            break;                        default:                            break;                    }                }                DoMeleeAttackIfReady();                EnterEvadeIfOutOfCombatArea(diff);            }
开发者ID:beyourself,项目名称:DeathCore_6.x,代码行数:68,


示例10: UpdateAI

    void UpdateAI(const uint32 diff)    {        if (!UpdateVictim() )            return;        // Pounding        if(Pounding_Timer < diff)        {            DoCast(m_creature->getVictim(),SPELL_POUNDING);            switch(rand()%2)            {            case 0: DoScriptText(SAY_POUNDING1, m_creature); break;            case 1: DoScriptText(SAY_POUNDING2, m_creature); break;            }             Pounding_Timer = 15000;                         //cast time(3000) + cooldown time(12000)        }else Pounding_Timer -= diff;        // Arcane Orb        if(ArcaneOrb_Timer < diff)        {            Unit *target = NULL;            std::list<HostilReference *> t_list = m_creature->getThreatManager().getThreatList();            std::vector<Unit *> target_list;            for(std::list<HostilReference *>::iterator itr = t_list.begin(); itr!= t_list.end(); ++itr)            {                target = Unit::GetUnit(*m_creature, (*itr)->getUnitGuid());                                                            //18 yard radius minimum                if(target && target->GetTypeId() == TYPEID_PLAYER && target->isAlive() && target->GetDistance2d(m_creature) >= 18)                    target_list.push_back(target);                target = NULL;            }            if(target_list.size())                target = *(target_list.begin()+rand()%target_list.size());            if (target)                m_creature->CastSpell(target->GetPositionX(),target->GetPositionY(),target->GetPositionZ(), SPELL_ARCANE_ORB, false);            ArcaneOrb_Timer = 3000;        }else ArcaneOrb_Timer -= diff;        // Single Target knock back, reduces aggro        if(KnockAway_Timer < diff)        {            DoCast(m_creature->getVictim(),SPELL_KNOCK_AWAY);            //Drop 25% aggro            if(DoGetThreat(m_creature->getVictim()))                DoModifyThreatPercent(m_creature->getVictim(),-25);            KnockAway_Timer = 30000;        }else KnockAway_Timer -= diff;        //Berserk        if(Berserk_Timer < diff && !Enraged)        {            DoCast(m_creature,SPELL_BERSERK);            Enraged = true;        }else Berserk_Timer -= diff;        DoMeleeAttackIfReady();    }
开发者ID:adan830,项目名称:QuaDCore,代码行数:62,


示例11: UpdateAI

    void UpdateAI(const uint32 diff)    {        if (!UpdateVictim())            return;        if( m_creature->getVictim() && m_creature->isAlive())        {            if (!PhaseTwo && ShadowWordPain_Timer < diff)            {                DoCast(m_creature->getVictim(),SPELL_SHADOWWORDPAIN);                ShadowWordPain_Timer = 15000;            }else ShadowWordPain_Timer -= diff;            if (!PhaseTwo && Mark_Timer < diff)            {                markedTarget = SelectUnit(SELECT_TARGET_RANDOM,0);                DoCast(markedTarget,SPELL_MARK);                Mark_Timer = 15000;            }else Mark_Timer -= diff;            if (Summon_Timer < diff && Counter < 31)            {                Unit* target = NULL;                target = SelectUnit(SELECT_TARGET_RANDOM,0);                Panther = m_creature->SummonCreature(15101,-11532.79980,-1649.6734,41.4800,0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);                if(markedTarget && Panther )                {                    DoScriptText(SAY_FEAST_PANTHER, m_creature, markedTarget);                    Panther ->AI()->AttackStart(markedTarget);                }else if(Panther && target) Panther ->AI()->AttackStart(target);                Panther = m_creature->SummonCreature(15101,-11532.9970,-1606.4840,41.2979,0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);                if(markedTarget && Panther )                    Panther ->AI()->AttackStart(markedTarget);                else if(Panther && target)                     Panther ->AI()->AttackStart(target);                Counter++;                Summon_Timer = 5000;            }else Summon_Timer -= diff;            if (Vanish_Timer < diff)            {                //Invisble Model                m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,11686);                m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);                //m_creature->CombatStop();                DoResetThreat();                VanishedOnce = true;                Vanish_Timer = 45000;                Visible_Timer = 6000;            }else Vanish_Timer -= diff;            if (VanishedOnce)            {                if(Visible_Timer < diff)                {                    Unit* target = NULL;                    target = SelectUnit(SELECT_TARGET_RANDOM,0);                    //The Panther Model                    m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,15215);                    m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);                    const CreatureInfo *cinfo = m_creature->GetCreatureInfo();                    m_creature->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (cinfo->mindmg +((cinfo->mindmg/100) * 35)));                    m_creature->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (cinfo->maxdmg +((cinfo->maxdmg/100) * 35)));                    m_creature->UpdateDamagePhysical(BASE_ATTACK);                    if(target)                        AttackStart(target);                    //The Panther Model                    m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,15215);                    m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);                    PhaseTwo = true;                }else Visible_Timer -= diff;            }            //Cleave_Timer            if(PhaseTwo && Cleave_Timer < diff)            {                DoCast(m_creature->getVictim(), SPELL_CLEAVE);                Cleave_Timer = 16000;            }Cleave_Timer -=diff;            //Gouge_Timer            if(PhaseTwo && Gouge_Timer < diff)            {                DoCast(m_creature->getVictim(), SPELL_GOUGE);                if(DoGetThreat(m_creature->getVictim()))                    DoModifyThreatPercent(m_creature->getVictim(),-80);                Gouge_Timer = 17000+rand()%10000;            }else Gouge_Timer -= diff;            DoMeleeAttackIfReady();        }    }
开发者ID:Zekom,项目名称:NeoCore,代码行数:100,


示例12: UpdateAI

            void UpdateAI(const uint32 uiDiff)            {                if (!UpdateVictim())                    return;                if (!m_bIsPhaseTwo)                {                    if (m_uiShadowWordPain_Timer <= uiDiff)                    {                        DoCast(me->getVictim(), SPELL_SHADOWWORDPAIN);                        m_uiShadowWordPain_Timer = 15000;                    }                    else                        m_uiShadowWordPain_Timer -= uiDiff;                    if (m_uiMark_Timer <= uiDiff)                    {                        Unit *pMarkedTarget = SelectUnit(SELECT_TARGET_RANDOM, 0);                        if (pMarkedTarget)                        {                            DoCast(pMarkedTarget, SPELL_MARK);                            MarkedTargetGUID = pMarkedTarget->GetGUID();                        }                        else                            sLog.outError("TSCR: boss_arlokk could not accuire pMarkedTarget.");                        m_uiMark_Timer = 15000;                    }                    else                        m_uiMark_Timer -= uiDiff;                }                else                {                    //Cleave_Timer                    if (m_uiCleave_Timer <= uiDiff)                    {                        DoCast(me->getVictim(), SPELL_CLEAVE);                        m_uiCleave_Timer = 16000;                    }                    else                        m_uiCleave_Timer -= uiDiff;                    //Gouge_Timer                    if (m_uiGouge_Timer <= uiDiff)                    {                        DoCast(me->getVictim(), SPELL_GOUGE);                        DoModifyThreatPercent(me->getVictim(), -80);                        m_uiGouge_Timer = 17000+rand()%10000;                    }                    else                        m_uiGouge_Timer -= uiDiff;                }                if (m_uiSummonCount <= 30)                {                    if (m_uiSummon_Timer <= uiDiff)                    {                        DoSummonPhanters();                        m_uiSummon_Timer = 5000;                    }                    else                        m_uiSummon_Timer -= uiDiff;                }                if (m_uiVanish_Timer <= uiDiff)                {                    //Invisble Model                    me->SetDisplayId(MODEL_ID_BLANK);                    me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);                    me->AttackStop();                    DoResetThreat();                    m_bIsVanished = true;                    m_uiVanish_Timer = 45000;                    m_uiVisible_Timer = 6000;                }                else                    m_uiVanish_Timer -= uiDiff;                if (m_bIsVanished)                {                    if (m_uiVisible_Timer <= uiDiff)                    {                        //The Panther Model                        me->SetDisplayId(MODEL_ID_PANTHER);                        me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);                        const CreatureInfo *cinfo = me->GetCreatureInfo();                        me->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (cinfo->mindmg +((cinfo->mindmg/100) * 35)));                        me->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (cinfo->maxdmg +((cinfo->maxdmg/100) * 35)));                        me->UpdateDamagePhysical(BASE_ATTACK);                        if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))                            AttackStart(pTarget);//.........这里部分代码省略.........
开发者ID:CorpVin,项目名称:SkyFireEMU_420,代码行数:101,


示例13: UpdateAI

        void UpdateAI(const uint32 diff)        {            if (!UpdateVictim())                return;            //ArcaneMissiles_Timer            if (ArcaneMissiles_Timer <= diff)            {                DoCast(me->getVictim(), SPELL_ARCANEMISSILES);                ArcaneMissiles_Timer = 8000;            } else ArcaneMissiles_Timer -= diff;            //ShadowShield_Timer            if (ShadowShield_Timer <= diff)            {                DoCast(me, SPELL_SHADOWSHIELD);                ShadowShield_Timer = 14000 + rand()%14000;            } else ShadowShield_Timer -= diff;            //Curse_Timer            if (Curse_Timer <= diff)            {                DoCast(me->getVictim(), SPELL_CURSE);                Curse_Timer = 15000 + rand()%12000;            } else Curse_Timer -= diff;            //Teleporting Random Target to one of the six pre boss rooms and spawn 3-4 skeletons near the gamer.            //We will only telport if gandling has more than 3% of hp so teleported gamers can always loot.            if (me->GetHealth()*100 / me->GetMaxHealth() > 3)            {                if (Teleport_Timer <= diff)                {                    Unit *pTarget = NULL;                    pTarget = SelectUnit(SELECT_TARGET_RANDOM,0);                    if (pTarget && pTarget->GetTypeId() == TYPEID_PLAYER)                    {                        if (DoGetThreat(pTarget))                            DoModifyThreatPercent(pTarget, -100);                        Creature *Summoned = NULL;                        switch(rand()%6)                        {                            case 0:                                DoTeleportPlayer(pTarget, 250.0696,0.3921,84.8408,3.149);                                Summoned = me->SummonCreature(16119,254.2325,0.3417,84.8407,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);                                if (Summoned)                                    Summoned->AI()->AttackStart(pTarget);                                Summoned = me->SummonCreature(16119,257.7133,4.0226,84.8407,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);                                if (Summoned)                                    Summoned->AI()->AttackStart(pTarget);                                Summoned = me->SummonCreature(16119,258.6702,-2.60656,84.8407,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);                                if (Summoned)                                    Summoned->AI()->AttackStart(pTarget);                                break;                            case 1:                                DoTeleportPlayer(pTarget, 181.4220,-91.9481,84.8410,1.608);                                Summoned = me->SummonCreature(16119,184.0519,-73.5649,84.8407,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);                                if (Summoned)                                    Summoned->AI()->AttackStart(pTarget);                                Summoned = me->SummonCreature(16119,179.5951,-73.7045,84.8407,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);                                if (Summoned)                                    Summoned->AI()->AttackStart(pTarget);                                Summoned = me->SummonCreature(16119,180.6452,-78.2143,84.8407,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);                                if (Summoned)                                    Summoned->AI()->AttackStart(pTarget);                                Summoned = me->SummonCreature(16119,283.2274,-78.1518,84.8407,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);                                if (Summoned)                                    Summoned->AI()->AttackStart(pTarget);                                break;                            case 2:                                DoTeleportPlayer(pTarget, 95.1547,-1.8173,85.2289,0.043);                                Summoned = me->SummonCreature(16119,100.9404,-1.8016,85.2289,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);                                if (Summoned)                                    Summoned->AI()->AttackStart(pTarget);                                Summoned = me->SummonCreature(16119,101.3729,0.4882,85.2289,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);                                if (Summoned)                                    Summoned->AI()->AttackStart(pTarget);                                Summoned = me->SummonCreature(16119,101.4596,-4.4740,85.2289,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);                                if (Summoned)                                    Summoned->AI()->AttackStart(pTarget);                                break;                            case 3:                                DoTeleportPlayer(pTarget, 250.0696,0.3921,72.6722,3.149);                                Summoned = me->SummonCreature(16119,240.34481,0.7368,72.6722,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);                                if (Summoned)                                    Summoned->AI()->AttackStart(pTarget);                                Summoned = me->SummonCreature(16119,240.3633,-2.9520,72.6722,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);                                if (Summoned)                                    Summoned->AI()->AttackStart(pTarget);                                Summoned = me->SummonCreature(16119,240.6702,3.34949,72.6722,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);                                if (Summoned)                                    Summoned->AI()->AttackStart(pTarget);                                break;                            case 4:                                DoTeleportPlayer(pTarget, 181.4220,-91.9481,70.7734,1.608);                                Summoned = me->SummonCreature(16119,184.0519,-73.5649,70.7734,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);                                if (Summoned)                                    Summoned->AI()->AttackStart(pTarget);                                Summoned = me->SummonCreature(16119,179.5951,-73.7045,70.7734,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);                                if (Summoned)//.........这里部分代码省略.........
开发者ID:InkVisible,项目名称:wow,代码行数:101,


示例14: UpdateAI

        void UpdateAI(const uint32 diff)        {            if (Invisible && Invisible_Timer <= diff)            {                //Become visible again                me->setFaction(14);                me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);                me->SetDisplayId(11073);     //Jandice Model                Invisible = false;            } else if (Invisible)            {                Invisible_Timer -= diff;                //Do nothing while invisible                return;            }            //Return since we have no target            if (!UpdateVictim())                return;            //CurseOfBlood_Timer            if (CurseOfBlood_Timer <= diff)            {                //Cast                DoCast(me->getVictim(), SPELL_CURSEOFBLOOD);                //45 seconds                CurseOfBlood_Timer = 30000;            } else CurseOfBlood_Timer -= diff;            //Illusion_Timer            if (!Invisible && Illusion_Timer <= diff)            {                //Interrupt any spell casting                me->InterruptNonMeleeSpells(false);                me->setFaction(35);                me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);                me->SetDisplayId(11686);  // Invisible Model                DoModifyThreatPercent(me->getVictim(), -99);                //Summon 10 Illusions attacking random gamers                Unit *pTarget = NULL;                for (uint8 i = 0; i < 10; ++i)                {                    pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0);                    if (pTarget)                        SummonIllusions(pTarget);                }                Invisible = true;                Invisible_Timer = 3000;                //25 seconds until we should cast this agian                Illusion_Timer = 25000;            } else Illusion_Timer -= diff;            //            //Illusion_Timer            //            if (Illusion_Timer <= diff)            //            {            //                  //Cast            //                DoCast(me->getVictim(), SPELL_ILLUSION);            //            //                  //3 Illusion will be summoned            //                  if (Illusioncounter < 3)            //                  {            //                    Illusion_Timer = 500;            //                    ++Illusioncounter;            //                  }            //                  else {            //                      //15 seconds until we should cast this again            //                      Illusion_Timer = 15000;            //                      Illusioncounter = 0;            //                  }            //            //            } else Illusion_Timer -= diff;            DoMeleeAttackIfReady();        }
开发者ID:antiker,项目名称:StarGateEmu-Projekt,代码行数:77,


示例15: UpdateAI

            void UpdateAI(uint32 diff)            {                if (!UpdateVictim())                    return;                events.Update(diff);                if (me->HasUnitState(UNIT_STATE_CASTING))                    return;                while (uint32 eventId = events.ExecuteEvent())                {                    switch (eventId)                    {                        case EVENT_BRAINWASHTOTEM:                            DoCast(me, SPELL_BRAINWASHTOTEM);                            events.ScheduleEvent(EVENT_BRAINWASHTOTEM, urand(18000, 26000));                            break;                        case EVENT_POWERFULLHEALINGWARD: // HACK                            //DoCast(me, SPELL_POWERFULLHEALINGWARD);                            me->SummonCreature(14987, me->GetPositionX()+3, me->GetPositionY()-2, me->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 30000);                            events.ScheduleEvent(EVENT_POWERFULLHEALINGWARD, urand(14000, 20000));                            break;                        case EVENT_HEX:                            if (Unit* target = me->GetVictim())                            {                                DoCast(target, SPELL_HEX, true);                                if (DoGetThreat(target))                                    DoModifyThreatPercent(target, -80);                            }                            events.ScheduleEvent(EVENT_HEX, urand(12000, 20000));                            break;                        case EVENT_DELUSIONSOFJINDO: // HACK                            // Casting the delusion curse with a shade so shade will attack the same target with the curse.                            if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))                            {                                DoCast(target, SPELL_DELUSIONSOFJINDO);                                Creature* Shade = me->SummonCreature(NPC_SHADE_OF_JINDO, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);                                if (Shade)                                    Shade->AI()->AttackStart(target);                            }                            events.ScheduleEvent(EVENT_DELUSIONSOFJINDO, urand(4000, 12000));                            break;                        case EVENT_TELEPORT: // Possible HACK                            // Teleports a random player and spawns 9 Sacrificed Trolls to attack player                            if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))                            {                                DoTeleportPlayer(target, TeleportLoc.m_positionX, TeleportLoc.m_positionY, TeleportLoc.m_positionZ, TeleportLoc.m_orientation);                                if (DoGetThreat(me->GetVictim()))                                    DoModifyThreatPercent(target, -100);                                Creature* SacrificedTroll;                                SacrificedTroll = me->SummonCreature(NPC_SACRIFICED_TROLL, target->GetPositionX()+2, target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);                                if (SacrificedTroll)                                    SacrificedTroll->AI()->AttackStart(target);                                SacrificedTroll = me->SummonCreature(NPC_SACRIFICED_TROLL, target->GetPositionX()-2, target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);                                if (SacrificedTroll)                                    SacrificedTroll->AI()->AttackStart(target);                                SacrificedTroll = me->SummonCreature(NPC_SACRIFICED_TROLL, target->GetPositionX()+4, target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);                                if (SacrificedTroll)                                    SacrificedTroll->AI()->AttackStart(target);                                SacrificedTroll = me->SummonCreature(NPC_SACRIFICED_TROLL, target->GetPositionX()-4, target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);                                if (SacrificedTroll)                                    SacrificedTroll->AI()->AttackStart(target);                                SacrificedTroll = me->SummonCreature(NPC_SACRIFICED_TROLL, target->GetPositionX(), target->GetPositionY()+2, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);                                if (SacrificedTroll)                                    SacrificedTroll->AI()->AttackStart(target);                                SacrificedTroll = me->SummonCreature(NPC_SACRIFICED_TROLL, target->GetPositionX(), target->GetPositionY()-2, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);                                if (SacrificedTroll)                                    SacrificedTroll->AI()->AttackStart(target);                                SacrificedTroll = me->SummonCreature(NPC_SACRIFICED_TROLL, target->GetPositionX(), target->GetPositionY()+4, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);                                if (SacrificedTroll)                                    SacrificedTroll->AI()->AttackStart(target);                                SacrificedTroll = me->SummonCreature(NPC_SACRIFICED_TROLL, target->GetPositionX(), target->GetPositionY()-4, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);                                if (SacrificedTroll)                                    SacrificedTroll->AI()->AttackStart(target);                                SacrificedTroll = me->SummonCreature(NPC_SACRIFICED_TROLL, target->GetPositionX()+3, target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);                                if (SacrificedTroll)                                    SacrificedTroll->AI()->AttackStart(target);                            }                            events.ScheduleEvent(EVENT_TELEPORT, urand(15000, 23000));                            break;                        default:                            break;                    }                }                DoMeleeAttackIfReady();            }
开发者ID:AlexHjelm,项目名称:sunwell,代码行数:88,


示例16: UpdateAI

    void UpdateAI(const uint32 diff)    {        if (!UpdateVictim())            return;        //BrainWashTotem_Timer        if (BrainWashTotem_Timer < diff)        {            DoCast(m_creature, SPELL_BRAINWASHTOTEM);            BrainWashTotem_Timer = 18000 + rand()%8000;        }        else            BrainWashTotem_Timer -= diff;        //HealingWard_Timer        if (HealingWard_Timer < diff)        {            DoCast(m_creature, SPELL_POWERFULLHEALINGWARD);            HealingWard_Timer = 14000 + rand()%6000;        }        else            HealingWard_Timer -= diff;        //Hex_Timer        if (Hex_Timer < diff)        {            DoCast(m_creature->getVictim(), SPELL_HEX);            if(DoGetThreat(m_creature->getVictim()))                DoModifyThreatPercent(m_creature->getVictim(),-80);            Hex_Timer = 12000 + rand()%8000;        }        else            Hex_Timer -= diff;        //Casting the delusion curse with a shade. So shade will attack the same target with the curse.        if(Delusions_Timer < diff)        {            if(Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0, GetSpellMaxRange(SPELL_DELUSIONSOFJINDO), true))            {                DoCast(target, SPELL_DELUSIONSOFJINDO);                Shade = m_creature->SummonCreature(14986, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);                if(Shade)                    Shade->AI()->AttackStart(target);            }            Delusions_Timer = 4000 + rand()%8000;        }        else            Delusions_Timer -= diff;        //Teleporting a random gamer and spawning 9 skeletons that will attack this gamer        if(Teleport_Timer < diff)        {            if(Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0, 200, true))            {                DoTeleportPlayer(target, -11583.7783,-1249.4278,77.5471,4.745);                if(DoGetThreat(m_creature->getVictim()))                    DoModifyThreatPercent(target,-100);                Skeletons = m_creature->SummonCreature(14826, target->GetPositionX()+2, target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);                if(Skeletons)                    Skeletons->AI()->AttackStart(target);                Skeletons = m_creature->SummonCreature(14826, target->GetPositionX()-2, target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);                if(Skeletons)                    Skeletons->AI()->AttackStart(target);                Skeletons = m_creature->SummonCreature(14826, target->GetPositionX()+4, target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);                if(Skeletons)                    Skeletons->AI()->AttackStart(target);                Skeletons = m_creature->SummonCreature(14826, target->GetPositionX()-4, target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);                if(Skeletons)                    Skeletons->AI()->AttackStart(target);                Skeletons = m_creature->SummonCreature(14826, target->GetPositionX(), target->GetPositionY()+2, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);                if(Skeletons)                    Skeletons->AI()->AttackStart(target);                Skeletons = m_creature->SummonCreature(14826, target->GetPositionX(), target->GetPositionY()-2, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);                if(Skeletons)                    Skeletons->AI()->AttackStart(target);                Skeletons = m_creature->SummonCreature(14826, target->GetPositionX(), target->GetPositionY()+4, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);                if(Skeletons)                    Skeletons->AI()->AttackStart(target);                Skeletons = m_creature->SummonCreature(14826, target->GetPositionX(), target->GetPositionY()-4, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);                if(Skeletons)                    Skeletons->AI()->AttackStart(target);                Skeletons = m_creature->SummonCreature(14826, target->GetPositionX()+3, target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);                if(Skeletons)                    Skeletons->AI()->AttackStart(target);            }            Teleport_Timer = 15000 + rand()%8000;        }        else            Teleport_Timer -= diff;        DoMeleeAttackIfReady();    }
开发者ID:Blumfield,项目名称:ptc2,代码行数:98,


示例17: 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_SPAWN_START_SPIDERS:                            if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))                            {                                Talk(SAY_SPIDER_SPAWN);                                for (uint8 i = 0; i < 4; ++i)                                    if (Creature* spider = me->SummonCreature(NPC_SPIDER, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000))                                        spider->AI()->AttackStart(target);                            }                            events.ScheduleEvent(EVENT_ASPECT_OF_MARLI, 12000, 0, PHASE_TWO);                            events.ScheduleEvent(EVENT_TRANSFORM, 45000, 0, PHASE_TWO);                            events.ScheduleEvent(EVENT_POISON_VOLLEY, 15000);                            events.ScheduleEvent(EVENT_SPAWN_SPIDER, 30000);                            events.ScheduleEvent(EVENT_TRANSFORM, 45000, 0, PHASE_TWO);                            events.SetPhase(PHASE_TWO);                            break;                        case EVENT_POISON_VOLLEY:                            DoCastVictim(SPELL_POISON_VOLLEY, true);                            events.ScheduleEvent(EVENT_POISON_VOLLEY, urand(10000, 20000));                            break;                        case EVENT_ASPECT_OF_MARLI:                            DoCastVictim(SPELL_ASPECT_OF_MARLI, true);                            events.ScheduleEvent(EVENT_ASPECT_OF_MARLI, urand(13000, 18000), 0, PHASE_TWO);                            break;                        case EVENT_SPAWN_SPIDER:                            if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))                                if (Creature* spider = me->SummonCreature(NPC_SPIDER, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000))                                    spider->AI()->AttackStart(target);                            events.ScheduleEvent(EVENT_SPAWN_SPIDER, urand(12000, 17000));                            break;                        case EVENT_TRANSFORM:                        {                            Talk(SAY_TRANSFORM);                            DoCast(me, SPELL_SPIDER_FORM); // SPELL_AURA_TRANSFORM                            /*                            CreatureTemplate const* cinfo = me->GetCreatureTemplate();                            me->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (cinfo->mindmg +((cinfo->mindmg/100) * 35)));                            me->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (cinfo->maxdmg +((cinfo->maxdmg/100) * 35)));                            me->UpdateDamagePhysical(BASE_ATTACK);                            */                            me->HandleStatModifier(UNIT_MOD_DAMAGE_MAINHAND, TOTAL_PCT, 35.0f, true); // hack                            DoCastVictim(SPELL_ENVOLWINGWEB);                            if (DoGetThreat(me->GetVictim()))                                DoModifyThreatPercent(me->GetVictim(), -100);                            events.ScheduleEvent(EVENT_CHARGE_PLAYER, 1500, 0, PHASE_THREE);                            events.ScheduleEvent(EVENT_TRANSFORM_BACK, 25000, 0, PHASE_THREE);                            events.SetPhase(PHASE_THREE);                            break;                        }                        case EVENT_CHARGE_PLAYER:                        {                            Unit* target = NULL;                            int i = 0;                            while (i++ < 3) // max 3 tries to get a random target with power_mana                            {                                target = SelectTarget(SELECT_TARGET_RANDOM, 1, 100, true);  // not aggro leader                                if (target && target->getPowerType() == POWER_MANA)                                    break;                            }                            if (target)                            {                                DoCast(target, SPELL_CHARGE);                                AttackStart(target);                            }                            events.ScheduleEvent(EVENT_CHARGE_PLAYER, 8000, 0, PHASE_THREE);                            break;                        }                        case EVENT_TRANSFORM_BACK:                        {                            me->RemoveAura(SPELL_SPIDER_FORM);                            /*                            CreatureTemplate const* cinfo = me->GetCreatureTemplate();                            me->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (cinfo->mindmg +((cinfo->mindmg/100) * 1)));                            me->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (cinfo->maxdmg +((cinfo->maxdmg/100) * 1)));                            me->UpdateDamagePhysical(BASE_ATTACK);                            */                            me->HandleStatModifier(UNIT_MOD_DAMAGE_MAINHAND, TOTAL_PCT, 35.0f, false); // hack                            events.ScheduleEvent(EVENT_ASPECT_OF_MARLI, 12000, 0, PHASE_TWO);                            events.ScheduleEvent(EVENT_TRANSFORM, 45000, 0, PHASE_TWO);                            events.ScheduleEvent(EVENT_POISON_VOLLEY, 15000);                            events.ScheduleEvent(EVENT_SPAWN_SPIDER, 30000);                            events.ScheduleEvent(EVENT_TRANSFORM, urand(35000, 60000), 0, PHASE_TWO);                            events.SetPhase(PHASE_TWO);                            break;                        }                        default:                            break;//.........这里部分代码省略.........
开发者ID:Aravu,项目名称:Talador-Project,代码行数:101,


示例18: 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_BRAIN_WASH_TOTEM:                            DoCast(me, SPELL_BRAIN_WASH_TOTEM);                            events.ScheduleEvent(EVENT_BRAIN_WASH_TOTEM, urand(18000, 26000));                            break;                        case EVENT_POWERFULL_HEALING_WARD:                            DoCast(me, SPELL_POWERFULL_HEALING_WARD);                            events.ScheduleEvent(EVENT_POWERFULL_HEALING_WARD, urand(14000, 20000));                            break;                        case EVENT_HEX:                            if (Unit* target = me->GetVictim())                            {                                DoCast(target, SPELL_HEX, true);                                if (DoGetThreat(target))                                    DoModifyThreatPercent(target, -80);                            }                            events.ScheduleEvent(EVENT_HEX, urand(12000, 20000));                            break;                        case EVENT_DELUSIONS_OF_JINDO:                            // Casting the delusion curse with a shade so shade will attack the same target with the curse.                            if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true))                            {                                DoCast(target, SPELL_SHADE_OF_JINDO, true);                                DoCast(target, SPELL_DELUSIONS_OF_JINDO);                            }                            events.ScheduleEvent(EVENT_DELUSIONS_OF_JINDO, urand(4000, 12000));                            break;                        case EVENT_TELEPORT:                            // Teleports a random player and spawns 9 Sacrificed Trolls to attack player                            if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true))                            {                                DoTeleportPlayer(target, TeleportLoc.GetPositionX(), TeleportLoc.GetPositionY(), TeleportLoc.GetPositionZ(), TeleportLoc.GetOrientation());                                if (DoGetThreat(me->GetVictim()))                                    DoModifyThreatPercent(target, -100);                                // Summon a formation of trolls                                for (uint8 i = 0; i < 10; ++i)                                    if (Creature* SacrificedTroll = me->SummonCreature(NPC_SACRIFICED_TROLL, Formation[i].GetPositionX(), Formation[i].GetPositionY(), Formation[i].GetPositionZ(), Formation[i].GetOrientation(), TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000))                                        SacrificedTroll->AI()->AttackStart(target);                            }                            events.ScheduleEvent(EVENT_TELEPORT, urand(15000, 23000));                            break;                        default:                            break;                    }                }                DoMeleeAttackIfReady();            }
开发者ID:AwkwardDev,项目名称:RE,代码行数:62,


示例19: UpdateAI

    void UpdateAI(const uint32 uiDiff)    {        if (!UpdateVictim())            return;        if (!m_bIsPhaseTwo)        {            if (m_uiShadowWordPain_Timer <= uiDiff)            {                DoCastVictim( SPELL_SHADOWWORDPAIN);                m_uiShadowWordPain_Timer = 15000;            }            else                m_uiShadowWordPain_Timer -= uiDiff;            if (m_uiMark_Timer <= uiDiff)            {                Unit* pMarkedTarget = SelectUnit(SELECT_TARGET_RANDOM, 0);                if (pMarkedTarget)                {                    DoCast(pMarkedTarget, SPELL_MARK);                    MarkedTargetGUID = pMarkedTarget->GetGUID();                }                else                    error_log("OSCR: boss_arlokk could not acquire pMarkedTarget.");                m_uiMark_Timer = 15000;            }            else                m_uiMark_Timer -= uiDiff;        }        else        {            // Thrash Timer            if (m_uiThrash_Timer <= uiDiff)            {                DoCast(me, SPELL_THRASH);                m_uiThrash_Timer = urand(5000, 9000);            }            else                m_uiThrash_Timer -= uiDiff;            // Ravage Timer            if (m_uiRavage_Timer <= uiDiff)            {                DoCastVictim( SPELL_RAVAGE);                m_uiRavage_Timer = 16000;            }            else                m_uiRavage_Timer -= uiDiff;            // Whirlwind_Timer            if (m_uiWhirlwind_Timer <= uiDiff)            {                DoCastVictim( SPELL_WHIRLWIND);                m_uiWhirlwind_Timer = 16000;            }            else                m_uiWhirlwind_Timer -= uiDiff;            // Gouge_Timer            if (m_uiGouge_Timer <= uiDiff)            {                DoCastVictim( SPELL_GOUGE);                if (DoGetThreat(me->GetVictim()))                    DoModifyThreatPercent(me->GetVictim(), -80);                m_uiGouge_Timer = 17000 + rand() % 10000;            }            else                m_uiGouge_Timer -= uiDiff;        }        if (m_uiSummonCount <= 30)        {            if (m_uiSummon_Timer <= uiDiff)            {                DoSummonPhanters();                m_uiSummon_Timer = 5000;            }            else                m_uiSummon_Timer -= uiDiff;        }        if (m_uiVanish_Timer <= uiDiff)        {            // Invisible Model            me->SetDisplayId(MODEL_ID_BLANK);            me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);            me->AttackStop();            DoResetThreat();            m_bIsVanished = true;            m_uiVanish_Timer = 45000;            m_uiVisible_Timer = 6000;        }//.........这里部分代码省略.........
开发者ID:Phentora,项目名称:OregonCore,代码行数:101,


示例20: UpdateAI

            void UpdateAI(const uint32 diff)            {                if (!UpdateVictim())                    return;                if (me->getVictim() && me->isAlive())                {                    if (PoisonVolley_Timer <= diff)                    {                        DoCast(me->getVictim(), SPELL_POISONVOLLEY);                        PoisonVolley_Timer = urand(10000, 20000);                    } else PoisonVolley_Timer -= diff;                    if (!PhaseTwo && Aspect_Timer <= diff)                    {                        DoCast(me->getVictim(), SPELL_ASPECT_OF_MARLI);                        Aspect_Timer = urand(13000, 18000);                    } else Aspect_Timer -= diff;                    if (!Spawned && SpawnStartSpiders_Timer <= diff)                    {                        DoScriptText(SAY_SPIDER_SPAWN, me);                        Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0);                        if (!target)                            return;                        Creature* Spider = NULL;                        Spider = me->SummonCreature(15041, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);                        if (Spider)                            Spider->AI()->AttackStart(target);                        Spider = me->SummonCreature(15041, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);                        if (Spider)                            Spider->AI()->AttackStart(target);                        Spider = me->SummonCreature(15041, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);                        if (Spider)                            Spider->AI()->AttackStart(target);                        Spider = me->SummonCreature(15041, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);                        if (Spider)                            Spider->AI()->AttackStart(target);                        Spawned = true;                    } else SpawnStartSpiders_Timer -= diff;                    if (SpawnSpider_Timer <= diff)                    {                        Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0);                        if (!target)                            return;                        Creature* Spider = me->SummonCreature(15041, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);                        if (Spider)                            Spider->AI()->AttackStart(target);                        SpawnSpider_Timer = urand(12000, 17000);                    } else SpawnSpider_Timer -= diff;                    if (!PhaseTwo && Transform_Timer <= diff)                    {                        DoScriptText(SAY_TRANSFORM, me);                        DoCast(me, SPELL_SPIDER_FORM);                        const CreatureTemplate* cinfo = me->GetCreatureInfo();                        me->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (cinfo->mindmg +((cinfo->mindmg/100) * 35)));                        me->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (cinfo->maxdmg +((cinfo->maxdmg/100) * 35)));                        me->UpdateDamagePhysical(BASE_ATTACK);                        DoCast(me->getVictim(), SPELL_ENVOLWINGWEB);                        if (DoGetThreat(me->getVictim()))                            DoModifyThreatPercent(me->getVictim(), -100);                        PhaseTwo = true;                        Transform_Timer = urand(35000, 60000);                    } else Transform_Timer -= diff;                    if (PhaseTwo)                    {                        if (Charge_Timer <= diff)                        {                            Unit* target = NULL;                            int 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)                            {                                DoCast(target, SPELL_CHARGE);                                //me->SetPosition(target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0);                                //me->SendMonsterMove(target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, true, 1);                                AttackStart(target);                            }                            Charge_Timer = 8000;                        } else Charge_Timer -= diff;                        if (TransformBack_Timer <= diff)                        {//.........这里部分代码省略.........
开发者ID:Aesirist,项目名称:TrinityCore,代码行数:101,


示例21: UpdateAI

    void UpdateAI(const uint32 diff)    {        if (!UpdateVictim())            return;        //Invisible_Timer        if (Invisible_Timer <= diff)        {            me->InterruptSpell(CURRENT_GENERIC_SPELL);            me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_DISPLAY, 0);            me->SetUInt32Value(UNIT_VIRTUAL_ITEM_INFO, 218171138);            me->SetUInt32Value(UNIT_VIRTUAL_ITEM_INFO + 1, 3);            me->SetDisplayId(11686);            me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);            Invisible = true;            Invisible_Timer = 15000 + rand()%15000;        } else Invisible_Timer -= diff;        if (Invisible)        {            if (Ambush_Timer <= diff)            {                Unit* pTarget = NULL;                pTarget = SelectUnit(SELECT_TARGET_RANDOM,0);                if (pTarget)                {                    DoTeleportTo(pTarget->GetPositionX(), pTarget->GetPositionY(), pTarget->GetPositionZ());                    DoCast(pTarget, SPELL_AMBUSH);                }                Ambushed = true;                Ambush_Timer = 3000;            } else Ambush_Timer -= diff;        }        if (Ambushed)        {            if (Visible_Timer <= diff)            {                me->InterruptSpell(CURRENT_GENERIC_SPELL);                me->SetDisplayId(15268);                me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_DISPLAY, 31818);                me->SetUInt32Value(UNIT_VIRTUAL_ITEM_INFO, 218171138);                me->SetUInt32Value(UNIT_VIRTUAL_ITEM_INFO + 1, 3);                me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);                Invisible = false;                Visible_Timer = 4000;            } else Visible_Timer -= diff;        }        //Resetting some aggro so he attacks other gamers        if (!Invisible)        {            if (Aggro_Timer <= diff)            {                Unit* pTarget = NULL;                pTarget = SelectUnit(SELECT_TARGET_RANDOM,1);                if (DoGetThreat(me->getVictim()))                    DoModifyThreatPercent(me->getVictim(),-50);                if (pTarget)                    AttackStart(pTarget);                Aggro_Timer = 7000 + rand()%13000;            } else Aggro_Timer -= diff;        }        if (!Invisible)        {            if (ThousandBlades_Timer <= diff)            {                DoCast(me->getVictim(), SPELL_THOUSANDBLADES);                ThousandBlades_Timer = 7000 + rand()%5000;            } else ThousandBlades_Timer -= diff;        }        DoMeleeAttackIfReady();    }
开发者ID:FirstCore,项目名称:Battle_2.4.3,代码行数:85,


示例22: UpdateAI

            void UpdateAI (uint32 const diff)            {                if (!UpdateVictim())                    return;                //SweepingStrikes_Timer                if (SweepingStrikes_Timer <= diff)                {                    DoCast(me->getVictim(), SPELL_SWEEPINGSTRIKES);                    SweepingStrikes_Timer = 22000+rand()%4000;                } else SweepingStrikes_Timer -= diff;                //SinisterStrike_Timer                if (SinisterStrike_Timer <= diff)                {                    DoCast(me->getVictim(), SPELL_SINISTERSTRIKE);                    SinisterStrike_Timer = 8000+rand()%8000;                } else SinisterStrike_Timer -= diff;                //Gouge_Timer                if (Gouge_Timer <= diff)                {                    DoCast(me->getVictim(), SPELL_GOUGE);                    if (DoGetThreat(me->getVictim()))                        DoModifyThreatPercent(me->getVictim(), -100);                    Gouge_Timer = 17000+rand()%10000;                } else Gouge_Timer -= diff;                //Kick_Timer                if (Kick_Timer <= diff)                {                    DoCast(me->getVictim(), SPELL_KICK);                    Kick_Timer = 15000+rand()%10000;                } else Kick_Timer -= diff;                //Blind_Timer                if (Blind_Timer <= diff)                {                    DoCast(me->getVictim(), SPELL_BLIND);                    Blind_Timer = 10000+rand()%10000;                } else Blind_Timer -= diff;                //Check_Timer for the death of LorKhan and Zath.                if (!FakeDeath && Check_Timer <= diff)                {                    if (m_pInstance)                    {                        if (m_pInstance->GetData(TYPE_LORKHAN) == SPECIAL)                        {                            //Resurrect LorKhan                            if (Unit *pLorKhan = Unit::GetUnit((*me), m_pInstance->GetData64(DATA_LORKHAN)))                            {                                pLorKhan->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);                                pLorKhan->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);                                pLorKhan->setFaction(14);                                pLorKhan->SetFullHealth();                            }                        }                        if (m_pInstance->GetData(TYPE_THEKAL) == SPECIAL)                        {                            //Resurrect Thekal                            if (Unit *pThekal = Unit::GetUnit((*me), m_pInstance->GetData64(DATA_THEKAL)))                            {                                pThekal->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);                                pThekal->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);                                pThekal->setFaction(14);                                pThekal->SetFullHealth();                            }                        }                    }                    Check_Timer = 5000;                } else Check_Timer -= diff;                if (!HealthAbovePct(5))                {                    me->RemoveAurasByType(SPELL_AURA_PERIODIC_DAMAGE_PERCENT);                    me->RemoveAurasByType(SPELL_AURA_PERIODIC_DAMAGE);                    me->RemoveAurasByType(SPELL_AURA_PERIODIC_LEECH);                    me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);                    me->SetStandState(UNIT_STAND_STATE_SLEEP);                    me->setFaction(35);                    me->AttackStop();                    if (m_pInstance)                        m_pInstance->SetData(TYPE_ZATH, SPECIAL);                    FakeDeath = true;                }                DoMeleeAttackIfReady();            }
开发者ID:Shutok,项目名称:MythCore,代码行数:95,


示例23: UpdateAI

            void UpdateAI(const uint32 diff)            {                if (!UpdateVictim())                    return;                //BrainWashTotem_Timer                if (BrainWashTotem_Timer <= diff)                {                    DoCast(me, SPELL_BRAINWASHTOTEM);                    BrainWashTotem_Timer = urand(18000, 26000);                } else BrainWashTotem_Timer -= diff;                //HealingWard_Timer                if (HealingWard_Timer <= diff)                {                    //DoCast(me, SPELL_POWERFULLHEALINGWARD);                    me->SummonCreature(14987, me->GetPositionX()+3, me->GetPositionY()-2, me->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 30000);                    HealingWard_Timer = urand(14000, 20000);                } else HealingWard_Timer -= diff;                //Hex_Timer                if (Hex_Timer <= diff)                {                    DoCast(me->getVictim(), SPELL_HEX);                    if (DoGetThreat(me->getVictim()))                        DoModifyThreatPercent(me->getVictim(), -80);                    Hex_Timer = urand(12000, 20000);                } else Hex_Timer -= diff;                //Casting the delusion curse with a shade. So shade will attack the same target with the curse.                if (Delusions_Timer <= diff)                {                    if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))                    {                        DoCast(target, SPELL_DELUSIONSOFJINDO);                        Creature* Shade = me->SummonCreature(14986, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);                        if (Shade)                            Shade->AI()->AttackStart(target);                    }                    Delusions_Timer = urand(4000, 12000);                } else Delusions_Timer -= diff;                //Teleporting a random gamer and spawning 9 skeletons that will attack this gamer                if (Teleport_Timer <= diff)                {                    Unit* target = NULL;                    target = SelectTarget(SELECT_TARGET_RANDOM, 0);                    if (target && target->GetTypeId() == TYPEID_PLAYER)                    {                        DoTeleportPlayer(target, -11583.7783f, -1249.4278f, 77.5471f, 4.745f);                        if (DoGetThreat(me->getVictim()))                            DoModifyThreatPercent(target, -100);                        Creature* Skeletons;                        Skeletons = me->SummonCreature(14826, target->GetPositionX()+2, target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);                        if (Skeletons)                            Skeletons->AI()->AttackStart(target);                        Skeletons = me->SummonCreature(14826, target->GetPositionX()-2, target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);                        if (Skeletons)                            Skeletons->AI()->AttackStart(target);                        Skeletons = me->SummonCreature(14826, target->GetPositionX()+4, target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);                        if (Skeletons)                            Skeletons->AI()->AttackStart(target);                        Skeletons = me->SummonCreature(14826, target->GetPositionX()-4, target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);                        if (Skeletons)                            Skeletons->AI()->AttackStart(target);                        Skeletons = me->SummonCreature(14826, target->GetPositionX(), target->GetPositionY()+2, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);                        if (Skeletons)                            Skeletons->AI()->AttackStart(target);                        Skeletons = me->SummonCreature(14826, target->GetPositionX(), target->GetPositionY()-2, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);                        if (Skeletons)                            Skeletons->AI()->AttackStart(target);                        Skeletons = me->SummonCreature(14826, target->GetPositionX(), target->GetPositionY()+4, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);                        if (Skeletons)                            Skeletons->AI()->AttackStart(target);                        Skeletons = me->SummonCreature(14826, target->GetPositionX(), target->GetPositionY()-4, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);                        if (Skeletons)                            Skeletons->AI()->AttackStart(target);                        Skeletons = me->SummonCreature(14826, target->GetPositionX()+3, target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);                        if (Skeletons)                            Skeletons->AI()->AttackStart(target);                    }                    Teleport_Timer = urand(15000, 23000);                } else Teleport_Timer -= diff;                DoMeleeAttackIfReady();            }
开发者ID:Krill156,项目名称:FreyaCore,代码行数:93,


示例24: UpdateAI

            void UpdateAI(uint32 diff) override            {                if (!UpdateVictim())                    return;                // Pounding                if (Pounding_Timer <= diff)                {                    DoCastVictim(SPELL_POUNDING);                    Talk(SAY_POUNDING);                    Pounding_Timer = 15000; //cast time(3000) + cooldown time(12000)                }                else                    Pounding_Timer -= diff;                // Arcane Orb                if (ArcaneOrb_Timer <= 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 = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid());                        if (!target)                            continue;                        // exclude pets & totems, 18 yard radius minimum                        if (target->GetTypeId() == TYPEID_PLAYER && target->IsAlive() && !target->IsWithinDist(me, 18, false))                            target_list.push_back(target);                        target = NULL;                    }                    if (!target_list.empty())                        target = *(target_list.begin()+rand()%target_list.size());                    else                        target = me->GetVictim();                    if (target)                        me->CastSpell(target, SPELL_ARCANE_ORB, false, NULL, NULL, 0);                    ArcaneOrb_Timer = 3000;                }                else                    ArcaneOrb_Timer -= diff;                // Single Target knock back, reduces aggro                if (KnockAway_Timer <= diff)                {                    DoCastVictim(SPELL_KNOCK_AWAY);                    //Drop 25% aggro                    if (DoGetThreat(me->GetVictim()))                        DoModifyThreatPercent(me->GetVictim(), -25);                    KnockAway_Timer = 30000;                }                else                    KnockAway_Timer -= diff;                //Berserk                if (Berserk_Timer < diff && !Enraged)                {                    DoCast(me, SPELL_BERSERK);                    Enraged = true;                }                else                    Berserk_Timer -= diff;                DoMeleeAttackIfReady();                EnterEvadeIfOutOfCombatArea(diff);            }
开发者ID:Allysia1,项目名称:TrinityCore,代码行数:65,


示例25: UpdateAI

//.........这里部分代码省略.........            } else Dazed_Timer -= diff;            //BalnazzarTransform            if (me->GetHealth()*100 / me->GetMaxHealth() < 40)            {                //Cast                DoCast(me,SPELL_BALNAZZARTRANSFORM); //restore hp, mana and stun                me->SetUInt32Value(UNIT_FIELD_DISPLAYID,10691); //then change disaply id                me->SetFloatValue(OBJECT_FIELD_SCALE_X, 3.00f); //then, change size                Transformed = true;            }            //START ELSE TRANSFORMED        } else {            //MindBlast            if (MindBlast_Timer <= diff && !me->IsNonMeleeSpellCasted(false))            {                //Cast                if (rand()%100 < 60) //70% chance to cast                {                    DoCast(me->getVictim(),SPELL_MINDBLAST);                }                //15 seconds until we should cast this again                MindBlast_Timer = 10000;            } else MindBlast_Timer -= diff;            //ShadowShock            if (ShadowShock_Timer <= diff)            {                //Cast                if (rand()%100 < 80) //80% chance to cast                {                    DoCast(me->getVictim(),SPELL_SHADOWSHOCK);                }                //15 seconds until we should cast this again                ShadowShock_Timer = 11000;            } else ShadowShock_Timer -= diff;            //PsychicScream            if (PsychicScream_Timer <= diff)            {                //Cast                if (rand()%100 < 60) //60% chance to cast                {                    DoCast(me->getVictim(),SPELL_PSYCHICSCREAM);                    if (DoGetThreat(me->getVictim()))                        DoModifyThreatPercent(me->getVictim(),-50);                }                //15 seconds until we should cast this again                PsychicScream_Timer = 20000;            } else PsychicScream_Timer -= diff;            //DeepSleep            if (DeepSleep_Timer <= diff)            {                //Cast                if (rand()%100 < 55) //55% chance to cast                {                    //Cast                    Unit *pTarget = NULL;                    pTarget = SelectUnit(SELECT_TARGET_RANDOM,0);                    if (pTarget)                    DoCast(pTarget,SPELL_DEEPSLEEP);                }                //15 seconds until we should cast this again                DeepSleep_Timer = 15000;            } else DeepSleep_Timer -= diff;            //ShadowBoltVolley            if (ShadowBoltVolley_Timer <= diff)            {                //Cast                if (rand()%100 < 75) //75% chance to cast                {                    DoCast(me->getVictim(),SPELL_SHADOWBOLTVOLLEY);                }                //15 seconds until we should cast this again                ShadowBoltVolley_Timer = 13000;            } else ShadowBoltVolley_Timer -= diff;            //MindControl            //            if (MindControl_Timer <= diff)            //            {            //Cast            //                if (rand()%100 < 50) //50% chance to cast            //                {            //                DoCast(me->getVictim(),SPELL_MINDCONTROL);            //                }            //15 seconds until we should cast this again            //                MindControl_Timer = 15000;            //            } else MindControl_Timer -= diff;            //END ELSE TRANSFORMED        }        DoMeleeAttackIfReady();    }
开发者ID:ShadowCore,项目名称:ShadowCore,代码行数:101,


示例26: UpdateAI

            void UpdateAI(uint32 diff) override            {                if (!UpdateVictim())                    return;                //Invisible_Timer                if (Invisible_Timer <= diff)                {                    me->InterruptSpell(CURRENT_GENERIC_SPELL);                    SetEquipmentSlots(false, EQUIP_UNEQUIP, EQUIP_NO_CHANGE, EQUIP_NO_CHANGE);                    me->SetDisplayId(11686);                    me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);                    Invisible = true;                    Invisible_Timer = urand(15000, 30000);                } else Invisible_Timer -= diff;                if (Invisible)                {                    if (Ambush_Timer <= diff)                    {                        if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true))                        {                            DoTeleportTo(target->GetPositionX(), target->GetPositionY(), target->GetPositionZ());                            DoCast(target, SPELL_AMBUSH);                        }                        Ambushed = true;                        Ambush_Timer = 3000;                    } else Ambush_Timer -= diff;                }                if (Ambushed)                {                    if (Visible_Timer <= diff)                    {                        me->InterruptSpell(CURRENT_GENERIC_SPELL);                        me->SetDisplayId(15268);                        SetEquipmentSlots(false, EQUIP_ID_MAIN_HAND, EQUIP_NO_CHANGE, EQUIP_NO_CHANGE);                        me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);                        Invisible = false;                        Visible_Timer = 4000;                    } else Visible_Timer -= diff;                }                //Resetting some aggro so he attacks other gamers                if (!Invisible)                {                    if (Aggro_Timer <= diff)                    {                        if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true))                        {                            if (DoGetThreat(me->GetVictim()))                                DoModifyThreatPercent(me->GetVictim(), -50);                            AttackStart(target);                        }                        Aggro_Timer = urand(7000, 20000);                    } else Aggro_Timer -= diff;                    if (ThousandBlades_Timer <= diff)                    {                        DoCastVictim(SPELL_THOUSANDBLADES);                        ThousandBlades_Timer = urand(7000, 12000);                    } else ThousandBlades_Timer -= diff;                }                DoMeleeAttackIfReady();            }
开发者ID:AwkwardDev,项目名称:RE,代码行数:74,


示例27: UpdateAI

//.........这里部分代码省略.........                    Spider->AI()->AttackStart(pTarget);                Spider = me->SummonCreature(15041, pTarget->GetPositionX(), pTarget->GetPositionY(), pTarget->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);                if (Spider)                    Spider->AI()->AttackStart(pTarget);                Spider = me->SummonCreature(15041, pTarget->GetPositionX(), pTarget->GetPositionY(), pTarget->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);                if (Spider)                    Spider->AI()->AttackStart(pTarget);                Spawned = true;            }            else                SpawnStartSpiders_Timer -= diff;            if (SpawnSpider_Timer <= diff)            {                Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0);                if (!pTarget)                    return;                Creature* Spider = me->SummonCreature(15041, pTarget->GetPositionX(), pTarget->GetPositionY(), pTarget->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);                if (Spider)                    Spider->AI()->AttackStart(pTarget);                SpawnSpider_Timer = 12000 + rand()%5000;            }            else                SpawnSpider_Timer -= diff;            if (!PhaseTwo && Transform_Timer <= diff)            {                me->InterruptNonMeleeSpells(false);                DoScriptText(SAY_TRANSFORM, me);                DoCast(me, SPELL_SPIDER_FORM);                const CreatureInfo *cinfo = me->GetCreatureInfo();                me->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (cinfo->mindmg +((cinfo->mindmg / 100) * 35)));                me->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (cinfo->maxdmg +((cinfo->maxdmg / 100) * 35)));                me->UpdateDamagePhysical(BASE_ATTACK);                DoCast(me->getVictim(), SPELL_ENVOLWINGWEB);                PhaseTwo = true;                Transform_Timer = 35000 + rand()%25000;            }            else                Transform_Timer -= diff;            if (PhaseTwo)            {                if (Charge_Timer <= diff)                {                    Unit* pTarget = NULL;                    int i = 0;                    while (i < 3)                           // max 3 tries to get a random target with power_mana                    {                        ++i;                        pTarget = SelectTarget(SELECT_TARGET_RANDOM, 1, 100, true);  // not aggro leader                        if (pTarget && pTarget->getPowerType() == POWER_MANA)                            i = 3;                    }                    if (pTarget)                    {                        DoCast(pTarget, SPELL_CHARGE);                        if (DoGetThreat(me->getVictim()))                            DoModifyThreatPercent(me->getVictim(), -100);                        AttackStart(pTarget);                    }                    Charge_Timer = 15000 + rand()%5000;                }                else                    Charge_Timer -= diff;                if (Thrash_Timer <= diff)                {                    DoCast(me, SPELL_THRASH);                    Thrash_Timer = urand(5000, 9000);                }                else                    Thrash_Timer -= diff;                if (TransformBack_Timer <= diff)                {                    me->SetDisplayId(15220);                    const CreatureInfo *cinfo = me->GetCreatureInfo();                    me->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (cinfo->mindmg + ((cinfo->mindmg / 100) * 1)));                    me->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (cinfo->maxdmg + ((cinfo->maxdmg / 100) * 1)));                    me->UpdateDamagePhysical(BASE_ATTACK);                    Charge_Timer = 1500;  // reset charge timer so each transform she charges                    PhaseTwo = false;                    TransformBack_Timer = 25000 + rand()%15000;                }                else                    TransformBack_Timer -= diff;            }            DoMeleeAttackIfReady();        }    }
开发者ID:FirstCore,项目名称:Battle_2.4.3,代码行数:101,



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


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