コード例 #1
0
ファイル: stratholme.cpp プロジェクト: Blumfield/ptc2
 void Reset()
 {
     switch (rand()%4)
     {
         case 0: DoSay(SAY_ZAPPED0,LANG_UNIVERSAL,NULL); break;
         case 1: DoSay(SAY_ZAPPED1,LANG_UNIVERSAL,NULL); break;
         case 2: DoSay(SAY_ZAPPED2,LANG_UNIVERSAL,NULL); break;
         case 3: DoSay(SAY_ZAPPED3,LANG_UNIVERSAL,NULL); break;
     }
 }
コード例 #2
0
 void EnterCombat(Unit* who)
 {
     if(me->IsNonMeleeSpellCasted(false))
         me->InterruptNonMeleeSpells(false);
     if(roll_chance_f(10.0))
         DoSay(RAND(SAY_AGGRO1, SAY_AGGRO2, SAY_AGGRO3), 0, me->getVictim());
 }
コード例 #3
0
    void Aggro(Unit *who)
    {
        if (m_creature->HasAura(SPELL_VISUAL_SLEEP,0))
            m_creature->RemoveAura(SPELL_VISUAL_SLEEP,0);

        if (!m_creature->IsStandState())
            m_creature->SetUInt32Value(UNIT_FIELD_BYTES_1, PLAYER_STATE_NONE);

        switch(rand()%2)
        {
            case 0:
                DoSay(LUMP_SAY0,LANG_UNIVERSAL,NULL);
                break;
            case 1:
                DoSay(LUMP_SAY1,LANG_UNIVERSAL,NULL);
                break;
        }
    }
コード例 #4
0
 void JustDied(Unit* Victim)
 {
     switch (rand()%4)
     {
     case 0:
         DoSay(SAY_ZAPPED0,LANG_UNIVERSAL,NULL);
         break;
     case 1:
         DoSay(SAY_ZAPPED1,LANG_UNIVERSAL,NULL);
         break;
     case 2:
         DoSay(SAY_ZAPPED2,LANG_UNIVERSAL,NULL);
         break;
     case 3:
         DoSay(SAY_ZAPPED3,LANG_UNIVERSAL,NULL);
         break;
     }
     //m_creature->CastSpell(m_creature,SPELL_SUMMONFREEDSOUL,true);
 }
コード例 #5
0
 void HandleOffCombatEffects()
 {
     for (uint8 i = 0; i < 8; ++i)
     {
         if(me->GetDBTableGUIDLow() == DrainingList[i]) // draining fel crystal
             me->CastSpell((Unit*)NULL, SPELL_FEL_CRYSTAL_COSMETIC, false);
         if(roll_chance_f(2.0f))
                 DoSay(RAND(SAY_OOC1, SAY_OOC2), 0, me);
     }
 }
コード例 #6
0
ファイル: westfall.cpp プロジェクト: Dolmero/L4G_Core
    void NextEvent()
    {
        thug_wave++;

        if(thug_wave > 3 && !say_end)
        {
            DoSay(SAY_END, LANG_UNIVERSAL, NULL);
            m_creature->HandleEmoteCommand(4);
            DoSay(SAY_MOVE_BACK, LANG_UNIVERSAL, NULL, true);
            say_end = true;
            real_event_started = false;
        }
        else
        {
            if(thug_wave!=1)
                DoSay(SAY_WAVE, LANG_UNIVERSAL, NULL);
            ActivateAmbush(DEFIAS_RAIDER, 2 + thug_wave, THUG_SPAWN_R, THUG_SPAWN_X, THUG_SPAWN_Y, THUG_SPAWN_Z, THUG_SPAWN_O, &enemies);
        }
    }
