diff options
Diffstat (limited to 'src')
7 files changed, 512 insertions, 62 deletions
diff --git a/src/bindings/scripts/ScriptMgr.cpp b/src/bindings/scripts/ScriptMgr.cpp index 1cf4a27915a..47b54d440e7 100644 --- a/src/bindings/scripts/ScriptMgr.cpp +++ b/src/bindings/scripts/ScriptMgr.cpp @@ -405,6 +405,7 @@ extern void AddSC_boss_gothik(); extern void AddSC_boss_thaddius(); extern void AddSC_instance_naxxramas(); + //Netherstorm extern void AddSC_netherstorm(); @@ -650,6 +651,7 @@ extern void AddSC_zuldrak(); //Northrend //Dungeon + //Vault of Archavon extern void AddSC_boss_archavon(); extern void AddSC_boss_emalon(); @@ -657,11 +659,15 @@ extern void AddSC_instance_archavon(); //Ulduar extern void AddSC_boss_flame_leviathan(); +extern void AddSC_boss_ignis(); extern void AddSC_boss_razorscale(); +extern void AddSC_boss_xt002(); +//extern void AddSC_instance_ulduar(); -//Halls of lightning +//Halls of Lightning extern void AddSC_boss_bjarngrim(); extern void AddSC_boss_loken(); +extern void AddSC_instance_halls_of_lightning(); //Region extern void AddSC_wintergrasp(); @@ -1570,18 +1576,23 @@ void ScriptsInit(char const* cfg_file = "trinitycore.conf") //Northrend //Dungeon + //Vault of Archavon AddSC_boss_archavon(); - AddSC_boss_emalon(); + AddSC_boss_emalon(); AddSC_instance_archavon(); //Ulduar AddSC_boss_flame_leviathan(); + AddSC_boss_ignis(); AddSC_boss_razorscale(); + AddSC_boss_xt002(); + //AddSC_instance_ulduar(); - //Halls of lightning + //Halls of Lightning AddSC_boss_bjarngrim(); AddSC_boss_loken(); + AddSC_instance_halls_of_lightning(); //Region AddSC_wintergrasp(); diff --git a/src/bindings/scripts/scripts/zone/ulduar/ulduar/boss_algalon.cpp b/src/bindings/scripts/scripts/zone/ulduar/ulduar/boss_algalon.cpp index 311554c0a18..a736b2db12a 100644 --- a/src/bindings/scripts/scripts/zone/ulduar/ulduar/boss_algalon.cpp +++ b/src/bindings/scripts/scripts/zone/ulduar/ulduar/boss_algalon.cpp @@ -17,4 +17,4 @@ */ #include "precompiled.h" -#include "def_ulduar.h"
\ No newline at end of file +#include "def_ulduar.h" diff --git a/src/bindings/scripts/scripts/zone/ulduar/ulduar/boss_auriaya.cpp b/src/bindings/scripts/scripts/zone/ulduar/ulduar/boss_auriaya.cpp index a736b2db12a..502dd0b215f 100644 --- a/src/bindings/scripts/scripts/zone/ulduar/ulduar/boss_auriaya.cpp +++ b/src/bindings/scripts/scripts/zone/ulduar/ulduar/boss_auriaya.cpp @@ -18,3 +18,74 @@ #include "precompiled.h" #include "def_ulduar.h" + +//boss_auriaya +#define SPELL_TERRIFYING_SCREECH 64386 +#define SPELL_SONIC_BOOM 38897 +#define SAY_AGGRO -2615016 +#define SAY_SLAY_1 -2615017 + +struct TRINITY_DLL_DECL boss_auriaya_AI : public ScriptedAI +{ + boss_auriaya_AI(Creature *c) : ScriptedAI(c) {} + + uint32 TERRIFYING_SCREECH_Timer; + uint32 SONIC_BOOM_Timer; + + void Reset() + { + TERRIFYING_SCREECH_Timer = 0; + SONIC_BOOM_Timer = 2000; + } + + void EnterCombat(Unit* who) + { + DoScriptText(SAY_AGGRO,m_creature); + } + void KilledUnit(Unit* victim) + { + DoScriptText(SAY_SLAY_1, m_creature); + } + + void JustDied(Unit *victim) + { + DoScriptText(SAY_SLAY_1, m_creature); + } + + void MoveInLineOfSight(Unit* who) {} + + void UpdateAI(const uint32 diff) + { + if(!UpdateVictim()) + return; + + if( TERRIFYING_SCREECH_Timer < diff ) + { + DoCast(m_creature,SPELL_TERRIFYING_SCREECH); + DoScriptText(SAY_SLAY_1, m_creature); + TERRIFYING_SCREECH_Timer = 360000; + } else TERRIFYING_SCREECH_Timer -= diff; + + if( SONIC_BOOM_Timer < diff ) + { + DoCast(m_creature->getVictim(),SPELL_SONIC_BOOM); + SONIC_BOOM_Timer = 20000; + } else SONIC_BOOM_Timer -= diff; + + DoMeleeAttackIfReady(); + } +}; + +CreatureAI* GetAI_boss_auriaya(Creature *_Creature) +{ + return new boss_auriaya_AI (_Creature); +} +void AddSC_boss_auriaya() +{ + Script *newscript; + + newscript = new Script; + newscript->Name = "boss_auriaya"; + newscript->GetAI = &GetAI_boss_auriaya; + newscript->RegisterSelf(); +} diff --git a/src/bindings/scripts/scripts/zone/ulduar/ulduar/boss_flame_leviathan.cpp b/src/bindings/scripts/scripts/zone/ulduar/ulduar/boss_flame_leviathan.cpp index b00af93b0ac..8b13790de28 100644 --- a/src/bindings/scripts/scripts/zone/ulduar/ulduar/boss_flame_leviathan.cpp +++ b/src/bindings/scripts/scripts/zone/ulduar/ulduar/boss_flame_leviathan.cpp @@ -47,6 +47,19 @@ struct TRINITY_DLL_DECL boss_flame_leviathanAI : public BossAI assert(c->isVehicle()); } + uint32 FLAME_VENTS_Timer; + uint32 BATTERING_RAM_Timer; + uint32 GATHERING_SPEED_Timer; + + void Reset() + { + FLAME_VENTS_Timer = 10000; + BATTERING_RAM_Timer = 0; + GATHERING_SPEED_Timer = 0; + } + + void MoveInLineOfSight(Unit* who) {} + void EnterCombat(Unit *who) { _EnterCombat(); @@ -77,6 +90,24 @@ struct TRINITY_DLL_DECL boss_flame_leviathanAI : public BossAI events.Update(diff); + if( FLAME_VENTS_Timer < diff ) + { + DoCast(m_creature->getVictim(),SPELL_FLAME_VENTS); + FLAME_VENTS_Timer = 30000; + } else FLAME_VENTS_Timer -= diff; + + if( BATTERING_RAM_Timer < diff ) + { + DoCast(m_creature->getVictim(),SPELL_BATTERING_RAM); + BATTERING_RAM_Timer = 40000; + } else BATTERING_RAM_Timer -= diff; + + if( GATHERING_SPEED_Timer < diff ) + { + DoCast(m_creature->getVictim(),SPELL_GATHERING_SPEED); + GATHERING_SPEED_Timer = 50000; + } else GATHERING_SPEED_Timer -= diff; + if(me->hasUnitState(UNIT_STAT_CASTING)) return; @@ -153,7 +184,7 @@ struct TRINITY_DLL_DECL boss_flame_leviathan_turretAI : public ScriptedAI events.PopEvent(); break; } - } + } } }; @@ -210,7 +241,7 @@ struct TRINITY_DLL_DECL boss_flame_leviathan_defense_turretAI : public ScriptedA if(who->GetTypeId() != TYPEID_PLAYER || !who->m_Vehicle || who->m_Vehicle->GetEntry() != 33114) return; - + AttackStart(who); } diff --git a/src/bindings/scripts/scripts/zone/ulduar/ulduar/boss_ignis.cpp b/src/bindings/scripts/scripts/zone/ulduar/ulduar/boss_ignis.cpp index a736b2db12a..f6f8c973f1a 100644 --- a/src/bindings/scripts/scripts/zone/ulduar/ulduar/boss_ignis.cpp +++ b/src/bindings/scripts/scripts/zone/ulduar/ulduar/boss_ignis.cpp @@ -18,3 +18,85 @@ #include "precompiled.h" #include "def_ulduar.h" + +#define SPELL_FLAME_JETS 62680 +#define SPELL_SCORCH 62546 +#define SPELL_SLAG_POT 62717 + +#define SAY_AGGRO -10000002 +#define SAY_SLAY -1000003 + +struct TRINITY_DLL_DECL boss_ignis_AI : public ScriptedAI +{ + boss_ignis_AI(Creature *c) : ScriptedAI(c) {} + + uint32 FLAME_JETS_Timer; + uint32 SCORCH_Timer; + uint32 SLAG_POT_Timer; + + void Reset() + { + FLAME_JETS_Timer = 32000; + SCORCH_Timer = 100; + SLAG_POT_Timer = 100; + } + + void EnterCombat(Unit* who) + { + DoScriptText(SAY_AGGRO,m_creature); + } + void KilledUnit(Unit* victim) + { + DoScriptText(SAY_SLAY, m_creature); + } + + void JustDied(Unit *victim) + { + DoScriptText(SAY_SLAY, m_creature); + } + + void MoveInLineOfSight(Unit* who) {} + + void UpdateAI(const uint32 diff) + { + if(!UpdateVictim()) + return; + + if( FLAME_JETS_Timer < diff ) + { + DoCast(m_creature,SPELL_FLAME_JETS); + DoScriptText(SAY_SLAY, m_creature); + FLAME_JETS_Timer = 25000; + } else FLAME_JETS_Timer -= diff; + + if( SCORCH_Timer < diff ) + { + DoCast(m_creature->getVictim(),SPELL_SCORCH); + SCORCH_Timer = 20000; + } else SCORCH_Timer -= diff; + + if( SLAG_POT_Timer < diff ) + { + DoCast(m_creature,SPELL_SLAG_POT); + DoScriptText(SAY_SLAY, m_creature); + SLAG_POT_Timer = 30000; + } else SLAG_POT_Timer -= diff; + + + DoMeleeAttackIfReady(); + } +}; + +CreatureAI* GetAI_boss_ignis(Creature *_Creature) +{ + return new boss_ignis_AI (_Creature); +} +void AddSC_boss_ignis() +{ + Script *newscript; + + newscript = new Script; + newscript->Name = "boss_ignis"; + newscript->GetAI = &GetAI_boss_ignis; + newscript->RegisterSelf(); +} diff --git a/src/bindings/scripts/scripts/zone/ulduar/ulduar/boss_razorscale.cpp b/src/bindings/scripts/scripts/zone/ulduar/ulduar/boss_razorscale.cpp index 8f257d9a37c..c159cfb74f4 100644 --- a/src/bindings/scripts/scripts/zone/ulduar/ulduar/boss_razorscale.cpp +++ b/src/bindings/scripts/scripts/zone/ulduar/ulduar/boss_razorscale.cpp @@ -16,39 +16,105 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +/* ScriptData +Name: razorscale +%Complete: 90 +Comment: Made by Epsik from WoW Arthas wow.dsl.net.pk +Category: +EndScriptData */ + #include "precompiled.h" #include "def_ulduar.h" -#define SPELL_FLAME_BUFFET HEROIC(64016,64023) -#define SPELL_WING_BUFFET 62666 -#define SPELL_FUSE_ARMOR 64821 -#define SPELL_FLAME_BREATH HEROIC(63317,64021) -#define SPELL_DEVOURING_FLAME HEROIC(63014,63816) -#define SPELL_BERSERK 47008 +#define SAY_AGGRO -2000000 +#define SAY_KILL -2000001 +#define SAY_PHASE_2_TRANS -2000002 +#define SAY_PHASE_3_TRANS -2000003 +#define EMOTE_BREATH -2000004 + +#define SPELL_FLAMEBUFFET 64016 +#define SPELL_FIREBALL 62796 + +#define SPELL_WINGBUFFET 62666 +#define SPELL_FLAMEBREATH 63317 +#define SPELL_FUSEARMOR 64771 +#define SPELL_DEVOURINGFLAME 63014 +#define SPELL_KNOCK_AWAY 19633 + +#define SPELL_BELLOWINGROAR 18431 +#define SPELL_HEATED_GROUND 22191 + +#define SPELL_SUMMONADDS 17646 -enum Events +#define CREATURE_ADDS 33846 + +static float MovementLocations[4][3]= { - EVENT_BUFFET = 1, - EVENT_WING, - EVENT_FUSE, - EVENT_BREATH, - EVENT_DEVOUR, - EVENT_BERSERK, + {607.7, -281.9, 408.6}, + {602.0, -245.5, 424.7}, + {612.3, -230.8, 409.1}, + {624.1, -251.8, 426.1} }; -struct TRINITY_DLL_DECL boss_razorscaleAI : public BossAI +static float SpawnLocations[4][3]= { - boss_razorscaleAI(Creature *c) : BossAI(c, BOSS_RAZORSCALE) {} + {602.0, -248.1, 391.2}, + {624.4, -232-4, 391.1}, + {643.3, -256.4, 391.4}, + {626.6, -271.5, 391.4}, +}; + +struct TRINITY_DLL_DECL boss_razorscaleAI : public ScriptedAI +{ + boss_razorscaleAI(Creature* c) : ScriptedAI(c) {} + + uint32 Phase; - void EnterCombat(Unit *who) + uint32 FlameBreathTimer; + uint32 FUSEARMORTimer; + uint32 DEVOURINGFLAMETimer; + uint32 MovementTimer; + uint32 SummonAddsTimer; + uint32 BellowingRoarTimer; + uint32 WingBuffetTimer; + uint32 KnockAwayTimer; + uint32 FireballTimer; + + bool InitialSpawn; + + void Reset() { - _EnterCombat(); - events.ScheduleEvent(EVENT_BERSERK, 7*60000); - events.ScheduleEvent(EVENT_BUFFET, 10000+rand()%5000); - events.ScheduleEvent(EVENT_WING, 30000+rand()%30000); - events.ScheduleEvent(EVENT_FUSE, 10000); - events.ScheduleEvent(EVENT_BREATH, 15000); - events.ScheduleEvent(EVENT_DEVOUR, 10000); + Phase = 1; + + FlameBreathTimer = 20000; + DEVOURINGFLAMETimer = 2000; + FUSEARMORTimer = 15000; + MovementTimer = 3000; + SummonAddsTimer = 45000; + BellowingRoarTimer = 30000; + WingBuffetTimer = 17000; + KnockAwayTimer = 15000; + FireballTimer = 18000; + + InitialSpawn = true; + + m_creature->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_TAUNT, true); + m_creature->ApplySpellImmune(1, IMMUNITY_EFFECT,SPELL_EFFECT_ATTACK_ME, true); + } + + void EnterCombat(Unit* who) + { + DoScriptText(SAY_AGGRO, m_creature); + DoZoneInCombat(); + } + + void JustDied(Unit* Killer) + { + } + + void KilledUnit(Unit *victim) + { + DoScriptText(SAY_KILL, m_creature); } void UpdateAI(const uint32 diff) @@ -56,46 +122,165 @@ struct TRINITY_DLL_DECL boss_razorscaleAI : public BossAI if(!UpdateVictim()) return; - events.Update(diff); + if(((m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) < 99) && (Phase == 1)) + { + Phase = 2; + m_creature->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING); + m_creature->SetHover(true); + m_creature->GetMotionMaster()->Clear(false); + m_creature->GetMotionMaster()->MoveIdle(); + DoScriptText(SAY_PHASE_2_TRANS, m_creature); + } - if(me->hasUnitState(UNIT_STAT_CASTING)) - return; + if(((m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) < 50) && (Phase == 2)) + { + Phase = 3; + m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_LEVITATING); + m_creature->SetHover(false); + m_creature->GetMotionMaster()->MovePoint(0, 619.6, -261.1, 391.471832); + DoStartMovement(m_creature->getVictim()); + m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_WALK_MODE); + DoScriptText(SAY_PHASE_3_TRANS, m_creature); + m_creature->GetMotionMaster()->MoveChase(m_creature->getVictim()); + } + + if(Phase == 1 || Phase == 3) + { + if(FlameBreathTimer < diff) + { + DoCast(m_creature->getVictim(), SPELL_FLAMEBREATH); + FlameBreathTimer = 15000; + } else FlameBreathTimer -= diff; + + if(DEVOURINGFLAMETimer < diff) + { + Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 1); + if(target && !m_creature->HasInArc(M_PI, target)) + DoCast(target, SPELL_DEVOURINGFLAME); + + DEVOURINGFLAMETimer = 10000; + } else DEVOURINGFLAMETimer -= diff; + + if(FUSEARMORTimer < diff) + { + DoCast(m_creature->getVictim(), SPELL_FUSEARMOR); + FUSEARMORTimer = 10000; + } else FUSEARMORTimer -= diff; - if(uint32 eventId = events.GetEvent()) + if(WingBuffetTimer < diff) + { + DoCast(m_creature->getVictim(), SPELL_WINGBUFFET); + WingBuffetTimer = 7000 + ((rand()%8)*1000); + } else WingBuffetTimer -= diff; + + if(KnockAwayTimer < diff) + { + if(rand()%100 <= 30) + { + DoCast(m_creature->getVictim(), SPELL_KNOCK_AWAY); + } + KnockAwayTimer = 15000; + } else KnockAwayTimer -= diff; + + if(Phase == 3) + { + if(BellowingRoarTimer < diff) + { + DoCast(m_creature->getVictim(), SPELL_BELLOWINGROAR); + + BellowingRoarTimer = 30000; + } else BellowingRoarTimer -= diff; + + if(SummonAddsTimer < diff) + { + SummonAdds(Phase); + + SummonAddsTimer = 45000; + } else SummonAddsTimer -= diff; + } + + DoMeleeAttackIfReady(); + } + + if(Phase == 2) { - switch(eventId) + if(InitialSpawn) { - case EVENT_BERSERK: - DoCast(me, SPELL_BERSERK); - return; - case EVENT_BUFFET: - DoCastAOE(SPELL_FLAME_BUFFET); - events.RepeatEvent(10000+rand()%5000); - return; - case EVENT_WING: - DoCastAOE(SPELL_WING_BUFFET); - events.RepeatEvent(30000+rand()%30000); - return; - case EVENT_BREATH: - DoCastAOE(SPELL_FLAME_BREATH); - events.RepeatEvent(15000); - return; - case EVENT_FUSE: - DoCast(me->getVictim(), SPELL_FUSE_ARMOR); - events.RepeatEvent(10000); - return; - case EVENT_DEVOUR: - if(Unit *target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0, true)) - DoCast(target, SPELL_DEVOURING_FLAME); - events.RepeatEvent(10000); - return; - default: - events.PopEvent(); - break; + InitialSpawn = false; + + for(uint32 i = 0; i < 4; ++i) + { + uint32 random = rand()%4; + Creature* Add = m_creature->SummonCreature(CREATURE_ADDS, SpawnLocations[random][0], SpawnLocations[random][1], SpawnLocations[random][2], 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 30000); + if(Add) + Add->AI()->AttackStart(SelectUnit(SELECT_TARGET_RANDOM, 0)); + } + } + + + if(FireballTimer < diff) + { + DoCast(SelectUnit(SELECT_TARGET_RANDOM, 0), SPELL_FIREBALL); + + FireballTimer = 18000; + } else FireballTimer -= diff; + + if(MovementTimer < diff) + { + if(rand()%100 < 30) + { + DoScriptText(EMOTE_BREATH, m_creature); + DoCast(m_creature->getVictim(), SPELL_FLAMEBUFFET); + } + else ChangePosition(); + + MovementTimer = 25000; + } else MovementTimer -= diff; + + if(SummonAddsTimer < diff) + { + SummonAdds(Phase); + + SummonAddsTimer = 45000; + } else SummonAddsTimer -= diff; + } + } + + void ChangePosition() + { + uint32 random = rand() % 4; + if(random<4){ + m_creature->GetMotionMaster()->MovePoint(0, MovementLocations[random][0], MovementLocations[random][1], MovementLocations[random][2]);} + } + + void SummonAdds(uint32 Phase) + { + if(Phase == 2) + { + uint32 max = rand()%10; + for(uint32 i = 0; i < 4; ++i) + { + uint32 random = rand()%3; + Creature* Add = m_creature->SummonCreature(CREATURE_ADDS, SpawnLocations[random][0], SpawnLocations[random][1], SpawnLocations[random][2], 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 30000); + if(Add) + Add->AI()->AttackStart(SelectUnit(SELECT_TARGET_RANDOM, 0)); } } - DoMeleeAttackIfReady(); + if(Phase == 3) + { + uint32 max = rand() % 10 +1; + if(max < 1) + { + for(uint32 i = 0; i < max; ++i) + { + uint32 random = rand()%4; + Creature* Add = m_creature->SummonCreature(CREATURE_ADDS, SpawnLocations[random][0], SpawnLocations[random][1], SpawnLocations[random][2], 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 30000); + if(Add) + Add->AI()->AttackStart(SelectUnit(SELECT_TARGET_RANDOM, 0)); + } + } + } } }; diff --git a/src/bindings/scripts/scripts/zone/ulduar/ulduar/boss_xt002.cpp b/src/bindings/scripts/scripts/zone/ulduar/ulduar/boss_xt002.cpp index a736b2db12a..3b0081861d7 100644 --- a/src/bindings/scripts/scripts/zone/ulduar/ulduar/boss_xt002.cpp +++ b/src/bindings/scripts/scripts/zone/ulduar/ulduar/boss_xt002.cpp @@ -18,3 +18,73 @@ #include "precompiled.h" #include "def_ulduar.h" + +#define SPELL_SEARING_LIGHT 63018 +#define SPELL_SONIC_BOOM 38897 + +#define SAY_AGGRO -1000000 +#define SAY_SLAY -1000001 +struct TRINITY_DLL_DECL boss_xt002_AI : public ScriptedAI +{ + boss_xt002_AI(Creature *c) : ScriptedAI(c) {} + + uint32 SEARING_LIGHT_Timer; + uint32 SONIC_BOOM_Timer; + + void Reset() + { + SEARING_LIGHT_Timer = 100; + SONIC_BOOM_Timer = 20; + } + + void EnterCombat(Unit* who) + { + DoScriptText(SAY_AGGRO,m_creature); + } + void KilledUnit(Unit* victim) + { + DoScriptText(SAY_SLAY, m_creature); + } + + void JustDied(Unit *victim) + { + DoScriptText(SAY_SLAY, m_creature); + } + + void MoveInLineOfSight(Unit* who) {} + + void UpdateAI(const uint32 diff) + { + if(!UpdateVictim()) + return; + + if( SEARING_LIGHT_Timer < diff ) + { + DoCast(m_creature,SPELL_SEARING_LIGHT); + DoScriptText(SAY_SLAY, m_creature); + SEARING_LIGHT_Timer = 50000; + } else SEARING_LIGHT_Timer -= diff; + + if( SONIC_BOOM_Timer < diff ) + { + DoCast(m_creature->getVictim(),SPELL_SONIC_BOOM); + SONIC_BOOM_Timer = 20000; + } else SONIC_BOOM_Timer -= diff; + + DoMeleeAttackIfReady(); + } +}; + +CreatureAI* GetAI_boss_xt002(Creature *_Creature) +{ + return new boss_xt002_AI (_Creature); +} +void AddSC_boss_xt002() +{ + Script *newscript; + + newscript = new Script; + newscript->Name = "boss_xt002"; + newscript->GetAI = &GetAI_boss_xt002; + newscript->RegisterSelf(); +} |