All pastes #928193 Raw Edit

Boss Azgalor

public cpp v1 · immutable
·published 2008-03-04 21:25 UTC
rendered paste body
Index: ScriptMgr.cpp===================================================================--- ScriptMgr.cpp	(revision 275)+++ ScriptMgr.cpp	(working copy)@@ -91,6 +91,7 @@  // -- GO -- extern void AddSC_go_scripts();+extern void AddSC_go_transpolyporter();  // -- Guard -- extern void AddSC_guards();@@ -235,6 +236,7 @@ extern void AddSC_hyjal(); extern void AddSC_boss_archimonde(); extern void AddSC_instance_mount_hyjal();+extern void AddSC_boss_azgalor();  //--Old Hillsbrad extern void AddSC_boss_captain_skarloc();Index: scripts/zone/caverns_of_time/hyjal/boss_azgalor.cpp===================================================================--- scripts/zone/caverns_of_time/hyjal/boss_azgalor.cpp	(revision 0)+++ scripts/zone/caverns_of_time/hyjal/boss_azgalor.cpp	(revision 0)@@ -0,0 +1,295 @@+/* Copyright (C) 2006 - 2008 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"+#include "../../../../../../game/Player.h"+#include "../../../../../../game/Spell.h"+#include "../../../../../../game/SpellAuras.h"+#include "../../../../../../shared/Database/DBCStores.h"+#include "../../../../../../game/ObjectAccessor.h"++#define SPELL_HOWL_OF_AZGALOR     31344+#define SPELL_RAIN_OF_FIRE        31340  +#define SPELL_UNQUENCHABLE_FLAMES 31341+#define SPELL_CLEAVE              40505+#define SPELL_DOOM                31347++#define DOOMGUARD                 17864++#define SAY_AGGRO               "Abandon all hope! The legion has returned to finish what was begun so many years ago. This time there will be no escape!"+#define SOUND_AGGRO             10999++#define SAY_DEATH               "Your time is almost... up."+#define SOUND_DEATH             11002++#define SAY_DOOM1               "Suffer you despicable insect!"+#define SOUND_DOOM1             11000+#define SAY_DOOM2               "Just a taste... of what awaits you."+#define SOUND_DOOM2             11046++#define SAY_KILL1               "Reesh, hokta!"+#define SOUND_KILL1             11001+#define SAY_KILL2               "No one is going to save you."+#define SOUND_KILL2             11047+#define SAY_KILL3               "Don't fight it."+#define SOUND_KILL3             11048++class CustomAura:public Aura+{+public:+    CustomAura(SpellEntry const* spellproto, uint32 eff, int32 *currentBasePoints, Unit *target, Unit *caster = NULL, Item* castItem = NULL):Aura(spellproto, eff, currentBasePoints, target,caster, castItem)+    {};+};++struct MANGOS_DLL_DECL boss_azgalorAI : public ScriptedAI+{+    boss_azgalorAI(Creature *c) : ScriptedAI(c)+    {+        pInstance = (c->GetInstanceData()) ? ((ScriptedInstance*)c->GetInstanceData()) : NULL;+        EnterEvadeMode();+    }++    ScriptedInstance *pInstance;++    uint32 Rain_of_Fire_Timer;+    uint32 Doom_Timmer;+    uint32 Doom_Expire_Timer;+    uint32 Cleave_Timer;+    uint32 Enrage_Timer;+    +    bool InCombat;+    uint64 DoomVictim_Guid;++    void EnterEvadeMode()+    {+    Rain_of_Fire_Timer=35000;+    Doom_Timmer=40000;+    Doom_Expire_Timer=20000;+    Cleave_Timer=9000;+    Enrage_Timer=600000;++        InCombat = false;++        m_creature->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_SILENCE, true);+        m_creature->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_DISARM, true);+        m_creature->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_CONFUSED, true);+        m_creature->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_INTERRUPT_CAST, true);++        m_creature->RemoveAllAuras();+        m_creature->DeleteThreatList();+        m_creature->CombatStop();+        DoGoHome();+        DoomVictim_Guid=0;++        //+    }++    void JustDied(Unit* Killer)+    {+           DoYell(SAY_DEATH,LANG_UNIVERSAL,NULL);+           DoPlaySoundToSet(m_creature, SOUND_DEATH);+    }++    void KilledUnit(Unit *victim)+    {+        if(victim!=NULL)+        if(victim->GetGUID()==DoomVictim_Guid)+         DoomVictim_Guid=0;++        if(InCombat)+        {+          if(victim->GetTypeId() == TYPEID_PLAYER)+          {+              switch(rand()%3)+              {+              case 0:+                  DoYell(SAY_KILL1,LANG_UNIVERSAL,NULL);+                  DoPlaySoundToSet(m_creature, SOUND_KILL1);+                  break;+              case 1:+                  DoYell(SAY_KILL2,LANG_UNIVERSAL,NULL);+                  DoPlaySoundToSet(m_creature, SOUND_KILL2);+                  break;+              case 2:+                  DoYell(SAY_KILL3,LANG_UNIVERSAL,NULL);+                  DoPlaySoundToSet(m_creature, SOUND_KILL3);+                  break;+              default:+                  break;+              }+          }+        }+++    }++    void AttackStart(Unit *who)+    {+        if (!who)+            return;++        if (who->isTargetableForAttack() && who != m_creature)+        {+            //Begin attack+            DoStartMeleeAttack(who);++            if (!InCombat)+            {+                DoYell(SAY_AGGRO,LANG_UNIVERSAL,NULL);+                InCombat = true;+                DoPlaySoundToSet(m_creature, SOUND_AGGRO);+                //+            }+        }+    }++    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 attack+                DoStartMeleeAttack(who);++                if (!InCombat)+                {+                    DoYell(SAY_AGGRO,LANG_UNIVERSAL,NULL);+                    InCombat = true;+                    DoPlaySoundToSet(m_creature, SOUND_AGGRO);+                    //+                }+            }+        }+    }++    void UpdateAI(const uint32 diff)+    {+        Unit* target;+        //Return since we have no target+        if (!m_creature->SelectHostilTarget() || !m_creature->getVictim() )+            return;++        // Cleave+        if (Cleave_Timer < diff )+        {+            //Cast+            m_creature->CastSpell(m_creature->getVictim(), SPELL_CLEAVE, true);+            Cleave_Timer = 9000;+        }else Cleave_Timer -= diff;++        // Rain of Fire+        if (Rain_of_Fire_Timer < diff )+        {+            target=SelectUnit(SELECT_TARGET_RANDOM, 1); +            if(target!=NULL)+            {+              //Cast+              DoCast(target, SPELL_RAIN_OF_FIRE);+            }+            +             Rain_of_Fire_Timer = 35000;+        }else Rain_of_Fire_Timer -= diff;++        //Doom+        if (Doom_Timmer < diff )+        {+            target=SelectUnit(SELECT_TARGET_RANDOM, 1);+            if(target!=NULL)+            {+             SpellEntry const *spellInfo = GetSpellStore()->LookupEntry( SPELL_DOOM );+             if(spellInfo)+             {+               for(uint32 i = 0;i<3;i++)+               {+               uint8 eff = spellInfo->Effect[i];+               if (eff>=TOTAL_SPELL_EFFECTS)+                continue;+               if(eff == SPELL_EFFECT_APPLY_AURA )+               {+                Aura *Aur = new CustomAura(spellInfo, i, NULL, target);+                target->AddAura(Aur);+               }+               }+             }+            +              switch(rand()%3)+              {+              case 0:+                  DoYell(SAY_DOOM1,LANG_UNIVERSAL,NULL);+                  DoPlaySoundToSet(m_creature, SOUND_DOOM1);+                  break;+              case 1:+                  DoYell(SAY_DOOM2,LANG_UNIVERSAL,NULL);+                  DoPlaySoundToSet(m_creature, SOUND_DOOM2);+                  break;+              default:+                  break;+              }++              DoomVictim_Guid=target->GetGUID();+              Doom_Expire_Timer=20000;+            }+              Doom_Timmer = 45000;+        }else Doom_Timmer -= diff;+        +        //Doom expire+       if(DoomVictim_Guid!=0)+        if (Doom_Expire_Timer < diff )+        {+                Unit* currentUnit1=Unit::GetUnit((*m_creature),DoomVictim_Guid);+                if(currentUnit1!=NULL)+                 {+                      //kill victim+                      if(currentUnit1->isAlive()&&(m_creature!=NULL))+                             m_creature->DealDamage(currentUnit1, currentUnit1->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_NORMAL, NULL, false);+                             +                      //summon doomguard+                      //DoCast(currentUnit1,31350);+                      m_creature->SummonCreature(DOOMGUARD, currentUnit1->GetPositionX(), currentUnit1->GetPositionY(), currentUnit1->GetPositionZ(), 2.2540, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 60000);+                      +                 }+            +            DoomVictim_Guid=0;+ +        }else Doom_Expire_Timer -= diff;++        DoMeleeAttackIfReady();+    }++};++CreatureAI* GetAI_boss_azgalor(Creature *_Creature)+{+    return new boss_azgalorAI (_Creature);+}+++void AddSC_boss_azgalor()+{+    Script *newscript;+    newscript = new Script;+    newscript->Name="boss_azgalor";+    newscript->GetAI = GetAI_boss_azgalor;+    m_scripts[nrscripts++] = newscript;+}