コード例 #7
0
ファイル: bot_ai.cpp プロジェクト: Rhyuk/Dev
void bot_ai::ReceiveEmote(Player *player, uint32 emote)
{
    if (emote == TEXTEMOTE_DANCE)
        DoSay("I love to dance!",LANG_UNIVERSAL,m_creature->GetGUID(), player);

    // debug to see what auras are on bot
    if (emote == TEXTEMOTE_BONK)
        listAuras(m_creature);

    // debug to see what auras are on me
    if (emote == TEXTEMOTE_SALUTE)
        listAuras(player);

    if (emote == TEXTEMOTE_STAND)
    {
        if (m_creature->GetCharmerGUID() != player->GetGUID())
        {
            m_creature->HandleEmoteCommand(TEXTEMOTE_RUDE);
            return;
        }
        player->SetBotCommandState (COMMAND_STAY);
        DoSay("Standing Still.",LANG_UNIVERSAL,m_creature->GetGUID(), player);
    }

    if (emote == TEXTEMOTE_WAVE)
    {
        if (m_creature->GetCharmerGUID() != player->GetGUID())
        {
            m_creature->HandleEmoteCommand(TEXTEMOTE_RUDE);
            return;
        }  
        player->SetBotCommandState (COMMAND_FOLLOW);
        DoSay("Following!",LANG_UNIVERSAL,m_creature->GetGUID(), player);
    }

    // buff the requester
    if (emote == TEXTEMOTE_BOW)
    {
        ReceiveBowEmote(player);
    }

} // end ReceiveEmote
コード例 #8
0
ファイル: guard_ai.cpp プロジェクト: Blumfield/ptc2
void guardAI::EnterCombat(Unit *who)
{
    if (m_creature->GetEntry() == 15184)
    {
        switch(rand()%3)
        {
        case 0:
            DoSay("Taste blade, mongrel!", LANG_UNIVERSAL,NULL);
            break;
        case 1:
            DoSay("Please tell me that you didn't just do what I think you just did. Please tell me that I'm not going to have to hurt you...", LANG_UNIVERSAL,NULL);
            break;
        case 2:
            DoSay("As if we don't have enough problems, you go and create more!", LANG_UNIVERSAL,NULL);
            break;
        }
    }

    if (SpellEntry const *spell = m_creature->reachWithSpellAttack(who))
        DoCastSpell(who, spell);
}
コード例 #9
0
ファイル: dun_morogh.cpp プロジェクト: Filipper/classic
 void SpellHit(Unit *Hitter, const SpellEntry *Spellkind)
 {
     if (Spellkind->Id == 8593 && !spellHit)
     {
         DoCast(m_creature,32343);
         //m_creature->SetStandState(UNIT_STAND_STATE_STAND);
         m_creature->SetUInt32Value(UNIT_DYNAMIC_FLAGS, 0);
         //m_creature->RemoveAllAuras();
         DoSay(SAY_HEAL, LANG_COMMON, NULL);
         spellHit = true;
     }
 }
コード例 #10
0
ファイル: silvermoon_city.cpp プロジェクト: megamage/mangos
 void SpellHit(Unit *Hitter, const SpellEntry *Spellkind)
 {
     if((Spellkind->Id == SPELL_SHIMMERING_VESSEL) && !spellHit &&
         (Hitter->GetTypeId() == TYPEID_PLAYER) && (((Player*)Hitter)->IsActiveQuest(QUEST_REDEEMING_THE_DEAD)))
     {
         ((Player*)Hitter)->AreaExploredOrEventHappens(QUEST_REDEEMING_THE_DEAD);
         DoCast(m_creature,SPELL_REVIVE_SELF);
         m_creature->SetUInt32Value(UNIT_FIELD_BYTES_1,0);
         m_creature->SetUInt32Value(UNIT_DYNAMIC_FLAGS, 0);
         //m_creature->RemoveAllAuras();
         DoSay(SAY_HEAL,LANG_THALASSIAN,NULL);
         spellHit = true;
     }
 }
