Professional Documents
Culture Documents
Boss Urom
Boss Urom
Boss Urom
* This file is part of the AzerothCore 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 Affero General Public License as published by the
* Free Software Foundation; either version 3 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 Affero 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 <http://www.gnu.org/licenses/>.
*/
#include "CreatureScript.h"
#include "ScriptedCreature.h"
#include "SpellInfo.h"
#include "oculus.h"
enum Spells
{
SPELL_EVOCATION = 51602,
SPELL_SUMMON_MENAGERIE_1 = 50476,
SPELL_SUMMON_MENAGERIE_2 = 50495,
SPELL_SUMMON_MENAGERIE_3 = 50496,
SPELL_TELEPORT = 51112,
SPELL_FROSTBOMB = 51103,
SPELL_TIME_BOMB_N = 51121,
SPELL_TIME_BOMB_H = 59376,
SPELL_EMPOWERED_ARCANE_EXPLOSION_N = 51110,
SPELL_EMPOWERED_ARCANE_EXPLOSION_H = 59377,
};
#define SPELL_EMPOWERED_ARCANE_EXPLOSION
DUNGEON_MODE(SPELL_EMPOWERED_ARCANE_EXPLOSION_N,
SPELL_EMPOWERED_ARCANE_EXPLOSION_H)
//#define SPELL_TIME_BOMB DUNGEON_MODE(SPELL_TIME_BOMB_N,
SPELL_TIME_BOMB_H)
enum UromNPCs
{
NPC_PHANTASMAL_CLOUDSCRAPER = 27645,
NPC_PHANTASMAL_MAMMOTH = 27642,
NPC_PHANTASMAL_WOLF = 27644,
NPC_PHANTASMAL_AIR = 27650,
NPC_PHANTASMAL_FIRE = 27651,
NPC_PHANTASMAL_WATER = 27653,
NPC_PHANTASMAL_MURLOC = 27649,
NPC_PHANTASMAL_NAGAL = 27648,
NPC_PHANTASMAL_OGRE = 27647,
};
enum Events
{
EVENT_FROSTBOMB = 1,
EVENT_TELEPORT_TO_CENTER = 2,
EVENT_TELE_BACK = 3,
EVENT_TIME_BOMB = 4,
};
enum Yells
{
SAY_SUMMON_1 = 0,
SAY_SUMMON_2 = 1,
SAY_SUMMON_3 = 2,
SAY_AGGRO = 3,
EMOTE_ARCANE_EXPLOSION = 4,
SAY_ARCANE_EXPLOSION = 5,
SAY_DEATH = 6,
SAY_PLAYER_KILL = 7
};
float summons[3][4] =
{
{NPC_PHANTASMAL_AIR, NPC_PHANTASMAL_AIR, NPC_PHANTASMAL_WATER,
NPC_PHANTASMAL_FIRE},
{NPC_PHANTASMAL_OGRE, NPC_PHANTASMAL_OGRE, NPC_PHANTASMAL_NAGAL,
NPC_PHANTASMAL_MURLOC},
{NPC_PHANTASMAL_CLOUDSCRAPER, NPC_PHANTASMAL_CLOUDSCRAPER,
NPC_PHANTASMAL_MAMMOTH, NPC_PHANTASMAL_WOLF}
};
float cords[4][4] =
{
{1177.47f, 937.722f, 527.405f, 2.21657f},
{968.66f, 1042.53f, 527.32f, 0.077f},
{1164.02f, 1170.85f, 527.321f, 3.66f},
{1118.31f, 1080.377f, 508.361f, 4.25f}
};
InstanceScript* pInstance;
EventMap events;
bool lock;
float x, y, z;
int32 releaseLockTimer;
uint8 GetPhaseByCurrentPosition()
{
for (uint8 i = 0; i < 4; ++i)
if (me->GetDistance(cords[i][0], cords[i][1], cords[i][2]) < 20.0f)
return i;
return 0;
}
if( pInstance )
pInstance->SetData(DATA_UROM, IN_PROGRESS);
me->SetInCombatWithZone();
me->SetHomePosition(cords[0][0], cords[0][1], cords[0][2], cords[0]
[3]);
if( me->FindCurrentSpellBySpellId(SPELL_EVOCATION) )
me->InterruptNonMeleeSpells(false);
void LeaveCombat()
{
me->RemoveAllAuras();
me->GetThreatMgr().ClearAllThreat();
me->CombatStop(true);
me->LoadCreaturesAddon(true);
me->SetLootRecipient(nullptr);
me->ResetPlayerDamageReq();
}
Talk(SAY_ARCANE_EXPLOSION);
Talk(EMOTE_ARCANE_EXPLOSION);
if( !UpdateVictim() )
return;
events.Update(diff);
if( me->HasUnitState(UNIT_STATE_CASTING) )
return;
DoMeleeAttackIfReady();
switch( events.ExecuteEvent() )
{
case 0:
break;
case EVENT_FROSTBOMB:
if( Unit* v = me->GetVictim() )
me->CastSpell(v, SPELL_FROSTBOMB, false);
events.Repeat(7s, 11s);
break;
case EVENT_TIME_BOMB:
if( Unit* target = SelectTarget(SelectTargetMethod::Random, 0,
100.0f, true) )
DoCast(target, DUNGEON_MODE(SPELL_TIME_BOMB_N,
SPELL_TIME_BOMB_H));
events.Repeat(20s, 25s);
break;
case EVENT_TELEPORT_TO_CENTER:
x = me->GetPositionX();
y = me->GetPositionY();
z = me->GetPositionZ();
me->CastSpell(me, SPELL_TELEPORT, false);
events.Repeat(25s, 30s);
events.DelayEvents(10s);
break;
case EVENT_TELE_BACK:
me->GetMotionMaster()->MoveIdle();
me->DisableSpline();
me->SetCanFly(false);
me->SetDisableGravity(false);
me->NearTeleportTo(x, y, z, 0.0f);
me->SetControlled(false, UNIT_STATE_ROOT);
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
me->GetMotionMaster()->MoveChase(me->GetVictim());
break;
}
}
void AddSC_boss_urom()
{
new boss_urom();
}