/* * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information * * 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, see . */ /* ScriptData SDName: Boss_Nerubenkan SD%Complete: 70 SDComment: SDCategory: Stratholme EndScriptData */ #include "ScriptMgr.h" #include "ScriptedCreature.h" #include "stratholme.h" enum Spells { SPELL_ENCASINGWEBS = 4962, SPELL_PIERCEARMOR = 6016, SPELL_CRYPT_SCARABS = 31602, SPELL_RAISEUNDEADSCARAB = 17235 }; class boss_nerubenkan : public CreatureScript { public: boss_nerubenkan() : CreatureScript("boss_nerubenkan") { } CreatureAI* GetAI(Creature* creature) const override { return GetStratholmeAI(creature); } struct boss_nerubenkanAI : public BossAI { boss_nerubenkanAI(Creature* creature) : BossAI(creature, BOSS_NERUB_ENKAN) { Initialize(); } void Initialize() { CryptScarabs_Timer = 3000; EncasingWebs_Timer = 7000; PierceArmor_Timer = 19000; RaiseUndeadScarab_Timer = 3000; } uint32 EncasingWebs_Timer; uint32 PierceArmor_Timer; uint32 CryptScarabs_Timer; uint32 RaiseUndeadScarab_Timer; void Reset() override { _Reset(); Initialize(); } void RaiseUndeadScarab(Unit* victim) { if (Creature* pUndeadScarab = DoSpawnCreature(10876, float(irand(-9, 9)), float(irand(-9, 9)), 0, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 180s)) if (pUndeadScarab->AI()) pUndeadScarab->AI()->AttackStart(victim); } void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; //EncasingWebs if (EncasingWebs_Timer <= diff) { DoCastVictim(SPELL_ENCASINGWEBS); EncasingWebs_Timer = 30000; } else EncasingWebs_Timer -= diff; //PierceArmor if (PierceArmor_Timer <= diff) { if (urand(0, 3) < 2) DoCastVictim(SPELL_PIERCEARMOR); PierceArmor_Timer = 35000; } else PierceArmor_Timer -= diff; //CryptScarabs_Timer if (CryptScarabs_Timer <= diff) { DoCastVictim(SPELL_CRYPT_SCARABS); CryptScarabs_Timer = 20000; } else CryptScarabs_Timer -= diff; //RaiseUndeadScarab if (RaiseUndeadScarab_Timer <= diff) { RaiseUndeadScarab(me->GetVictim()); RaiseUndeadScarab_Timer = 16000; } else RaiseUndeadScarab_Timer -= diff; } }; }; void AddSC_boss_nerubenkan() { new boss_nerubenkan(); }