コード例 #11
0
void SimpleAI::DamageTaken(Unit *killer, uint32 &damage)
{
    //Return if damage taken won't kill us
    if (m_creature->GetHealth() > damage)
        return;

    uint32 random_text = rand()%3;

    //Random yell
    if (Death_Text[random_text])
        if (Death_Say[random_text])
            DoSay(Death_Text[random_text], LANG_UNIVERSAL, killer);
        else DoYell(Death_Text[random_text], LANG_UNIVERSAL, killer);

    //Random sound
    if (Death_Sound[random_text])
        DoPlaySoundToSet(m_creature, Death_Sound[random_text]);

    if (!Death_Spell)
        return;

    Unit* target = NULL;

    switch (Death_Target_Type)
    {
    case CAST_SELF:
        target = m_creature;
        break;
    case CAST_HOSTILE_TARGET:
        target = m_creature->getVictim();
        break;
    case CAST_HOSTILE_SECOND_AGGRO:
        target = SelectUnit(SELECT_TARGET_TOPAGGRO,1);
        break;
    case CAST_HOSTILE_LAST_AGGRO:
        target = SelectUnit(SELECT_TARGET_BOTTOMAGGRO,0);
        break;
    case CAST_HOSTILE_RANDOM:
        target = SelectUnit(SELECT_TARGET_RANDOM,0);
        break;
    case CAST_JUSTDIED_KILLER:
        target = killer;
        break;
    }

    //Target is ok, cast a spell on it
    if (target)
        DoCast(target, Death_Spell);
}
コード例 #12
0
    void EventStart(Creature* anchor, Player* target)
    {
        wait_timer = 5000;
        phase = ToEquipping;

        m_creature->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);

        anchor->GetPosition(targ_x,targ_y,targ_z);
        anchor->DealDamage(anchor,anchor->GetHealth());
        m_creature->RemoveAurasDueToSpell(SPELL_SOUL_PRISON_CHAIN_SELF);
        m_creature->RemoveAurasDueToSpell(SPELL_SOUL_PRISON_CHAIN);

        DoSay(SAY_EVENT_START,LANG_UNIVERSAL,NULL);
        m_creature->HandleEmoteCommand(EMOTE_ONESHOT_TALK);
        event_starter = target->GetGUID();
    }
コード例 #13
0
    void MovementInform(uint32 type, uint32 id)
    {
        if(type != POINT_MOTION_TYPE)
            return;

        if(id == 1)
        {
            wait_timer = 5000;
            AddEquipp();

            DoSay(SAY_EVENT_ATTACK,LANG_UNIVERSAL,NULL);
            m_creature->HandleEmoteCommand(EMOTE_ONESHOT_TALK);

            phase = ToAttacking;
        }
    }
