All pastes #947616 Raw Edit

Todd

public cpp v1 · immutable
·published 2008-03-18 16:40 UTC
rendered paste body
struct MANGOS_DLL_DECL npc_dashel_stonefistAI : public ScriptedAI{    npc_dashel_stonefistAI(Creature *c) : ScriptedAI(c) {EnterEvadeMode();}    void EnterEvadeMode()    {        m_creature->RemoveAllAuras();        m_creature->DeleteThreatList();        m_creature->CombatStop();        m_creature->setFaction(11);        DoGoHome();        m_creature->setEmoteState(7);    }    void DamageTaken(Unit *done_by, uint32 & damage)    {         if ((m_creature->GetHealth() - damage)*100 / m_creature->GetMaxHealth() < 15)        {            //Take 0 damage            damage = 0;            if (done_by->GetTypeId() == TYPEID_PLAYER)            {                ((Player*)done_by)->AttackStop();                ((Player*)done_by)->CompleteQuest(1447);            }            m_creature->CombatStop();            EnterEvadeMode();        }        AttackedBy(done_by);    }    void AttackStart(Unit *who)    {        if (!who)            return;        if (who->isTargetableForAttack() && who!= m_creature)        {            DoStartMeleeAttack(who);        }    }    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->IsWithinDistInMap(who, attackRadius) && m_creature->GetDistanceZ(who) <= CREATURE_Z_ATTACK_RANGE && m_creature->IsWithinLOSInMap(who))            {                if(who->HasStealthAura())                    who->RemoveSpellsCausingAura(SPELL_AURA_MOD_STEALTH);                //Begin melee attack if we are within range                DoStartMeleeAttack(who);            }        }    }    void UpdateAI(const uint32 diff)    {        //Return since we have no target        if (!m_creature->SelectHostilTarget() || !m_creature->getVictim())            return;        if( m_creature->IsWithinDistInMap(m_creature->getVictim(), ATTACK_DISTANCE))        {            //Make sure our attack is ready and we arn't currently casting            if( m_creature->isAttackReady())            {                m_creature->AttackerStateUpdate(m_creature->getVictim());                m_creature->resetAttackTimer();            }        }    }};bool QuestAccept_npc_dashel_stonefist(Player *player, Creature *_Creature, Quest const *_Quest){    if(_Quest->GetQuestId() == 1447)    {        _Creature->setFaction(168);        ((npc_dashel_stonefistAI*)_Creature->AI())->AttackStart(player);    }    return true;}CreatureAI* GetAI_npc_dashel_stonefist(Creature *_creature){    return new npc_dashel_stonefistAI(_creature);}void AddSC_npc_dashel_stonefist(){    Script *newscript;    newscript = new Script;    newscript->Name = "npc_dashel_stonefist";    newscript->GetAI = GetAI_npc_dashel_stonefist;    newscript->pQuestAccept = &QuestAccept_npc_dashel_stonefist;    m_scripts[nrscripts++] = newscript;}