All pastes #737787 Raw Edit

lunaclaw

public cpp v1 · immutable
·published 2007-10-15 18:32 UTC
rendered paste body
/* Copyright (C) 2006,2007 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>* This program is free software; you can redistribute it and/or modify* it under the terms of the GNU General Public License as published by* the Free Software Foundation; either version 2 of the License, or* (at your option) any later version.** This program is distributed in the hope that it will be useful,* but WITHOUT ANY WARRANTY; without even the implied warranty of* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the* GNU General Public License for more details.** You should have received a copy of the GNU General Public License* along with this program; if not, write to the Free Software* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA*/#include "../sc_defines.h"// **** This script is still under Developement ****struct MANGOS_DLL_DECL npc_lunaclawAI : public ScriptedAI{    npc_lunaclawAI(Creature *c) : ScriptedAI(c) {EnterEvadeMode();}    bool SummonDone;    Creature* Summoned;    float oldTargetRange;    int32 waitDuration;    void EnterEvadeMode()    {        SummonDone = false;        /*** SpellSystem ***/        //For selecting spell case        oldTargetRange = 0.0f;        waitDuration = -1;        m_creature->m_spellsCoolDown[CREATURE_SPELL_MAX+1] = -1;        for( uint8 i=0; i < CREATURE_SPELL_MAX+1; i++ )            m_creature->m_spellsCoolDown[i] = -1;        m_creature->RemoveAllAuras();        m_creature->DeleteThreatList();        m_creature->CombatStop();        DoGoHome();    }    void AttackStart(Unit *attacker)    {        AIAttackStart(attacker);    }    void MoveInLineOfSight(Unit *who)    {        AISelectAction(who);    }    void UpdateAI(const uint32 diff)    {        //Waiting Time, Like Casting time or any other purpose        if( waitDuration > 0 )            waitDuration -= diff;        if( m_creature->isDead() )            return;        //If we are within range melee the target, we try to swing it with our melee weapon.        if( m_creature->SelectHostilTarget() && m_creature->getVictim() && m_creature->IsWithinDistInMap(m_creature->getVictim(), 5.0f))        {            //Make sure our attack is ready.            if( /*!AISelectFriend() &&*/ m_creature->isAttackReady() )            {                m_creature->AttackerStateUpdate(m_creature->getVictim());                m_creature->resetAttackTimer();            }            AISelectFriend();        }        //Spell CoolDown        for( uint8 i=0; i < CREATURE_SPELL_MAX+1; i++ )            if( m_creature->m_spellsCoolDown[i] > -1 )                m_creature->m_spellsCoolDown[i] -= diff;        // enum CREATURE_SPELL_MAX, is used for global cooldown, so no need to add another.        if( waitDuration < 0 && m_creature->m_spellsCoolDown[CREATURE_SPELL_MAX] < 0 && m_creature->GetUInt64Value(UNIT_FIELD_TARGET) )            AISelectSpell( oldTargetRange, waitDuration);    }    void JustDied(Unit* Killer)    {        if( !SummonDone )            Killer->SummonCreature(12144,Killer->GetPositionX(),Killer->GetPositionY(),Killer->GetPositionZ(),5.000,TEMPSUMMON_TIMED_DESPAWN,60000);            //Killer->CastSpell(Killer, 18986, true);    }};CreatureAI* GetAI_npc_lunaclaw(Creature *_Creature){    return new npc_lunaclawAI (_Creature);}void AddSC_npc_lunaclaw(){    Script *newscript;    newscript = new Script;    newscript->Name="npc_lunaclaw";    newscript->GetAI = GetAI_npc_lunaclaw;    m_scripts[nrscripts++] = newscript;}