コード例 #14
0
void SimpleAI::Aggro(Unit *who)
{
            //Reset cast timers
            if (Spell[0].First_Cast >= 0)
                Spell_Timer[0] = Spell[0].First_Cast;
            else Spell_Timer[0] = 1000;
            if (Spell[1].First_Cast >= 0)
                Spell_Timer[1] = Spell[1].First_Cast;
            else Spell_Timer[1] = 1000;
            if (Spell[2].First_Cast >= 0)
                Spell_Timer[2] = Spell[2].First_Cast;
            else Spell_Timer[2] = 1000;
            if (Spell[3].First_Cast >= 0)
                Spell_Timer[3] = Spell[3].First_Cast;
            else Spell_Timer[3] = 1000;
            if (Spell[4].First_Cast >= 0)
                Spell_Timer[4] = Spell[4].First_Cast;
            else Spell_Timer[4] = 1000;
            if (Spell[5].First_Cast >= 0)
                Spell_Timer[5] = Spell[5].First_Cast;
            else Spell_Timer[5] = 1000;
            if (Spell[6].First_Cast >= 0)
                Spell_Timer[6] = Spell[6].First_Cast;
            else Spell_Timer[6] = 1000;
            if (Spell[7].First_Cast >= 0)
                Spell_Timer[7] = Spell[7].First_Cast;
            else Spell_Timer[7] = 1000;
            if (Spell[8].First_Cast >= 0)
                Spell_Timer[8] = Spell[8].First_Cast;
            else Spell_Timer[8] = 1000;
            if (Spell[9].First_Cast >= 0)
                Spell_Timer[9] = Spell[9].First_Cast;
            else Spell_Timer[9] = 1000;

            uint32 random_text = rand()%3;

            //Random yell
            if (Aggro_Text[random_text])
                if (Aggro_Say[random_text])
                    DoSay(Aggro_Text[random_text], LANG_UNIVERSAL, who);
                else DoYell(Aggro_Text[random_text], LANG_UNIVERSAL, who);

            //Random sound
            if (Aggro_Sound[random_text])
                DoPlaySoundToSet(m_creature, Aggro_Sound[random_text]);
}
コード例 #15
0
void SimpleAI::KilledUnit(Unit *victim)
{
    uint32 random_text = rand()%3;

    //Random yell
    if (Kill_Text[random_text])
        if (Kill_Say[random_text])
            DoSay(Kill_Text[random_text], LANG_UNIVERSAL, victim);
        else DoYell(Kill_Text[random_text], LANG_UNIVERSAL, victim);

    //Random sound
    if (Kill_Sound[random_text])
        DoPlaySoundToSet(m_creature, Kill_Sound[random_text]);

    if (!Kill_Spell)
        return;

    Unit* target = NULL;

    switch (Kill_Target_Type)
    {
    case CAST_SELF:
        target = m_creature;
        break;
    case CAST_HOSTILE_TARGET:
        target = m_creature->getVictim();
        break;
    case CAST_HOSTILE_SECOND_AGGRO:
        target = SelectUnit(SELECT_TARGET_TOPAGGRO,1);
        break;
    case CAST_HOSTILE_LAST_AGGRO:
        target = SelectUnit(SELECT_TARGET_BOTTOMAGGRO,0);
        break;
    case CAST_HOSTILE_RANDOM:
        target = SelectUnit(SELECT_TARGET_RANDOM,0);
        break;
    case CAST_KILLEDUNIT_VICTIM:
        target = victim;
        break;
    }

    //Target is ok, cast a spell on it
    if (target)
        DoCast(target, Kill_Spell);
}
コード例 #16
0
ファイル: sc_custom_example.cpp プロジェクト: HME77/toxicnet
    //*** HANDLED FUNCTION *** 
    //Attack Start is called whenever someone hits us.
    void AttackStart(Unit *who)
    {
        if (!who)
            return;

        //Don't attack back if we already have a victim or of the person who hit us is untargettable
        //We have to say who!= m_creature because currently AoE that apply dots will trigger the creature into attack itself
        //Since AoEs casted by monsters hit themselves
        if (m_creature->getVictim() == NULL && who->isTargetableForAttack() && who != m_creature)
        {
            //Begin attack
            DoStartMeleeAttack(who);

            //Say some stuff
            DoSay(SAY_AGGRO,LANG_UNIVERSAL,NULL);
            DoPlaySoundToSet(m_creature,8280);
        }
    }
コード例 #17
0
    void UpdateAI(const uint32 diff)
    {
        if(IsEating)
            if(EatTimer < diff)
        {
            IsEating = false;
            DoCast(m_creature, SPELL_JUST_EATEN);
            m_creature->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
            DoSay(SAY_JUST_EATEN, LANG_DRACONIC, NULL);
            if(PlayerGUID)
            {
                Player* plr = ((Player*)Unit::GetUnit((*m_creature), PlayerGUID));
                if(plr && plr->GetQuestStatus(10804) == QUEST_STATUS_INCOMPLETE)
                {
                    plr->KilledMonster(22131, m_creature->GetGUID());
                    Evade = true;
                    PlayerGUID = 0;
                }
            }
        }else EatTimer -= diff;

        if(Evade)
            if(ResetTimer < diff)
                EnterEvadeMode();
        else ResetTimer -= diff;

        if(!m_creature->SelectHostilTarget() || !m_creature->getVictim())
            return;

        if(CastTimer < diff)
        {
            DoCast(m_creature->getVictim(), SPELL_NETHER_BREATH);
            CastTimer = 5000;
        }else CastTimer -= diff;

        DoMeleeAttackIfReady();
    }
