Scripts/Ulduar:
- Fix Focused Eyebeams - Fix Arm Sweep - Fix respawning and re-entering of arms DB/Templates: - Fix speed, modelId and trigger state of Focused Eyebeams - Set NullAI to semi-triggers; Rubble Stalker, Kologarn Pit Kill Bunny
This commit is contained in:
@@ -1535,6 +1535,7 @@ UPDATE `creature_template` SET `ScriptName`='mob_lightning_elemental' WHERE `ent
|
||||
UPDATE `creature_template` SET `ScriptName`='mob_rune_of_summoning' WHERE `entry`=33051;
|
||||
UPDATE `creature_template` SET `ScriptName`= 'mob_rune_of_power' WHERE entry = 33705;
|
||||
UPDATE `creature_template` SET `ScriptName`='boss_kologarn' WHERE `entry`=32930;
|
||||
UPDATE `creature_template` SET `AIName`='NullAI' WHERE `entry` IN(33742,33809,33942);
|
||||
UPDATE `creature_template` SET `ScriptName`='boss_general_vezax' WHERE `entry`=33271;
|
||||
UPDATE `creature_template` SET `ScriptName`='npc_saronite_vapors' WHERE `entry`=33488;
|
||||
UPDATE `creature_template` SET `ScriptName`='npc_saronite_animus' WHERE `entry`=33524;
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
-- Correct run speed, models, and trigger flag
|
||||
UPDATE `creature_template` SET `speed_run`=5.5/7, `modelid1`=1126, `modelid2`=11686, `flags_extra`= `flags_extra`|128 WHERE `entry` IN(33632,33802);
|
||||
|
||||
-- NullAI for semi-triggers (flags_extra|128 would make them unattackable by certain spells needed for the encounter)
|
||||
UPDATE `creature_template` SET `AIName`='NullAI' WHERE `entry` IN(33742,33809,33942);
|
||||
@@ -0,0 +1,7 @@
|
||||
INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`Comment`) VALUES
|
||||
(13,0,63676,18,1,32930,'Focused Eyebeam Visual (Left) Target'),
|
||||
(13,0,63702,18,1,32930,'Focused Eyebeam Visual (Right) Target'),
|
||||
(13,0,63629,18,1,32930,'Arm Dead Damage Kologarn (10m) Target'),
|
||||
(13,0,63979,18,1,32930,'Arm Dead Damage Kologarn (25m) Target'),
|
||||
(13,0,63766,18,1,33661,'Arm Sweep (10m) Target'),
|
||||
(13,0,63983,18,1,33661,'Arm Sweep (25m) Target');
|
||||
@@ -0,0 +1 @@
|
||||
UPDATE `vehicle_accessory` SET `summontype`=8, `summontimer`=0 WHERE `entry`=32930;
|
||||
@@ -19,29 +19,36 @@
|
||||
#include "ulduar.h"
|
||||
#include "Vehicle.h"
|
||||
|
||||
/* ScriptData
|
||||
SDName: boss_kologarn
|
||||
SD%Complete: 80
|
||||
SDComment: TODO: Achievements, begin/end animations
|
||||
SDCategory: Ulduar
|
||||
EndScriptData */
|
||||
|
||||
#define SPELL_ARM_DEAD_DAMAGE RAID_MODE(63629,63979)
|
||||
#define SPELL_TWO_ARM_SMASH RAID_MODE(63356,64003)
|
||||
#define SPELL_ONE_ARM_SMASH RAID_MODE(63573,64006)
|
||||
#define SPELL_ARM_SWEEP RAID_MODE(63766,63983)
|
||||
#define SPELL_STONE_SHOUT RAID_MODE(63716,64005)
|
||||
#define SPELL_PETRIFY_BREATH RAID_MODE(62030,63980)
|
||||
|
||||
#define SPELL_STONE_GRIP RAID_MODE(62166,63981)
|
||||
|
||||
#define NPC_RUBBLE_STALKER RAID_MODE(33809,33942)
|
||||
#define SPELL_STONE_GRIP_CANCEL 65594
|
||||
#define SPELL_SUMMON_RUBBLE 63633
|
||||
#define SPELL_FALLING_RUBBLE 63821
|
||||
|
||||
#define SPELL_STONE_GRIP_CANCEL 65594
|
||||
|
||||
#define SPELL_ARM_SWEEP RAID_MODE(63766,63983)
|
||||
|
||||
#define SPELL_ARM_ENTER_VEHICLE 65343
|
||||
#define SPELL_ARM_VISUAL 64753
|
||||
#define SPELL_ARM_ENTER_VISUAL 64753
|
||||
|
||||
#define SPELL_SUMMON_FOCUSED_EYEBEAM 63342
|
||||
#define SPELL_FOCUSED_EYEBEAM_PERIODIC RAID_MODE(63347,63977)
|
||||
#define SPELL_FOCUSED_EYEBEAM_VISUAL 63369
|
||||
#define SPELL_FOCUSED_EYEBEAM_VISUAL_LEFT 63676
|
||||
#define SPELL_FOCUSED_EYEBEAM_VISUAL_RIGHT 63702
|
||||
|
||||
#define SPELL_BERSERK 47008 // guess
|
||||
|
||||
#define NPC_LEFT_ARM RAID_MODE(32933,33910)
|
||||
#define NPC_RIGHT_ARM RAID_MODE(32934,33911)
|
||||
#define NPC_RUBBLE_STALKER 33809
|
||||
#define NPC_ARM_SWEEP_STALKER 33661
|
||||
|
||||
enum Events
|
||||
{
|
||||
@@ -52,7 +59,7 @@ enum Events
|
||||
EVENT_SWEEP,
|
||||
EVENT_STONE_SHOUT,
|
||||
EVENT_STONE_GRIP,
|
||||
EVENT_RIGHT_ARM_DEAD,
|
||||
EVENT_FOCUSED_EYEBEAM,
|
||||
EVENT_RESPAWN_LEFT_ARM,
|
||||
EVENT_RESPAWN_RIGHT_ARM,
|
||||
EVENT_ENRAGE,
|
||||
@@ -92,6 +99,7 @@ public:
|
||||
left(false), right(false)
|
||||
{
|
||||
ASSERT(vehicle);
|
||||
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE);
|
||||
SetCombatMovement(false);
|
||||
@@ -100,6 +108,7 @@ public:
|
||||
|
||||
Vehicle *vehicle;
|
||||
bool left, right;
|
||||
uint64 eyebeamTarget;
|
||||
|
||||
void EnterCombat(Unit * who)
|
||||
{
|
||||
@@ -107,7 +116,9 @@ public:
|
||||
|
||||
events.ScheduleEvent(EVENT_MELEE_CHECK, 6000);
|
||||
events.ScheduleEvent(EVENT_SMASH, 5000);
|
||||
events.ScheduleEvent(EVENT_SWEEP, 19000);
|
||||
events.ScheduleEvent(EVENT_STONE_GRIP, 25000);
|
||||
events.ScheduleEvent(EVENT_FOCUSED_EYEBEAM, 21000);
|
||||
events.ScheduleEvent(EVENT_ENRAGE, 600000);
|
||||
|
||||
Unit* arm = NULL;
|
||||
@@ -122,8 +133,13 @@ public:
|
||||
void Reset()
|
||||
{
|
||||
_Reset();
|
||||
events.ScheduleEvent(EVENT_INSTALL_ACCESSORIES, 1000);
|
||||
|
||||
|
||||
if (Creature* arm = Unit::GetCreature(*me, instance ? instance->GetData64(DATA_LEFT_ARM) : 0))
|
||||
RespawnArm(arm);
|
||||
if (Creature* arm = Unit::GetCreature(*me, instance ? instance->GetData64(DATA_RIGHT_ARM) : 0))
|
||||
RespawnArm(arm);
|
||||
|
||||
eyebeamTarget = 0;
|
||||
}
|
||||
|
||||
void JustDied(Unit * /*victim*/)
|
||||
@@ -143,20 +159,30 @@ public:
|
||||
{
|
||||
left = apply;
|
||||
if (!apply)
|
||||
{
|
||||
DoScriptText(SAY_LEFT_ARM_GONE, me);
|
||||
events.ScheduleEvent(EVENT_RESPAWN_LEFT_ARM, 40000);
|
||||
}
|
||||
else
|
||||
instance->SetData64(DATA_LEFT_ARM, who->GetGUID());
|
||||
}
|
||||
|
||||
else if (who->GetEntry() == NPC_RIGHT_ARM)
|
||||
{
|
||||
right = apply;
|
||||
if (!apply)
|
||||
{
|
||||
DoScriptText(SAY_RIGHT_ARM_GONE, me);
|
||||
events.ScheduleEvent(EVENT_RESPAWN_RIGHT_ARM, 40000);
|
||||
}
|
||||
else
|
||||
instance->SetData64(DATA_RIGHT_ARM, who->GetGUID());
|
||||
}
|
||||
|
||||
if (!apply)
|
||||
{
|
||||
who->CastSpell(me, SPELL_ARM_DEAD_DAMAGE, true);
|
||||
DoScriptText(SAY_RIGHT_ARM_GONE, me);
|
||||
who->GetMotionMaster()->MoveTargetedHome();
|
||||
|
||||
if (Creature* rubbleStalker = me->FindNearestCreature(NPC_RUBBLE_STALKER, 20.0f))
|
||||
{
|
||||
@@ -170,22 +196,48 @@ public:
|
||||
if (!right && !left)
|
||||
events.ScheduleEvent(EVENT_STONE_SHOUT, 5000);
|
||||
|
||||
if (who->GetEntry() == NPC_LEFT_ARM)
|
||||
events.ScheduleEvent(EVENT_RESPAWN_LEFT_ARM, 40000);
|
||||
else if (who->GetEntry() == NPC_RIGHT_ARM)
|
||||
events.ScheduleEvent(EVENT_RESPAWN_RIGHT_ARM, 40000);
|
||||
|
||||
if (instance)
|
||||
instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_DISARMED_START_EVENT);
|
||||
}
|
||||
|
||||
if (apply)
|
||||
else
|
||||
events.CancelEvent(EVENT_STONE_SHOUT);
|
||||
}
|
||||
|
||||
void JustSummoned(Creature *summon)
|
||||
{
|
||||
switch (summon->GetEntry())
|
||||
{
|
||||
case NPC_FOCUSED_EYEBEAM:
|
||||
summon->CastSpell(me, SPELL_FOCUSED_EYEBEAM_VISUAL_LEFT, true);
|
||||
break;
|
||||
case NPC_FOCUSED_EYEBEAM_RIGHT:
|
||||
summon->CastSpell(me, SPELL_FOCUSED_EYEBEAM_VISUAL_RIGHT, true);
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
summon->CastSpell(summon, SPELL_FOCUSED_EYEBEAM_PERIODIC, true);
|
||||
summon->CastSpell(summon, SPELL_FOCUSED_EYEBEAM_VISUAL, true);
|
||||
summon->SetReactState(REACT_PASSIVE);
|
||||
summon->SetFlag(UNIT_FIELD_ATTACK_POWER, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_PACIFIED);
|
||||
// One of the above spells is a channeled spell, we need to clear this unit state for MoveChase to work
|
||||
summon->ClearUnitState(UNIT_STAT_CASTING);
|
||||
|
||||
// Victim gets 67351
|
||||
if (eyebeamTarget)
|
||||
{
|
||||
if (Unit* target = Unit::GetUnit(*summon, eyebeamTarget))
|
||||
{
|
||||
summon->Attack(target, false);
|
||||
summon->GetMotionMaster()->MoveChase(target);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
if (!me->getVictim() && instance->GetBossState(TYPE_KOLOGARN) == NOT_STARTED)
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
events.Update(diff);
|
||||
@@ -195,18 +247,14 @@ public:
|
||||
|
||||
switch (events.GetEvent())
|
||||
{
|
||||
case EVENT_INSTALL_ACCESSORIES: // Delayed install, this is needed for IsInWorldCheck in Vehicle code to trigger PassengerBoarded
|
||||
vehicle->InstallAllAccessories(me->GetEntry());
|
||||
events.CancelEvent(EVENT_INSTALL_ACCESSORIES);
|
||||
break;
|
||||
case EVENT_MELEE_CHECK:
|
||||
if (!me->IsWithinMeleeRange(me->getVictim()))
|
||||
DoCast(SPELL_PETRIFY_BREATH);
|
||||
events.RepeatEvent(1000);
|
||||
break;
|
||||
case EVENT_SWEEP:
|
||||
DoCast(SPELL_ARM_SWEEP);
|
||||
events.RepeatEvent(15000);
|
||||
DoCast(me->FindNearestCreature(NPC_ARM_SWEEP_STALKER, 500.0f, true), SPELL_ARM_SWEEP, true);
|
||||
events.RepeatEvent(25000);
|
||||
break;
|
||||
case EVENT_SMASH:
|
||||
if (left && right)
|
||||
@@ -222,18 +270,19 @@ public:
|
||||
case EVENT_ENRAGE:
|
||||
DoCast(SPELL_BERSERK);
|
||||
DoScriptText(SAY_BERSERK, me);
|
||||
events.CancelEvent(EVENT_ENRAGE);
|
||||
break;
|
||||
case EVENT_RESPAWN_LEFT_ARM:
|
||||
{
|
||||
if (Unit* arm = me->FindNearestCreature(NPC_LEFT_ARM, 20.0f, false))
|
||||
RespawnArm(arm);
|
||||
if (Creature* arm = Unit::GetCreature(*me, instance ? instance->GetData64(DATA_LEFT_ARM) : 0))
|
||||
RespawnArm(arm->ToCreature());
|
||||
events.CancelEvent(EVENT_RESPAWN_LEFT_ARM);
|
||||
break;
|
||||
}
|
||||
case EVENT_RESPAWN_RIGHT_ARM:
|
||||
{
|
||||
if (Unit* arm = me->FindNearestCreature(NPC_RIGHT_ARM, 20.0f, false))
|
||||
RespawnArm(arm);
|
||||
if (Creature* arm = Unit::GetCreature(*me, instance ? instance->GetData64(DATA_RIGHT_ARM) : 0))
|
||||
RespawnArm(arm->ToCreature());
|
||||
events.CancelEvent(EVENT_RESPAWN_RIGHT_ARM);
|
||||
break;
|
||||
}
|
||||
@@ -259,17 +308,27 @@ public:
|
||||
events.RepeatEvent(25000);
|
||||
}
|
||||
break;
|
||||
case EVENT_FOCUSED_EYEBEAM:
|
||||
Unit* eyebeamTargetUnit = SelectTarget(SELECT_TARGET_RANDOM);
|
||||
if (!eyebeamTargetUnit)
|
||||
return;
|
||||
|
||||
eyebeamTarget = eyebeamTargetUnit->GetGUID();
|
||||
DoCast(SPELL_SUMMON_FOCUSED_EYEBEAM);
|
||||
events.RepeatEvent(urand(15000, 35000));
|
||||
break;
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
void RespawnArm(Unit* arm)
|
||||
void RespawnArm(Creature* arm)
|
||||
{
|
||||
arm->ToCreature()->Respawn();
|
||||
arm->ToCreature()->SetInCombatWithZone();
|
||||
if (!arm->isAlive())
|
||||
arm->Respawn();
|
||||
|
||||
arm->CastSpell(me, SPELL_ARM_ENTER_VEHICLE, true);
|
||||
arm->EnterVehicle(vehicle);
|
||||
arm->CastSpell(arm, SPELL_ARM_ENTER_VISUAL, true);
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
@@ -58,6 +58,10 @@ public:
|
||||
uint64 uiXT002GUID;
|
||||
uint64 uiAssemblyGUIDs[3];
|
||||
uint64 uiKologarnGUID;
|
||||
uint64 uiFocusedEyebeamGUID;
|
||||
uint64 uiFocusedEyebeamRightGUID;
|
||||
uint64 uiLeftArmGUID;
|
||||
uint64 uiRightArmGUID;
|
||||
uint64 uiAuriayaGUID;
|
||||
uint64 uiMimironGUID;
|
||||
uint64 uiHodirGUID;
|
||||
@@ -83,6 +87,10 @@ public:
|
||||
uiExpCommanderGUID = 0;
|
||||
uiXT002GUID = 0;
|
||||
uiKologarnGUID = 0;
|
||||
uiFocusedEyebeamGUID = 0;
|
||||
uiFocusedEyebeamRightGUID = 0;
|
||||
uiLeftArmGUID = 0;
|
||||
uiRightArmGUID = 0;
|
||||
uiAuriayaGUID = 0;
|
||||
uiMimironGUID = 0;
|
||||
uiHodirGUID = 0;
|
||||
@@ -310,6 +318,19 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
void SetData64(uint32 type, uint64 data)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case DATA_LEFT_ARM:
|
||||
uiLeftArmGUID = data;
|
||||
break;
|
||||
case DATA_RIGHT_ARM:
|
||||
uiRightArmGUID = data;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
uint64 GetData64(uint32 data)
|
||||
{
|
||||
switch(data)
|
||||
@@ -319,6 +340,8 @@ public:
|
||||
case TYPE_RAZORSCALE: return uiRazorscaleGUID;
|
||||
case TYPE_XT002: return uiXT002GUID;
|
||||
case TYPE_KOLOGARN: return uiKologarnGUID;
|
||||
case DATA_LEFT_ARM: return uiLeftArmGUID;
|
||||
case DATA_RIGHT_ARM: return uiRightArmGUID;
|
||||
case TYPE_AURIAYA: return uiAuriayaGUID;
|
||||
case TYPE_MIMIRON: return uiMimironGUID;
|
||||
case TYPE_HODIR: return uiHodirGUID;
|
||||
|
||||
@@ -38,16 +38,19 @@ enum eTypes
|
||||
TYPE_ALGALON = 13,
|
||||
TYPE_COLOSSUS = 14,
|
||||
|
||||
// Assembly of Iorn
|
||||
DATA_STEELBREAKER,
|
||||
DATA_MOLGEIM,
|
||||
DATA_BRUNDIR,
|
||||
|
||||
DATA_EXP_COMMANDER,
|
||||
DATA_RIGHT_ARM,
|
||||
|
||||
// Kologarn:
|
||||
DATA_LEFT_ARM,
|
||||
DATA_RIGHT_ARM,
|
||||
};
|
||||
|
||||
enum eBossNPCs
|
||||
enum eNPCs
|
||||
{
|
||||
NPC_LEVIATHAN = 33113,
|
||||
NPC_IGNIS = 33118,
|
||||
@@ -58,6 +61,10 @@ enum eBossNPCs
|
||||
NPC_MOLGEIM = 32927,
|
||||
NPC_BRUNDIR = 32857,
|
||||
NPC_KOLOGARN = 32930,
|
||||
NPC_FOCUSED_EYEBEAM = 33632,
|
||||
NPC_FOCUSED_EYEBEAM_RIGHT = 33802,
|
||||
NPC_LEFT_ARM = 32933,
|
||||
NPC_RIGHT_ARM = 32934,
|
||||
NPC_AURIAYA = 33515,
|
||||
NPC_MIMIRON = 33350,
|
||||
NPC_HODIR = 32845,
|
||||
|
||||
Reference in New Issue
Block a user