コード例 #18
0
ファイル: sc_custom_example.cpp プロジェクト: HME77/toxicnet
    //*** HANDLED FUNCTION *** 
    //Move in line of sight is called whenever any unit moves within our sight radius (something like 50 yards)
    void MoveInLineOfSight(Unit *who)
    {
        if (!who || m_creature->getVictim())
            return;

        if (who->isTargetableForAttack() && who->isInAccessablePlaceFor(m_creature) && m_creature->IsHostileTo(who))
        {
            float attackRadius = m_creature->GetAttackDistance(who);
            if (m_creature->IsWithinDist(who, attackRadius) && m_creature->GetDistanceZ(who) <= CREATURE_Z_ATTACK_RANGE)
            {
                if(who->HasStealthAura())
                    who->RemoveSpellsCausingAura(SPELL_AURA_MOD_STEALTH);

                //Begin melee attack if we are within range
                if (m_creature->IsWithinDist(who, ATTACK_DIST))
                    DoStartMeleeAttack(who);
                else DoStartRangedAttack(who);

                //Say some stuff
                DoSay(SAY_AGGRO,LANG_UNIVERSAL,NULL);
                DoPlaySoundToSet(m_creature,8280);
            }
        }
    }
コード例 #19
0
ファイル: custom_example.cpp プロジェクト: Elevim/RG-332
 //*** HANDLED FUNCTION ***
 //Attack Start is called whenever someone hits us.
 void Aggro(Unit *who)
 {
     //Say some stuff
     DoSay(SAY_AGGRO,LANG_UNIVERSAL,NULL);
     DoPlaySoundToSet(m_creature,8280);
 }
コード例 #20
0
void SimpleAI::UpdateAI(const uint32 diff)
{
    //Return since we have no target
    if (!m_creature->SelectHostilTarget() || !m_creature->getVictim())
        return;

    //Spells
    for (uint32 i = 0; i < 10; ++i)
    {
        //Spell not valid
        if (!Spell[i].Enabled || !Spell[i].Spell_Id)
            continue;

        if (Spell_Timer[i] < diff)
        {
            //Check if this is a percentage based
            if (Spell[i].First_Cast < 0 && Spell[i].First_Cast > -100 && m_creature->GetHealth()*100 / m_creature->GetMaxHealth() > -Spell[i].First_Cast)
                continue;

            //Check Current spell
            if (!(Spell[i].InterruptPreviousCast && m_creature->IsNonMeleeSpellCasted(false)))
            {
                Unit* target = NULL;

                switch (Spell[i].Cast_Target_Type)
                {
                case CAST_SELF:
                    target = m_creature;
                    break;
                case CAST_HOSTILE_TARGET:
                    target = m_creature->getVictim();
                    break;
                case CAST_HOSTILE_SECOND_AGGRO:
                    target = SelectUnit(SELECT_TARGET_TOPAGGRO,1);
                    break;
                case CAST_HOSTILE_LAST_AGGRO:
                    target = SelectUnit(SELECT_TARGET_BOTTOMAGGRO,0);
                    break;
                case CAST_HOSTILE_RANDOM:
                    target = SelectUnit(SELECT_TARGET_RANDOM,0);
                    break;
                }

                //Target is ok, cast a spell on it and then do our random yell
                if (target)
                {
                    if (m_creature->IsNonMeleeSpellCasted(false))
                        m_creature->InterruptNonMeleeSpells(false);

                    DoCast(target, Spell[i].Spell_Id);

                    //Yell and sound use the same number so that you can make
                    //the creature yell with the correct sound effect attached
                    uint32 random_text = rand()%3;

                    //Random yell
                    if (Spell[i].Text[random_text])
                        if (Spell[i].Say[random_text])
                            DoSay(Spell[i].Text[random_text], LANG_UNIVERSAL, target);
                        else DoYell(Spell[i].Text[random_text], LANG_UNIVERSAL, target);

                    //Random sound
                    if (Spell[i].Text_Sound[random_text])
                        DoPlaySoundToSet(m_creature, Spell[i].Text_Sound[random_text]);
                }

            }

            //Spell will cast agian when the cooldown is up
            if (Spell[i].CooldownRandomAddition)
                Spell_Timer[i] = Spell[i].Cooldown + (rand() % Spell[i].CooldownRandomAddition);
            else Spell_Timer[i] = Spell[i].Cooldown;

        }else Spell_Timer[i] -= diff;

    }

    DoMeleeAttackIfReady();
}