diff options
author | Andy@conmuc-l03 <none@none> | 2009-04-25 21:29:31 +0200 |
---|---|---|
committer | Andy@conmuc-l03 <none@none> | 2009-04-25 21:29:31 +0200 |
commit | fa6a60b45226a394a1c906103fcfc0d81d8b1200 (patch) | |
tree | 2ef1f1dd03da5ba374e57d0743d78e6af19934e6 /src | |
parent | 7d40421f43eadb89b5d0c320dc4f482befb06002 (diff) |
Added Sunwell SQL and update few scripts
--HG--
branch : trunk
Diffstat (limited to 'src')
7 files changed, 857 insertions, 551 deletions
diff --git a/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_brutallus.cpp b/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_brutallus.cpp index 539548af9da..beed5619320 100644 --- a/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_brutallus.cpp +++ b/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_brutallus.cpp @@ -16,62 +16,75 @@ /* ScriptData SDName: Boss_Brutallus -SD%Complete: 50 -SDComment: Intro not made. Script for Madrigosa to be added here. +SD%Complete: 80 +SDComment: Find a way to start the intro, best code for the intro EndScriptData */ #include "precompiled.h" #include "def_sunwell_plateau.h" -#define YELL_INTRO -1580017 -#define YELL_INTRO_BREAK_ICE -1580018 -#define YELL_INTRO_CHARGE -1580019 -#define YELL_INTRO_KILL_MADRIGOSA -1580020 -#define YELL_INTRO_TAUNT -1580021 - -#define YELL_MADR_ICE_BARRIER -1580031 -#define YELL_MADR_INTRO -1580032 -#define YELL_MADR_ICE_BLOCK -1580033 -#define YELL_MADR_TRAP -1580034 -#define YELL_MADR_DEATH -1580035 - -#define YELL_AGGRO -1580022 -#define YELL_KILL1 -1580023 -#define YELL_KILL2 -1580024 -#define YELL_KILL3 -1580025 -#define YELL_LOVE1 -1580026 -#define YELL_LOVE2 -1580027 -#define YELL_LOVE3 -1580028 -#define YELL_BERSERK -1580029 -#define YELL_DEATH -1580030 - -#define SPELL_METEOR_SLASH 45150 -#define SPELL_BURN 45141 -#define SPELL_STOMP 45185 -#define SPELL_BERSERK 26662 -#define SPELL_DUAL_WIELD 42459 - -#define FREEZING 45203 -#define FROST_BOLT 44843 -#define ENCAPSULATE 45665 -#define ENCAPSULATE_CHANELLING 45661 +enum Quotes +{ + YELL_INTRO = -1580017, + YELL_INTRO_BREAK_ICE = -1580018, + YELL_INTRO_CHARGE = -1580019, + YELL_INTRO_KILL_MADRIGOSA = -1580020, + YELL_INTRO_TAUNT = -1580021, + + YELL_MADR_ICE_BARRIER = -1580031, + YELL_MADR_INTRO = -1580032, + YELL_MADR_ICE_BLOCK = -1580033, + YELL_MADR_TRAP = -1580034, + YELL_MADR_DEATH = -1580035, + + YELL_AGGRO = -1580022, + YELL_KILL1 = -1580023, + YELL_KILL2 = -1580024, + YELL_KILL3 = -1580025, + YELL_LOVE1 = -1580026, + YELL_LOVE2 = -1580027, + YELL_LOVE3 = -1580028, + YELL_BERSERK = -1580029, + YELL_DEATH = -1580030 +}; + +enum Spells +{ + SPELL_METEOR_SLASH = 45150, + SPELL_BURN = 46394, + SPELL_STOMP = 45185, + SPELL_BERSERK = 26662, + SPELL_DUAL_WIELD = 42459, + + SPELL_INTRO_FROST_BLAST = 45203, + SPELL_INTRO_FROSTBOLT = 44843, + SPELL_INTRO_ENCAPSULATE = 45665, + SPELL_INTRO_ENCAPSULATE_CHANELLING = 45661 +}; + +#define FELMYST 25038 struct TRINITY_DLL_DECL boss_brutallusAI : public ScriptedAI { - boss_brutallusAI(Creature *c) : ScriptedAI(c) - { + boss_brutallusAI(Creature *c) : ScriptedAI(c){ pInstance = ((ScriptedInstance*)c->GetInstanceData()); } ScriptedInstance* pInstance; + Unit* Madrigosa; uint32 SlashTimer; uint32 BurnTimer; uint32 StompTimer; uint32 BerserkTimer; - uint32 ConversationTimer; + uint32 IntroPhase; + uint32 IntroPhaseTimer; + uint32 IntroFrostBoltTimer; + bool Intro; + bool IsIntro; + bool Enraged; void Reset() { @@ -79,10 +92,31 @@ struct TRINITY_DLL_DECL boss_brutallusAI : public ScriptedAI StompTimer = 30000; BurnTimer = 60000; BerserkTimer = 360000; + + IntroPhase = 0; + IntroPhaseTimer = 0; + IntroFrostBoltTimer = 0; + + IsIntro = false; + Enraged = false; + Intro = true; //for debug + m_creature->CastSpell(m_creature, SPELL_DUAL_WIELD, true); + m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + Madrigosa = Unit::GetUnit(*m_creature, pInstance->GetData64(DATA_MADRIGOSA)); + //Creature* boss = Unit::GetCreature((*m_creature),AzgalorGUID); + if(!Madrigosa) error_log("Madrigosa ist nicht zu finden"); + + if(Intro && Madrigosa){ + if(!Madrigosa->isAlive()) + EndIntro(); + else error_log("Madrigosa is Tod"); + } + else + EndIntro(); if(pInstance) - pInstance->SetData(DATA_BRUTALLUS, NOT_STARTED); + pInstance->SetData(DATA_BRUTALLUS_EVENT, NOT_STARTED); } void Aggro(Unit *who) @@ -90,16 +124,16 @@ struct TRINITY_DLL_DECL boss_brutallusAI : public ScriptedAI DoScriptText(YELL_AGGRO, m_creature); if(pInstance) - pInstance->SetData(DATA_BRUTALLUS, IN_PROGRESS); + pInstance->SetData(DATA_BRUTALLUS_EVENT, IN_PROGRESS); } void KilledUnit(Unit* victim) { switch(rand()%3) { - case 0: DoScriptText(YELL_KILL1, m_creature); break; - case 1: DoScriptText(YELL_KILL2, m_creature); break; - case 2: DoScriptText(YELL_KILL3, m_creature); break; + case 0: DoScriptText(YELL_KILL1, m_creature); break; + case 1: DoScriptText(YELL_KILL2, m_creature); break; + case 2: DoScriptText(YELL_KILL3, m_creature); break; } } @@ -107,18 +141,142 @@ struct TRINITY_DLL_DECL boss_brutallusAI : public ScriptedAI { DoScriptText(YELL_DEATH, m_creature); - if(pInstance) - pInstance->SetData(DATA_BRUTALLUS, DONE); + if(pInstance){ + pInstance->SetData(DATA_BRUTALLUS_EVENT, DONE); + float x,y,z; + m_creature->GetPosition(x,y,z); + m_creature->SummonCreature(FELMYST, x,y, z+30, m_creature->GetOrientation(), TEMPSUMMON_MANUAL_DESPAWN, 0); + } } - void UpdateAI(const uint32 diff) + void StartIntro() + { + if(!Intro) + return; + if(Madrigosa){ + Madrigosa->setDeathState(ALIVE); + Madrigosa->setActive(true); + IsIntro = true; + } + error_log("Starte das Intro"); + } + + void EndIntro() + { + error_log("Beende das Intro"); + m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + Intro = false; + IsIntro = false; + } + + void DoIntro() { - if (!UpdateVictim() ) + if(!Madrigosa) return; + switch(IntroPhase) + { + case 0: + DoScriptText(YELL_MADR_ICE_BARRIER, Madrigosa); + IntroPhaseTimer = 5000; + ++IntroPhase; + break; + case 1: + m_creature->SetInFront(Madrigosa); + Madrigosa->SetInFront(m_creature); + DoScriptText(YELL_MADR_INTRO, Madrigosa, m_creature); + IntroPhaseTimer = 9000; + ++IntroPhase; + break; + case 2: + DoScriptText(YELL_INTRO, m_creature, Madrigosa); + IntroPhaseTimer = 13000; + ++IntroPhase; + break; + case 3: + DoCast(m_creature, SPELL_INTRO_FROST_BLAST); + Madrigosa->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT + MOVEMENTFLAG_LEVITATING); + IntroFrostBoltTimer = 3000; + IntroPhaseTimer = 28000; + ++IntroPhase; + break; + case 4: + DoScriptText(YELL_INTRO_BREAK_ICE, m_creature); + IntroPhaseTimer = 6000; + ++IntroPhase; + break; + case 5: + Madrigosa->CastSpell(m_creature, SPELL_INTRO_ENCAPSULATE_CHANELLING, false); + DoScriptText(YELL_MADR_TRAP, Madrigosa); + DoCast(m_creature, SPELL_INTRO_ENCAPSULATE); + IntroPhaseTimer = 11000; + ++IntroPhase; + break; + case 6: + m_creature->SetSpeed(MOVE_RUN, 4.0f, true); + DoScriptText(YELL_INTRO_CHARGE, m_creature); + IntroPhaseTimer = 3000; + ++IntroPhase; + break; + case 7: + m_creature->DealDamage(Madrigosa, Madrigosa->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, true); + DoScriptText(YELL_MADR_DEATH, Madrigosa); + m_creature->SetHealth(m_creature->GetMaxHealth()); + m_creature->AttackStop(); + m_creature->SetSpeed(MOVE_RUN, 1.0f, true); + IntroPhaseTimer = 3000; + ++IntroPhase; + break; + case 8: + DoScriptText(YELL_INTRO_KILL_MADRIGOSA, m_creature); + m_creature->SetOrientation(0.14); + Madrigosa->setDeathState(CORPSE); + IntroPhaseTimer = 5000; + ++IntroPhase; + break; + case 9: + DoScriptText(YELL_INTRO_TAUNT, m_creature); + IntroPhaseTimer = 5000; + ++IntroPhase; + break; + case 10: + EndIntro(); + break; + } + } + + void MoveInLineOfSight(Unit *who){ + if(pInstance && Intro) + pInstance->SetData(DATA_BRUTALLUS_EVENT, SPECIAL); + } + + void UpdateAI(const uint32 diff) + { + if(Intro && !IsIntro) + StartIntro(); + + if(IsIntro) + { + if(IntroPhaseTimer < diff){ + DoIntro(); + }else IntroPhaseTimer -= diff; + + if(IntroPhase == 3 + 1){ + if(IntroFrostBoltTimer < diff){ + if(Madrigosa){ + Madrigosa->CastSpell(m_creature, SPELL_INTRO_FROSTBOLT, false); + IntroFrostBoltTimer = 2000; + } + }else IntroFrostBoltTimer -= diff; + } + } + + if(!UpdateVictim() || IsIntro) + return; + if(SlashTimer < diff) { - DoCast(m_creature->getVictim(),SPELL_METEOR_SLASH); + DoCast(m_creature->getVictim(), SPELL_METEOR_SLASH); SlashTimer = 11000; }else SlashTimer -= diff; @@ -126,14 +284,11 @@ struct TRINITY_DLL_DECL boss_brutallusAI : public ScriptedAI { switch(rand()%3) { - case 0: DoScriptText(YELL_LOVE1, m_creature); break; - case 1: DoScriptText(YELL_LOVE2, m_creature); break; - case 2: DoScriptText(YELL_LOVE3, m_creature); break; + case 0: DoScriptText(YELL_LOVE1, m_creature); break; + case 1: DoScriptText(YELL_LOVE2, m_creature); break; + case 2: DoScriptText(YELL_LOVE3, m_creature); break; } - - Unit *Target = m_creature->getVictim(); - DoCast(Target,SPELL_STOMP); - if(Target->HasAura(45151,0)) Target->RemoveAura(45151,0); + DoCast(m_creature->getVictim(), SPELL_STOMP); StompTimer = 30000; }else StompTimer -= diff; @@ -142,33 +297,30 @@ struct TRINITY_DLL_DECL boss_brutallusAI : public ScriptedAI if(Unit *target = SelectUnit(SELECT_TARGET_RANDOM, 0)) target->CastSpell(target,SPELL_BURN,true); BurnTimer = 60000; - } - else BurnTimer -= diff; + }else BurnTimer -= diff; - if(BerserkTimer < diff) + if(BerserkTimer < diff && !Enraged) { DoScriptText(YELL_BERSERK, m_creature); - DoCast(m_creature,SPELL_BERSERK); - BerserkTimer = 20000; - } - else BerserkTimer -= diff; + DoCast(m_creature, SPELL_BERSERK); + Enraged = true; + }else BerserkTimer -= diff; DoMeleeAttackIfReady(); } - }; CreatureAI* GetAI_boss_brutallus(Creature *_Creature) { return new boss_brutallusAI (_Creature); } - + void AddSC_boss_brutallus() { Script *newscript; + newscript = new Script; newscript->Name="boss_brutallus"; newscript->GetAI = &GetAI_boss_brutallus; newscript->RegisterSelf(); } - diff --git a/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_eredar_twins.cpp b/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_eredar_twins.cpp index 0b013d8fe93..3f02911e5f3 100644 --- a/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_eredar_twins.cpp +++ b/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_eredar_twins.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2006 - 2008 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/> +/* Copyright (C) 2009 Trinity <http://www.trinitycore.org/> * 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 @@ -23,99 +23,98 @@ EndScriptData */ #include "precompiled.h" #include "def_sunwell_plateau.h" -//Intro -#define YELL_INTRO_SAC_1 "Misery..." -#define YELL_INTRO_ALY_2 "Depravity..." -#define YELL_INTRO_SAC_3 "Confusion..." -#define YELL_INTRO_ALY_4 "Hatred..." -#define YELL_INTRO_SAC_5 "Mistrust..." -#define YELL_INTRO_ALY_6 "Chaos..." -#define YELL_INTRO_SAC_7 "These are the hallmarks..." -#define YELL_INTRO_ALY_8 "These are the pillars..." - -// Lady Sacrolash -#define LADY_SACROLASH 25165 - -#define SPELL_DARK_TOUCHED 45347 -#define SPELL_SHADOW_BLADES 45248//10 secs -#define SPELL_DARK_STRIKE 45271 -#define SPELL_SHADOW_NOVA 45329//30-35 secs -#define SPELL_CONFOUNDING_BLOW 45256//25 secs - -#define MOB_SHADOW_IMAGE 25214 -#define SPELL_SHADOW_FURY 45270 -#define SPELL_IMAGE_VISUAL 45263 - -#define SOUND_INTRO 12484 -#define YELL_SHADOW_NOVA "Shadow to the aid of fire!" //only if Alythess is not dead -#define SOUND_SHADOW_NOVA 12485 -#define YELL_SISTER_ALYTHESS_DEAD "Alythess! Your fire burns within me!" -#define SOUND_SISTER_ALYTHESS_DEAD 12488 -#define YELL_SAC_KILL_1 "Shadow engulf." -#define SOUND_SAC_KILL_1 12486 -#define YELL_SAC_KILL_2 "Ee-nok Kryul!" -#define SOUND_SAC_KILL_2 12487 -#define SAY_SAC_DEAD "I... fade." -#define YELL_ENRAGE "Time is a luxury you no longer possess!" - -//enrage 6 minutes -#define SPELL_ENRAGE 46587 -//empower after sister is death -#define SPELL_EMPOWER 45366 - -//debuff prevents touched spell for 3 secounds -#define SPELL_DARK_FLAME 45345 - -//Grand Warlock Alythess -// Don't move only spamm spells ... -#define GRAND_WARLOCK_ALYTHESS 25166 - -#define SPELL_PYROGENICS 45230//15secs -#define SPELL_FLAME_TOUCHED 45348 -#define SPELL_CONFLAGRATION 45342//30-35 secs -#define SPELL_BLAZE 45235//on main target every 3 secs -#define SPELL_FLAME_SEAR 46771 -#define SPELL_BLAZE_SUMMON 45236 //187366 GO -#define SPELL_BLAZE_BURN 45246 - -#define YELL_CANFLAGRATION "Fire to the aid of shadow!" //only if Sacrolash is not dead -#define SOUND_CANFLAGRATION 12489 -#define YELL_SISTER_SACROLASH_DEAD "Sacrolash!" -#define SOUND_SISTER_SACROLASH_DEAD 12492 -#define YELL_ALY_KILL_1 "Fire consume." -#define SOUND_ALY_KILL_1 12490 -#define YELL_ALY_KILL_2 "Ed-ir Halach!" -#define SOUND_ALY_KILL_2 12491 -#define YELL_ALY_DEAD "De-ek Anur!" -#define SOUND_ALY_DEAD 12494 -#define YELL_BERSERK "Your luck has run its curse!" -#define SOUND_BERSERK 12493 +enum Quotes +{ + //Alytesh + YELL_CANFLAGRATION = -1580044, + YELL_SISTER_SACROLASH_DEAD = -1580045, + YELL_ALY_KILL_1 = -1580046, + YELL_ALY_KILL_2 = -1580047, + YELL_ALY_DEAD = -1580048, + YELL_BERSERK = -1580049, + + //Sacrolash + YELL_SHADOW_NOVA = -1580050, + YELL_SISTER_ALYTHESS_DEAD = -1580051, + YELL_SAC_KILL_1 = -1580052, + YELL_SAC_KILL_2 = -1580053, + SAY_SAC_DEAD = -1580054, + YELL_ENRAGE = -1580055, + + //Intro + YELL_INTRO_SAC_1 = -1580056, + YELL_INTRO_ALY_2 = -1580057, + YELL_INTRO_SAC_3 = -1580058, + YELL_INTRO_ALY_4 = -1580059, + YELL_INTRO_SAC_5 = -1580060, + YELL_INTRO_ALY_6 = -1580061, + YELL_INTRO_SAC_7 = -1580062, + YELL_INTRO_ALY_8 = -1580063, + + //Emote + EMOTE_SHADOW_NOVA = -1580064, + EMOTE_CONFLAGRATION = -1580065 +}; +enum Spells +{ + //Lady Sacrolash spells + SPELL_DARK_TOUCHED = 45347, + SPELL_SHADOW_BLADES = 45248, //10 secs + SPELL_DARK_STRIKE = 45271, + SPELL_SHADOW_NOVA = 45329, //30-35 secs + SPELL_CONFOUNDING_BLOW = 45256, //25 secs + + //Shadow Image spells + SPELL_SHADOW_FURY = 45270, + SPELL_IMAGE_VISUAL = 45263, + + //Misc spells + SPELL_ENRAGE = 46587, + SPELL_EMPOWER = 45366, + SPELL_DARK_FLAME = 45345, + + //Grand Warlock Alythess spells + SPELL_PYROGENICS = 45230, //15secs + SPELL_FLAME_TOUCHED = 45348, + SPELL_CONFLAGRATION = 45342, //30-35 secs + SPELL_BLAZE = 45235, //on main target every 3 secs + SPELL_FLAME_SEAR = 46771, + SPELL_BLAZE_SUMMON = 45236, //187366 GO + SPELL_BLAZE_BURN = 45246 +}; + +enum Creatures +{ + GRAND_WARLOCK_ALYTHESS = 25166, + MOB_SHADOW_IMAGE = 25214, + LADY_SACROLASH = 25165 +}; struct TRINITY_DLL_DECL boss_sacrolashAI : public ScriptedAI { - boss_sacrolashAI(Creature *c) : ScriptedAI(c) - { + boss_sacrolashAI(Creature *c) : ScriptedAI(c){ pInstance = ((ScriptedInstance*)c->GetInstanceData()); } ScriptedInstance *pInstance; - bool InCombat; - bool sisterdeath; - - uint32 shadowblades_timer; - uint32 shadownova_timer; - uint32 confoundingblow_timer; - uint32 shadowimage_timer; - - uint32 conflagration_timer; + bool InCombat; + bool SisterDeath; + bool Enraged; - uint32 enrage_timer; + uint32 ShadowbladesTimer; + uint32 ShadownovaTimer; + uint32 ConfoundingblowTimer; + uint32 ShadowimageTimer; + uint32 ConflagrationTimer; + uint32 EnrageTimer; void Reset() { InCombat = false; + Enraged = false; + if(pInstance) { Unit* Temp = Unit::GetUnit((*m_creature),pInstance->GetData64(DATA_ALYTHESS)); @@ -135,26 +134,33 @@ struct TRINITY_DLL_DECL boss_sacrolashAI : public ScriptedAI if(!InCombat) { - shadowblades_timer = 10000; - shadownova_timer = 30000; - confoundingblow_timer = 25000; - shadowimage_timer = 20000; - conflagration_timer = 30000; - sisterdeath = false; + ShadowbladesTimer = 10000; + ShadownovaTimer = 30000; + ConfoundingblowTimer = 25000; + ShadowimageTimer = 20000; + ConflagrationTimer = 30000; + EnrageTimer = 360000; - enrage_timer = 360000; + SisterDeath = false; } + if(pInstance) + pInstance->SetData(DATA_EREDAR_TWINS_EVENT, NOT_STARTED); } + void Aggro(Unit *who) { DoZoneInCombat(); + if(pInstance) { Unit* Temp = Unit::GetUnit((*m_creature),pInstance->GetData64(DATA_ALYTHESS)); if (Temp && Temp->isAlive() && !(Temp->getVictim())) ((Creature*)Temp)->AI()->AttackStart(who); } + + if(pInstance) + pInstance->SetData(DATA_EREDAR_TWINS_EVENT, IN_PROGRESS); } void KilledUnit(Unit *victim) @@ -163,14 +169,8 @@ struct TRINITY_DLL_DECL boss_sacrolashAI : public ScriptedAI { switch (rand()%2) { - case 0: - DoPlaySoundToSet(m_creature,SOUND_SAC_KILL_1); - DoYell(YELL_SAC_KILL_1 ,LANG_UNIVERSAL,NULL); - break; - case 1: - DoPlaySoundToSet(m_creature,SOUND_SAC_KILL_2); - DoYell(YELL_SAC_KILL_2 ,LANG_UNIVERSAL,NULL); - break; + case 0: DoScriptText(YELL_SAC_KILL_1, m_creature); break; + case 1: DoScriptText(YELL_SAC_KILL_2, m_creature); break; } } } @@ -178,14 +178,15 @@ struct TRINITY_DLL_DECL boss_sacrolashAI : public ScriptedAI void JustDied(Unit* Killer) { // only if ALY death - if (sisterdeath) + if (SisterDeath) { - DoYell(SAY_SAC_DEAD ,LANG_UNIVERSAL,NULL); + DoScriptText(SAY_SAC_DEAD, m_creature); + + if(pInstance) + pInstance->SetData(DATA_EREDAR_TWINS_EVENT, DONE); } else - { m_creature->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); - } } void SpellHitTarget(Unit* target,const SpellEntry* spell) @@ -209,29 +210,23 @@ struct TRINITY_DLL_DECL boss_sacrolashAI : public ScriptedAI switch(TouchedType) { case SPELL_FLAME_TOUCHED: - if(!target->HasAura(SPELL_DARK_FLAME,0)) + if(!target->HasAura(SPELL_DARK_FLAME, 0)) { - if(target->HasAura(SPELL_DARK_TOUCHED,0)) + if(target->HasAura(SPELL_DARK_TOUCHED, 0)) { target->RemoveAurasDueToSpell(SPELL_DARK_TOUCHED); - target->CastSpell(target,SPELL_DARK_FLAME,true); - }else - { - target->CastSpell(target,SPELL_FLAME_TOUCHED,true); - } + target->CastSpell(target, SPELL_DARK_FLAME, true); + }else target->CastSpell(target, SPELL_FLAME_TOUCHED, true); } break; case SPELL_DARK_TOUCHED: - if(!target->HasAura(SPELL_DARK_FLAME,0)) + if(!target->HasAura(SPELL_DARK_FLAME, 0)) { - if(target->HasAura(SPELL_FLAME_TOUCHED,0)) + if(target->HasAura(SPELL_FLAME_TOUCHED, 0)) { target->RemoveAurasDueToSpell(SPELL_FLAME_TOUCHED); - target->CastSpell(target,SPELL_DARK_FLAME,true); - }else - { - target->CastSpell(target,SPELL_DARK_TOUCHED,true); - } + target->CastSpell(target, SPELL_DARK_FLAME, true); + }else target->CastSpell(target, SPELL_DARK_TOUCHED, true); } break; } @@ -239,7 +234,7 @@ struct TRINITY_DLL_DECL boss_sacrolashAI : public ScriptedAI void UpdateAI(const uint32 diff) { - if(!sisterdeath) + if(!SisterDeath) { if (pInstance) { @@ -247,12 +242,10 @@ struct TRINITY_DLL_DECL boss_sacrolashAI : public ScriptedAI Temp = Unit::GetUnit((*m_creature),pInstance->GetData64(DATA_ALYTHESS)); if (Temp && Temp->isDead()) { - DoYell(YELL_SISTER_ALYTHESS_DEAD ,LANG_UNIVERSAL,NULL); - DoPlaySoundToSet(m_creature,SOUND_SISTER_ALYTHESS_DEAD); - sisterdeath = true; - - m_creature->InterruptSpell(CURRENT_GENERIC_SPELL); + DoScriptText(YELL_SISTER_ALYTHESS_DEAD, m_creature); DoCast(m_creature,SPELL_EMPOWER); + m_creature->InterruptSpell(CURRENT_GENERIC_SPELL); + SisterDeath = true; } } } @@ -260,54 +253,52 @@ struct TRINITY_DLL_DECL boss_sacrolashAI : public ScriptedAI if (!UpdateVictim()) return; - if(sisterdeath) + if(SisterDeath) { - if (conflagration_timer < diff) + if (ConflagrationTimer < diff) { if (!m_creature->IsNonMeleeSpellCasted(false)) { m_creature->InterruptSpell(CURRENT_GENERIC_SPELL); Unit* target = NULL; target = SelectUnit(SELECT_TARGET_RANDOM, 0); - DoCast(target,SPELL_CONFLAGRATION); - conflagration_timer = 30000+(rand()%5000); + DoCast(target, SPELL_CONFLAGRATION); + ConflagrationTimer = 30000+(rand()%5000); } - }else conflagration_timer -= diff; + }else ConflagrationTimer -= diff; } else { - if(shadownova_timer < diff) + if(ShadownovaTimer < diff) { if (!m_creature->IsNonMeleeSpellCasted(false)) { Unit* target = NULL; target = SelectUnit(SELECT_TARGET_RANDOM, 0); - DoCast(target,SPELL_SHADOW_NOVA); + DoCast(target, SPELL_SHADOW_NOVA); - if(!sisterdeath) + if(!SisterDeath) { - m_creature->MonsterTextEmote("directs Shadow Nova at $N",target->GetGUID(),true); - DoPlaySoundToSet(m_creature,SOUND_SHADOW_NOVA); - DoYell(YELL_SHADOW_NOVA,LANG_UNIVERSAL,NULL); + DoScriptText(EMOTE_SHADOW_NOVA, m_creature, target); + DoScriptText(YELL_SHADOW_NOVA, m_creature); } - - shadownova_timer= 30000+(rand()%5000); + ShadownovaTimer = 30000+(rand()%5000); } - }else shadownova_timer -=diff; + }else ShadownovaTimer -=diff; } - if(confoundingblow_timer < diff) + if(ConfoundingblowTimer < diff) { if (!m_creature->IsNonMeleeSpellCasted(false)) { Unit* target = NULL; target = SelectUnit(SELECT_TARGET_RANDOM, 0); - DoCast(target,SPELL_CONFOUNDING_BLOW); - confoundingblow_timer = 20000 + (rand()%5000); + DoCast(target, SPELL_CONFOUNDING_BLOW); + ConfoundingblowTimer = 20000 + (rand()%5000); } - }else confoundingblow_timer -=diff; + }else ConfoundingblowTimer -=diff; - if(shadowimage_timer < diff) + if(ShadowimageTimer < diff) { Unit* target = NULL; Creature* temp = NULL; @@ -317,26 +308,25 @@ struct TRINITY_DLL_DECL boss_sacrolashAI : public ScriptedAI temp = DoSpawnCreature(MOB_SHADOW_IMAGE,0,0,0,0,TEMPSUMMON_CORPSE_DESPAWN,10000); temp->AI()->AttackStart(target); } - shadowimage_timer = 20000; - }else shadowimage_timer -=diff; + ShadowimageTimer = 20000; + }else ShadowimageTimer -=diff; - if(shadowblades_timer < diff) + if(ShadowbladesTimer < diff) { if (!m_creature->IsNonMeleeSpellCasted(false)) { - DoCast(m_creature,SPELL_SHADOW_BLADES); - shadowblades_timer = 10000; - + DoCast(m_creature, SPELL_SHADOW_BLADES); + ShadowbladesTimer = 10000; } - }else shadowblades_timer -=diff; + }else ShadowbladesTimer -=diff; - if (enrage_timer < diff) + if (EnrageTimer < diff && !Enraged) { m_creature->InterruptSpell(CURRENT_GENERIC_SPELL); - DoYell(YELL_ENRAGE ,LANG_UNIVERSAL,NULL); + DoScriptText(YELL_ENRAGE, m_creature); DoCast(m_creature,SPELL_ENRAGE); - enrage_timer = 300000; - }else enrage_timer -= diff; + Enraged = true; + }else EnrageTimer -= diff; if( m_creature->isAttackReady() && !m_creature->IsNonMeleeSpellCasted(false)) { @@ -358,29 +348,32 @@ CreatureAI* GetAI_boss_sacrolash(Creature *_Creature) struct TRINITY_DLL_DECL boss_alythessAI : public Scripted_NoMovementAI { - boss_alythessAI(Creature *c) : Scripted_NoMovementAI(c) - { - pInstance = ((ScriptedInstance*)c->GetInstanceData()); IntroStepCounter = 10; + boss_alythessAI(Creature *c) : Scripted_NoMovementAI(c){ + pInstance = ((ScriptedInstance*)c->GetInstanceData()); + IntroStepCounter = 10; } ScriptedInstance *pInstance; - bool InCombat; - bool sisterdeath; - uint32 IntroStepCounter; - uint32 IntroYell_Timer; - uint32 conflagration_timer; - uint32 blaze_timer; - uint32 pyrogenics_timer; + bool InCombat; + bool SisterDeath; + bool Enraged; - uint32 shadownova_timer; - uint32 flamesear_timer; + uint32 IntroStepCounter; + uint32 IntroYellTimer; - uint32 enrage_timer; + uint32 ConflagrationTimer; + uint32 BlazeTimer; + uint32 PyrogenicsTimer; + uint32 ShadownovaTimer; + uint32 FlamesearTimer; + uint32 EnrageTimer; void Reset() { InCombat = false; + Enraged = false; + if(pInstance) { Unit* Temp = Unit::GetUnit((*m_creature),pInstance->GetData64(DATA_SACROLASH)); @@ -400,25 +393,34 @@ struct TRINITY_DLL_DECL boss_alythessAI : public Scripted_NoMovementAI if(!InCombat) { - conflagration_timer = 45000; - blaze_timer = 100; - pyrogenics_timer = 15000; - shadownova_timer = 40000; - sisterdeath = false; - enrage_timer = 360000; - flamesear_timer = 15000; - IntroYell_Timer = 10000; + ConflagrationTimer = 45000; + BlazeTimer = 100; + PyrogenicsTimer = 15000; + ShadownovaTimer = 40000; + EnrageTimer = 360000; + FlamesearTimer = 15000; + IntroYellTimer = 10000; + + SisterDeath = false; } + + if(pInstance) + pInstance->SetData(DATA_EREDAR_TWINS_EVENT, NOT_STARTED); } + void Aggro(Unit *who) { DoZoneInCombat(); + if(pInstance) { Unit* Temp = Unit::GetUnit((*m_creature),pInstance->GetData64(DATA_SACROLASH)); if (Temp && Temp->isAlive() && !(Temp->getVictim())) ((Creature*)Temp)->AI()->AttackStart(who); } + + if(pInstance) + pInstance->SetData(DATA_EREDAR_TWINS_EVENT, IN_PROGRESS); } void AttackStart(Unit *who) @@ -460,29 +462,23 @@ struct TRINITY_DLL_DECL boss_alythessAI : public Scripted_NoMovementAI { switch (rand()%2) { - case 0: - DoPlaySoundToSet(m_creature,SOUND_ALY_KILL_1); - DoYell(YELL_ALY_KILL_1 ,LANG_UNIVERSAL,NULL); - break; - case 1: - DoPlaySoundToSet(m_creature,SOUND_ALY_KILL_2); - DoYell(YELL_ALY_KILL_2 ,LANG_UNIVERSAL,NULL); - break; + case 0: DoScriptText(YELL_ALY_KILL_1, m_creature); break; + case 1: DoScriptText(YELL_ALY_KILL_2, m_creature); break; } } } void JustDied(Unit* Killer) { - if (sisterdeath) + if (SisterDeath) { - DoYell(YELL_ALY_DEAD ,LANG_UNIVERSAL,NULL); - DoPlaySoundToSet(m_creature,SOUND_ALY_DEAD); + DoScriptText(YELL_ALY_DEAD, m_creature); + + if(pInstance) + pInstance->SetData(DATA_EREDAR_TWINS_EVENT, NOT_STARTED); } else - { m_creature->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); - } } void SpellHitTarget(Unit* target,const SpellEntry* spell) @@ -491,7 +487,7 @@ struct TRINITY_DLL_DECL boss_alythessAI : public Scripted_NoMovementAI { case SPELL_BLAZE: - target->CastSpell(target,SPELL_BLAZE_SUMMON,true); + target->CastSpell(target, SPELL_BLAZE_SUMMON, true); case SPELL_CONFLAGRATION: case SPELL_FLAME_SEAR: HandleTouchedSpells(target, SPELL_FLAME_TOUCHED); @@ -507,29 +503,26 @@ struct TRINITY_DLL_DECL boss_alythessAI : public Scripted_NoMovementAI switch(TouchedType) { case SPELL_FLAME_TOUCHED: - if(!target->HasAura(SPELL_DARK_FLAME,0)) + if(!target->HasAura(SPELL_DARK_FLAME, 0)) { - if(target->HasAura(SPELL_DARK_TOUCHED,0)) + if(target->HasAura(SPELL_DARK_TOUCHED, 0)) { target->RemoveAurasDueToSpell(SPELL_DARK_TOUCHED); - target->CastSpell(target,SPELL_DARK_FLAME,true); + target->CastSpell(target, SPELL_DARK_FLAME, true); }else { - target->CastSpell(target,SPELL_FLAME_TOUCHED,true); + target->CastSpell(target, SPELL_FLAME_TOUCHED, true); } } break; case SPELL_DARK_TOUCHED: - if(!target->HasAura(SPELL_DARK_FLAME,0)) + if(!target->HasAura(SPELL_DARK_FLAME, 0)) { - if(target->HasAura(SPELL_FLAME_TOUCHED,0)) + if(target->HasAura(SPELL_FLAME_TOUCHED, 0)) { target->RemoveAurasDueToSpell(SPELL_FLAME_TOUCHED); - target->CastSpell(target,SPELL_DARK_FLAME,true); - }else - { - target->CastSpell(target,SPELL_DARK_TOUCHED,true); - } + target->CastSpell(target, SPELL_DARK_FLAME, true); + }else target->CastSpell(target, SPELL_DARK_TOUCHED, true); } break; } @@ -537,38 +530,30 @@ struct TRINITY_DLL_DECL boss_alythessAI : public Scripted_NoMovementAI uint32 IntroStep(uint32 step) { - Creature* Sacrolash = Unit::GetCreature((*m_creature),pInstance->GetData64(DATA_SACROLASH)); + Creature* Sacrolash = (Creature*)Unit::GetUnit((*m_creature),pInstance->GetData64(DATA_SACROLASH)); switch (step) { - case 0: DoPlaySoundToSet(m_creature,SOUND_INTRO); return 0; - case 1: + case 0: return 0; + case 1: if(Sacrolash) - Sacrolash->Yell(YELL_INTRO_SAC_1, LANG_UNIVERSAL,NULL); - return 1000; - case 2: - m_creature->Yell(YELL_INTRO_ALY_2, LANG_UNIVERSAL,NULL); + DoScriptText(YELL_INTRO_SAC_1, Sacrolash); return 1000; + case 2: DoScriptText(YELL_INTRO_ALY_2, m_creature); return 1000; case 3: if(Sacrolash) - Sacrolash->Yell(YELL_INTRO_SAC_3, LANG_UNIVERSAL,NULL); + DoScriptText(YELL_INTRO_SAC_3, Sacrolash); return 2000; - case 4: - m_creature->Yell(YELL_INTRO_ALY_4, LANG_UNIVERSAL,NULL); - return 1000; + case 4: DoScriptText(YELL_INTRO_ALY_4, m_creature); return 1000; case 5: if(Sacrolash) - Sacrolash->Yell(YELL_INTRO_SAC_5, LANG_UNIVERSAL,NULL); + DoScriptText(YELL_INTRO_SAC_5, Sacrolash); return 2000; - case 6: - m_creature->Yell(YELL_INTRO_ALY_6, LANG_UNIVERSAL,NULL); - return 1000; - case 7: + case 6: DoScriptText(YELL_INTRO_ALY_6, m_creature); return 1000; + case 7: if(Sacrolash) - Sacrolash->Yell(YELL_INTRO_SAC_7, LANG_UNIVERSAL,NULL); + DoScriptText(YELL_INTRO_SAC_7, Sacrolash); return 3000; - case 8: - m_creature->Yell(YELL_INTRO_ALY_8, LANG_UNIVERSAL,NULL); - return 900000; + case 8: DoScriptText(YELL_INTRO_ALY_8, m_creature); return 900000; } return 10000; } @@ -577,13 +562,13 @@ struct TRINITY_DLL_DECL boss_alythessAI : public Scripted_NoMovementAI { if(IntroStepCounter < 9) { - if(IntroYell_Timer < diff) + if(IntroYellTimer < diff) { - IntroYell_Timer = IntroStep(IntroStepCounter++); - }else IntroYell_Timer -= diff; + IntroYellTimer = IntroStep(++IntroStepCounter); + }else IntroYellTimer -= diff; } - if(!sisterdeath) + if(!SisterDeath) { if (pInstance) { @@ -591,12 +576,10 @@ struct TRINITY_DLL_DECL boss_alythessAI : public Scripted_NoMovementAI Temp = Unit::GetUnit((*m_creature),pInstance->GetData64(DATA_SACROLASH)); if (Temp && Temp->isDead()) { - DoYell(YELL_SISTER_SACROLASH_DEAD ,LANG_UNIVERSAL,NULL); - DoPlaySoundToSet(m_creature,SOUND_SISTER_SACROLASH_DEAD); - sisterdeath = true; - - m_creature->InterruptSpell(CURRENT_GENERIC_SPELL); - DoCast(m_creature,SPELL_EMPOWER); + DoScriptText(YELL_SISTER_SACROLASH_DEAD, m_creature); + DoCast(m_creature, SPELL_EMPOWER); + m_creature->InterruptSpell(CURRENT_GENERIC_SPELL); + SisterDeath = true; } } } @@ -604,78 +587,76 @@ struct TRINITY_DLL_DECL boss_alythessAI : public Scripted_NoMovementAI if (!UpdateVictim()) return; - if(sisterdeath) + if(SisterDeath) { - if(shadownova_timer < diff) + if(ShadownovaTimer < diff) { if (!m_creature->IsNonMeleeSpellCasted(false)) { Unit* target = NULL; target = SelectUnit(SELECT_TARGET_RANDOM, 0); - DoCast(target,SPELL_SHADOW_NOVA); - shadownova_timer= 30000+(rand()%5000); + DoCast(target, SPELL_SHADOW_NOVA); + ShadownovaTimer= 30000+(rand()%5000); } - }else shadownova_timer -=diff; + }else ShadownovaTimer -=diff; } else { - if (conflagration_timer < diff) + if(ConflagrationTimer < diff) { if (!m_creature->IsNonMeleeSpellCasted(false)) { m_creature->InterruptSpell(CURRENT_GENERIC_SPELL); Unit* target = NULL; target = SelectUnit(SELECT_TARGET_RANDOM, 0); - DoCast(target,SPELL_CONFLAGRATION); - conflagration_timer = 30000+(rand()%5000); + DoCast(target, SPELL_CONFLAGRATION); + ConflagrationTimer = 30000+(rand()%5000); - if(!sisterdeath) + if(!SisterDeath) { - m_creature->MonsterTextEmote("directs Conflagration at $N",target->GetGUID(),true); - DoPlaySoundToSet(m_creature,SOUND_CANFLAGRATION); - DoYell(YELL_CANFLAGRATION,LANG_UNIVERSAL,NULL); + DoScriptText(EMOTE_CONFLAGRATION, m_creature, target); + DoScriptText(YELL_CANFLAGRATION, m_creature); } - blaze_timer = 4000; + BlazeTimer = 4000; } - }else conflagration_timer -= diff; + }else ConflagrationTimer -= diff; } - if (flamesear_timer < diff) + if(FlamesearTimer < diff) { - if (!m_creature->IsNonMeleeSpellCasted(false)) + if(!m_creature->IsNonMeleeSpellCasted(false)) { - DoCast(m_creature,SPELL_FLAME_SEAR); - flamesear_timer = 15000; + DoCast(m_creature, SPELL_FLAME_SEAR); + FlamesearTimer = 15000; } - }else flamesear_timer -=diff; + }else FlamesearTimer -=diff; - if (pyrogenics_timer < diff) + if (PyrogenicsTimer < diff) { - if (!m_creature->IsNonMeleeSpellCasted(false)) + if(!m_creature->IsNonMeleeSpellCasted(false)) { - DoCast(m_creature,SPELL_PYROGENICS,true); - pyrogenics_timer = 15000; + DoCast(m_creature, SPELL_PYROGENICS,true); + PyrogenicsTimer = 15000; } - }else pyrogenics_timer -= diff; + }else PyrogenicsTimer -= diff; - if (blaze_timer < diff) + if (BlazeTimer < diff) { - if (!m_creature->IsNonMeleeSpellCasted(false)) + if(!m_creature->IsNonMeleeSpellCasted(false)) { - DoCast(m_creature->getVictim(),SPELL_BLAZE); - blaze_timer = 3800; + DoCast(m_creature->getVictim(), SPELL_BLAZE); + BlazeTimer = 3800; } - }else blaze_timer -= diff; + }else BlazeTimer -= diff; - if (enrage_timer < diff) + if (EnrageTimer < diff && !Enraged) { m_creature->InterruptSpell(CURRENT_GENERIC_SPELL); - DoPlaySoundToSet(m_creature,SOUND_BERSERK); - DoYell(YELL_BERSERK ,LANG_UNIVERSAL,NULL); - DoCast(m_creature,SPELL_ENRAGE); - enrage_timer = 300000; - }else enrage_timer -= diff; + DoScriptText(YELL_BERSERK, m_creature); + DoCast(m_creature, SPELL_ENRAGE); + Enraged = true; + }else EnrageTimer -= diff; } }; @@ -688,16 +669,15 @@ struct TRINITY_DLL_DECL mob_shadow_imageAI : public ScriptedAI { mob_shadow_imageAI(Creature *c) : ScriptedAI(c) {} - uint32 shadowfury_timer; - uint32 kill_timer; - uint32 darkstrike_timer; + uint32 ShadowfuryTimer; + uint32 KillTimer; + uint32 DarkstrikeTimer; void Reset() { - shadowfury_timer = 5000 + (rand()%15000); - darkstrike_timer = 3000; - kill_timer = 15000; - + ShadowfuryTimer = 5000 + (rand()%15000); + DarkstrikeTimer = 3000; + KillTimer = 15000; } void Aggro(Unit *who){} @@ -709,16 +689,13 @@ struct TRINITY_DLL_DECL mob_shadow_imageAI : public ScriptedAI case SPELL_SHADOW_FURY: case SPELL_DARK_STRIKE: - if(!target->HasAura(SPELL_DARK_FLAME,0)) + if(!target->HasAura(SPELL_DARK_FLAME, 0)) { - if(target->HasAura(SPELL_FLAME_TOUCHED,0)) + if(target->HasAura(SPELL_FLAME_TOUCHED, 0)) { target->RemoveAurasDueToSpell(SPELL_FLAME_TOUCHED); - target->CastSpell(target,SPELL_DARK_FLAME,true); - }else - { - target->CastSpell(target,SPELL_DARK_TOUCHED,true); - } + target->CastSpell(target, SPELL_DARK_FLAME, true); + }else target->CastSpell(target,SPELL_DARK_TOUCHED,true); } break; } @@ -726,37 +703,35 @@ struct TRINITY_DLL_DECL mob_shadow_imageAI : public ScriptedAI void UpdateAI(const uint32 diff) { - if(!m_creature->HasAura(SPELL_IMAGE_VISUAL,0)) - DoCast(m_creature,SPELL_IMAGE_VISUAL); + if(!m_creature->HasAura(SPELL_IMAGE_VISUAL, 0)) + DoCast(m_creature, SPELL_IMAGE_VISUAL); - if(kill_timer < diff) + if(KillTimer < diff) { m_creature->DealDamage(m_creature, m_creature->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); - kill_timer = 9999999; - }else kill_timer -=diff; + KillTimer = 9999999; + }else KillTimer -=diff; if (!UpdateVictim()) return; - if(shadowfury_timer < diff) + if(ShadowfuryTimer < diff) { - DoCast(m_creature,SPELL_SHADOW_FURY); - shadowfury_timer = 10000; - }else shadowfury_timer -=diff; + DoCast(m_creature, SPELL_SHADOW_FURY); + ShadowfuryTimer = 10000; + }else ShadowfuryTimer -=diff; - if(darkstrike_timer < diff) + if(DarkstrikeTimer < diff) { if(!m_creature->IsNonMeleeSpellCasted(false)) { //If we are within range melee the target - if( m_creature->IsWithinMeleeRange(m_creature->getVictim())) - { - DoCast(m_creature->getVictim(),SPELL_DARK_STRIKE); - } + if( m_creature->IsWithinMeleeRange(m_creature->getVictim())) + DoCast(m_creature->getVictim(), SPELL_DARK_STRIKE); } - darkstrike_timer = 3000; + DarkstrikeTimer = 3000; } - else darkstrike_timer -= diff; + else DarkstrikeTimer -= diff; } }; @@ -768,6 +743,7 @@ CreatureAI* GetAI_mob_shadow_image(Creature *_Creature) void AddSC_boss_eredar_twins() { Script *newscript; + newscript = new Script; newscript->Name="boss_sacrolash"; newscript->GetAI = &GetAI_boss_sacrolash; @@ -783,4 +759,3 @@ void AddSC_boss_eredar_twins() newscript->GetAI = &GetAI_mob_shadow_image; newscript->RegisterSelf(); } - diff --git a/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_felmyst.cpp b/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_felmyst.cpp index 68bb0ae8e44..4783473d56d 100644 --- a/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_felmyst.cpp +++ b/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_felmyst.cpp @@ -1,4 +1,4 @@ -/* Copyright ?2006,2007 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/> +/* Copyright (C) 2009 Trinity <http://www.trinitycore.org/> * 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 @@ -22,76 +22,77 @@ EndScriptData */ #include "precompiled.h" #include "def_sunwell_plateau.h" -#include "Player.h" - -// AURA -#define AURA_SUNWELL_RADIANCE 45769 -#define AURA_NOXIOUS_FUMES 47002 -// LAND PHASE SPELL -#define SPELL_CLEAVE 19983 -#define SPELL_CORROSION 45866 -#define SPELL_GAS_NOVA 45855 -#define SPELL_ENCAPSULATE_CHANNEL 45661 -#define SPELL_ENCAPSULATE_EFFECT 45665 -#define SPELL_ENCAPSULATE_AOE 45662 -// FLIGHT PHASE SPELL -#define SPELL_VAPOR_SELECT 45391 // fel to player, force cast 45392, 50000y selete target -#define SPELL_VAPOR_SUMMON 45392 // player summon vapor, radius around caster, 5y, -#define SPELL_VAPOR_FORCE 45388 // vapor to fel, force cast 45389 -#define SPELL_VAPOR_CHANNEL 45389 // fel to vapor, green beam channel -#define SPELL_VAPOR_TRIGGER 45411 // linked to 45389, vapor to self, trigger 45410 and 46931 -#define SPELL_VAPOR_DAMAGE 46931 // vapor damage, 4000 -#define SPELL_TRAIL_SUMMON 45410 // vapor summon trail -#define SPELL_TRAIL_TRIGGER 45399 // trail to self, trigger 45402 -#define SPELL_TRAIL_DAMAGE 45402 // trail damage, 2000 + 2000 dot -#define SPELL_DEAD_SUMMON 45400 // summon blazing dead, 5min -#define SPELL_DEAD_PASSIVE 45415 -#define SPELL_FOG_BREATH 45495 // fel to self, speed burst -#define SPELL_FOG_TRIGGER 45582 // fog to self, trigger 45782 -#define SPELL_FOG_FORCE 45782 // fog to player, force cast 45714 -#define SPELL_FOG_INFORM 45714 // player let fel cast 45717, script effect -#define SPELL_FOG_CHARM 45717 // fel to player -#define SPELL_FOG_CHARM2 45726 // link to 45717 - -#define SPELL_TRANSFORM_TRIGGER 44885 // madrigosa to self, trigger 46350 -#define SPELL_TRANSFORM_VISUAL 46350 //46411stun? -#define SPELL_TRANSFORM_FELMYST 45068 // become fel -#define SPELL_FELMYST_SUMMON 45069 -// OTHER -#define SPELL_BERSERK 45078 -#define SPELL_CLOUD_VISUAL 45212 -#define SPELL_CLOUD_SUMMON 45884 - -//Creatures -#define MOB_FELMYST 25038 -#define MOB_BRUTALLUS -#define MOB_KALECGOS -#define MOB_DEAD 25268 -#define MOB_MADRIGOSA 25160 -#define MOB_FELMYST_VISUAL 25041 -#define MOB_FLIGHT_LEFT 25357 -#define MOB_FLIGHT_RIGHT 25358 -#define MOB_DEATH_CLOUD 25703 -#define MOB_VAPOR 25265 -#define MOB_VAPOR_TRAIL 25267 - -//Yells and Sounds -#define YELL_BIRTH "Glory to Kil'jaeden! Death to all who oppose!" -#define SOUND_BIRTH 12477 -#define YELL_KILL1 "I kill for the master!" -#define SOUND_KILL1 12480 -#define YELL_KILL2 "The end has come!" -#define SOUND_KILL2 12481 -#define YELL_BREATH "Choke on your final breath!" -#define SOUND_BREATH 12478 -#define YELL_TAKEOFF "I am stronger than ever before!" -#define SOUND_TAKEOFF 12479 -#define YELL_BERSERK "No more hesitation! Your fates are written!" -#define SOUND_BERSERK 12482 -#define YELL_DEATH "Kil'jaeden... will... prevail..." -#define SOUND_DEATH 12483 - -#define YELL_KALECGOS "Madrigosa deserved a far better fate. You did what had to be done, but this battle is far from over." + +enum Quotes +{ + YELL_BIRTH = -1580036, + YELL_KILL1 = -1580037, + YELL_KILL2 = -1580038, + YELL_BREATH = -1580039, + YELL_TAKEOFF = -1580040, + YELL_BERSERK = -1580041, + YELL_DEATH = -1580042, + YELL_KALECGOS = -1580043 //after felmyst's death spawned and say this +}; + +enum Spells +{ + //Aura + AURA_SUNWELL_RADIANCE = 45769, + AURA_NOXIOUS_FUMES = 47002, + + //Land phase + SPELL_CLEAVE = 19983, + SPELL_CORROSION = 45866, + SPELL_GAS_NOVA = 45855, + SPELL_ENCAPSULATE_CHANNEL = 45661, + SPELL_ENCAPSULATE_EFFECT = 45665, + SPELL_ENCAPSULATE_AOE = 45662, + + //Flight phase + SPELL_VAPOR_SELECT = 45391, // fel to player, force cast 45392, 50000y selete target + SPELL_VAPOR_SUMMON = 45392, // player summon vapor, radius around caster, 5y, + SPELL_VAPOR_FORCE = 45388, // vapor to fel, force cast 45389 + SPELL_VAPOR_CHANNEL = 45389, // fel to vapor, green beam channel + SPELL_VAPOR_TRIGGER = 45411, // linked to 45389, vapor to self, trigger 45410 and 46931 + SPELL_VAPOR_DAMAGE = 46931, // vapor damage, 4000 + SPELL_TRAIL_SUMMON = 45410, // vapor summon trail + SPELL_TRAIL_TRIGGER = 45399, // trail to self, trigger 45402 + SPELL_TRAIL_DAMAGE = 45402, // trail damage, 2000 + 2000 dot + SPELL_DEAD_SUMMON = 45400, // summon blazing dead, 5min + SPELL_DEAD_PASSIVE = 45415, + SPELL_FOG_BREATH = 45495, // fel to self, speed burst + SPELL_FOG_TRIGGER = 45582, // fog to self, trigger 45782 + SPELL_FOG_FORCE = 45782, // fog to player, force cast 45714 + SPELL_FOG_INFORM = 45714, // player let fel cast 45717, script effect + SPELL_FOG_CHARM = 45717, // fel to player + SPELL_FOG_CHARM2 = 45726, // link to 45717 + + SPELL_TRANSFORM_TRIGGER = 44885, // madrigosa to self, trigger 46350 + SPELL_TRANSFORM_VISUAL = 46350, //46411stun? + SPELL_TRANSFORM_FELMYST = 45068, // become fel + SPELL_FELMYST_SUMMON = 45069, + + //Other + SPELL_BERSERK = 45078, + SPELL_CLOUD_VISUAL = 45212, + SPELL_CLOUD_SUMMON = 45884 +}; + +enum Creatures +{ + MOB_FELMYST = 25038, + //MOB_BRUTALLUS = + //MOB_KALECGOS = + MOB_DEAD = 25268, + MOB_MADRIGOSA = 25160, + MOB_FELMYST_VISUAL = 25041, + MOB_FLIGHT_LEFT = 25357, + MOB_FLIGHT_RIGHT = 25358, + MOB_DEATH_CLOUD = 25703, + MOB_VAPOR = 25265, + MOB_VAPOR_TRAIL = 25267 +}; enum PhaseFelmyst { @@ -125,10 +126,11 @@ static EventFelmyst MaxTimer[]= struct TRINITY_DLL_DECL boss_felmystAI : public ScriptedAI { - boss_felmystAI(Creature *c) : ScriptedAI(c) - { + boss_felmystAI(Creature *c) : ScriptedAI(c){ + pInstance = ((ScriptedInstance*)c->GetInstanceData()); + // wait for core patch be accepted - SpellEntry *TempSpell = (SpellEntry*)GetSpellStore()->LookupEntry(SPELL_ENCAPSULATE_EFFECT); + /*SpellEntry *TempSpell = (SpellEntry*)GetSpellStore()->LookupEntry(SPELL_ENCAPSULATE_EFFECT); if(TempSpell->SpellIconID == 2294) TempSpell->SpellIconID = 2295; TempSpell = (SpellEntry*)GetSpellStore()->LookupEntry(SPELL_VAPOR_TRIGGER); @@ -136,9 +138,10 @@ struct TRINITY_DLL_DECL boss_felmystAI : public ScriptedAI TempSpell->Attributes |= SPELL_ATTR_PASSIVE; TempSpell = (SpellEntry*)GetSpellStore()->LookupEntry(SPELL_FOG_CHARM2); if((TempSpell->Attributes & SPELL_ATTR_PASSIVE) == 0) - TempSpell->Attributes |= SPELL_ATTR_PASSIVE; + TempSpell->Attributes |= SPELL_ATTR_PASSIVE;*/ } + ScriptedInstance *pInstance; PhaseFelmyst Phase; EventFelmyst Event; uint32 Timer[EVENT_FLIGHT + 1]; @@ -155,21 +158,27 @@ struct TRINITY_DLL_DECL boss_felmystAI : public ScriptedAI Timer[EVENT_BERSERK] = 600000; FlightCount = 0; - m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_LEVITATING + MOVEMENTFLAG_ONTRANSPORT); + m_creature->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING + MOVEMENTFLAG_ONTRANSPORT); m_creature->SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, 10); m_creature->SetFloatValue(UNIT_FIELD_COMBATREACH, 10); DespawnSummons(MOB_VAPOR_TRAIL); - m_creature->setActive(false); + m_creature->setActive(false); + + if(pInstance) + pInstance->SetData(DATA_FELMYST_EVENT, NOT_STARTED); } void Aggro(Unit *who) { - m_creature->setActive(true); + m_creature->setActive(true); DoZoneInCombat(); m_creature->CastSpell(m_creature, AURA_SUNWELL_RADIANCE, true); m_creature->CastSpell(m_creature, AURA_NOXIOUS_FUMES, true); EnterPhase(PHASE_GROUND); + + if(pInstance) + pInstance->SetData(DATA_FELMYST_EVENT, IN_PROGRESS); } void AttackStart(Unit *who) @@ -188,21 +197,22 @@ struct TRINITY_DLL_DECL boss_felmystAI : public ScriptedAI { switch(rand()%2) { - case 0: - DoYell(YELL_KILL1,LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature, SOUND_KILL1); - break; - case 1: - DoYell(YELL_KILL2,LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature, SOUND_KILL2); - break; + case 0: DoScriptText(YELL_KILL1, m_creature); break; + case 1: DoScriptText(YELL_KILL2, m_creature); break; } } + void JustRespawned() + { + DoScriptText(YELL_BIRTH, m_creature); + } + void JustDied(Unit* Killer) { - DoYell(YELL_DEATH, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature, SOUND_DEATH); + DoScriptText(YELL_DEATH, m_creature); + + if(pInstance) + pInstance->SetData(DATA_FELMYST_EVENT, DONE); } void SpellHit(Unit *caster, const SpellEntry *spell) @@ -279,21 +289,26 @@ struct TRINITY_DLL_DECL boss_felmystAI : public ScriptedAI switch(FlightCount) { case 0: - m_creature->AttackStop(); + //m_creature->AttackStop(); + error_log("prevent fly phase"); m_creature->GetMotionMaster()->Clear(false); m_creature->HandleEmoteCommand(EMOTE_ONESHOT_LIFTOFF); m_creature->SetUnitMovementFlags(MOVEMENTFLAG_LEVITATING + MOVEMENTFLAG_ONTRANSPORT); m_creature->StopMoving(); - DoYell(YELL_TAKEOFF, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature, SOUND_TAKEOFF); + DoScriptText(YELL_TAKEOFF, m_creature); Timer[EVENT_FLIGHT_SEQUENCE] = 2000; break; case 1: + error_log("Move to Fly point"); m_creature->GetMotionMaster()->MovePoint(0, m_creature->GetPositionX()+1, m_creature->GetPositionY(), m_creature->GetPositionZ()+10); Timer[EVENT_FLIGHT_SEQUENCE] = 0; break; - case 2: - if(Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0, 150, true)) + case 2:{ + error_log("Summon Vapor case 2"); + Unit* target; + target = SelectUnit(SELECT_TARGET_RANDOM, 0, 150, true); + if(!target) target = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_PLAYER_GUID)); + if(target) { Creature* Vapor = m_creature->SummonCreature(MOB_VAPOR, target->GetPositionX()-5+rand()%10, target->GetPositionY()-5+rand()%10, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 9000); if(Vapor) @@ -305,11 +320,15 @@ struct TRINITY_DLL_DECL boss_felmystAI : public ScriptedAI } }else EnterEvadeMode(); Timer[EVENT_FLIGHT_SEQUENCE] = 10000; - break; - case 3: + break;} + case 3: { DespawnSummons(MOB_VAPOR_TRAIL); + error_log("Summon Vapor case3"); //m_creature->CastSpell(m_creature, SPELL_VAPOR_SELECT); need core support - if(Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0, 150, true)) + Unit* target; + target = SelectUnit(SELECT_TARGET_RANDOM, 0, 150, true); + if(!target) target = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_PLAYER_GUID)); + if(target) { //target->CastSpell(target, SPELL_VAPOR_SUMMON, true); need core support Creature* Vapor = m_creature->SummonCreature(MOB_VAPOR, target->GetPositionX()-5+rand()%10, target->GetPositionY()-5+rand()%10, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 9000); @@ -322,13 +341,16 @@ struct TRINITY_DLL_DECL boss_felmystAI : public ScriptedAI } }else EnterEvadeMode(); Timer[EVENT_FLIGHT_SEQUENCE] = 10000; - break; + break;} case 4: DespawnSummons(MOB_VAPOR_TRAIL); Timer[EVENT_FLIGHT_SEQUENCE] = 1; break; - case 5: - if(Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0, 150, true)) + case 5:{ + Unit* target; + target = SelectUnit(SELECT_TARGET_RANDOM, 0, 150, true); + if(!target) target = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_PLAYER_GUID)); + if(target) { BreathX = target->GetPositionX(); BreathY = target->GetPositionY(); @@ -337,11 +359,11 @@ struct TRINITY_DLL_DECL boss_felmystAI : public ScriptedAI m_creature->GetMotionMaster()->MovePoint(0, x, y, z+10); }else EnterEvadeMode(); Timer[EVENT_FLIGHT_SEQUENCE] = 0; - break; + break;} case 6: m_creature->SetOrientation(m_creature->GetAngle(BreathX, BreathY)); m_creature->StopMoving(); - DoTextEmote("takes a deep breath.", NULL); + //DoTextEmote("takes a deep breath.", NULL); Timer[EVENT_FLIGHT_SEQUENCE] = 10000; break; case 7: @@ -413,10 +435,9 @@ struct TRINITY_DLL_DECL boss_felmystAI : public ScriptedAI switch(Event) { case EVENT_BERSERK: - DoYell(YELL_BERSERK, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature, SOUND_BERSERK); + DoScriptText(YELL_BERSERK, m_creature); m_creature->CastSpell(m_creature, SPELL_BERSERK, true); - Timer[EVENT_BERSERK] = 0; + Timer[EVENT_BERSERK] = 10000; break; case EVENT_CLEAVE: m_creature->CastSpell(m_creature->getVictim(), SPELL_CLEAVE, false); @@ -451,8 +472,7 @@ struct TRINITY_DLL_DECL boss_felmystAI : public ScriptedAI switch(Event) { case EVENT_BERSERK: - DoYell(YELL_BERSERK, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature, SOUND_BERSERK); + DoScriptText(YELL_BERSERK, m_creature); m_creature->CastSpell(m_creature, SPELL_BERSERK, true); Timer[EVENT_BERSERK] = 0; break; @@ -584,4 +604,3 @@ void AddSC_boss_felmyst() newscript->GetAI = &GetAI_mob_felmyst_trail; newscript->RegisterSelf(); } - diff --git a/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_kalecgos.cpp b/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_kalecgos.cpp index 23c783ffa88..f7ccbe9a21c 100644 --- a/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_kalecgos.cpp +++ b/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_kalecgos.cpp @@ -24,70 +24,80 @@ EndScriptData */ #include "precompiled.h" #include "def_sunwell_plateau.h" -//kalecgos dragon form -#define SAY_EVIL_AGGRO -1580000 -#define SAY_EVIL_SPELL1 -1580001 -#define SAY_EVIL_SPELL2 -1580002 -#define SAY_EVIL_SLAY1 -1580003 -#define SAY_EVIL_SLAY2 -1580004 -#define SAY_EVIL_ENRAGE -1580005 -//kalecgos humanoid form -#define SAY_GOOD_AGGRO -1580006 -#define SAY_GOOD_NEAR_DEATH -1580007 -#define SAY_GOOD_NEAR_DEATH2 -1580008 -#define SAY_GOOD_PLRWIN -1580009 - -#define SAY_SATH_AGGRO -1580010 -#define SAY_SATH_DEATH -1580011 -#define SAY_SATH_SPELL1 -1580012 -#define SAY_SATH_SPELL2 -1580013 -#define SAY_SATH_SLAY1 -1580014 -#define SAY_SATH_SLAY2 -1580015 -#define SAY_SATH_ENRAGE -1580016 - -#define GO_FAILED "You are unable to use this currently." - -#define FLY_X 1679 -#define FLY_Y 900 -#define FLY_Z 82 - -#define CENTER_X 1705 -#define CENTER_Y 930 -#define RADIUS 30 - -#define AURA_SUNWELL_RADIANCE 45769 -#define AURA_SPECTRAL_EXHAUSTION 44867 -#define AURA_SPECTRAL_REALM 46021 -#define AURA_SPECTRAL_INVISIBILITY 44801 -#define AURA_DEMONIC_VISUAL 44800 +enum Quotes +{ + //Kalecgos dragon form + SAY_EVIL_AGGRO = -1580000, + SAY_EVIL_SPELL1 = -1580001, + SAY_EVIL_SPELL2 = -1580002, + SAY_EVIL_SLAY1 = -1580003, + SAY_EVIL_SLAY2 = -1580004, + SAY_EVIL_ENRAGE = -1580005, + + //Kalecgos humanoid form + SAY_GOOD_AGGRO = -1580006, + SAY_GOOD_NEAR_DEATH = -1580007, + SAY_GOOD_NEAR_DEATH2 = -1580008, + SAY_GOOD_PLRWIN = -1580009, + + //Shattrowar + SAY_SATH_AGGRO = -1580010, + SAY_SATH_DEATH = -1580011, + SAY_SATH_SPELL1 = -1580012, + SAY_SATH_SPELL2 = -1580013, + SAY_SATH_SLAY1 = -1580014, + SAY_SATH_SLAY2 = -1580015, + SAY_SATH_ENRAGE = -1580016 +}; -#define SPELL_SPECTRAL_BLAST 44869 -#define SPELL_TELEPORT_SPECTRAL 46019 -#define SPELL_ARCANE_BUFFET 45018 -#define SPELL_FROST_BREATH 44799 -#define SPELL_TAIL_LASH 45122 +enum SpellIds +{ + AURA_SUNWELL_RADIANCE = 45769, + AURA_SPECTRAL_EXHAUSTION = 44867, + AURA_SPECTRAL_REALM = 46021, + AURA_SPECTRAL_INVISIBILITY = 44801, + AURA_DEMONIC_VISUAL = 44800, + + SPELL_SPECTRAL_BLAST = 44869, + SPELL_TELEPORT_SPECTRAL = 46019, + SPELL_ARCANE_BUFFET = 45018, + SPELL_FROST_BREATH = 44799, + SPELL_TAIL_LASH = 45122, + + SPELL_BANISH = 44836, + SPELL_TRANSFORM_KALEC = 44670, + SPELL_ENRAGE = 44807, + + SPELL_CORRUPTION_STRIKE = 45029, + SPELL_AGONY_CURSE = 45032, + SPELL_SHADOW_BOLT = 45031, + + SPELL_HEROIC_STRIKE = 45026, + SPELL_REVITALIZE = 45027 +}; -#define SPELL_BANISH 44836 -#define SPELL_TRANSFORM_KALEC 44670 -#define SPELL_ENRAGE 44807 +enum Creatures +{ + MOB_KALECGOS = 24850, + MOB_KALEC = 24891, + MOB_SATHROVARR = 24892 +}; -#define SPELL_CORRUPTION_STRIKE 45029 -#define SPELL_AGONY_CURSE 45032 -#define SPELL_SHADOW_BOLT 45031 +#define GO_FAILED "You are unable to use this currently." -#define SPELL_HEROIC_STRIKE 45026 -#define SPELL_REVITALIZE 45027 +#define FLY_X 1679 +#define FLY_Y 900 +#define FLY_Z 82 -#define MOB_KALECGOS 24850 -#define MOB_KALEC 24891 -#define MOB_SATHROVARR 24892 +#define CENTER_X 1705 +#define CENTER_Y 930 +#define RADIUS 30 #define DRAGON_REALM_Z 53.079 #define DEMON_REALM_Z -74.558 uint32 WildMagic[]= { 44978, 45001, 45002, 45004, 45006, 45010 }; - struct TRINITY_DLL_DECL boss_kalecgosAI : public ScriptedAI { boss_kalecgosAI(Creature *c) : ScriptedAI(c) @@ -162,6 +172,9 @@ struct TRINITY_DLL_DECL boss_kalecgosAI : public ScriptedAI GameObject *Door = GameObject::GetGameObject(*m_creature, DoorGUID); if(Door) Door->SetLootState(GO_ACTIVATED); DoZoneInCombat(); + + if(pInstance) + pInstance->SetData(DATA_KALECGOS_EVENT, IN_PROGRESS); } void KilledUnit(Unit *victim) @@ -275,6 +288,9 @@ struct TRINITY_DLL_DECL boss_sathrovarrAI : public ScriptedAI ResetThreat = 1000; isEnraged = false; isBanished = false; + + if(pInstance) + pInstance->SetData(DATA_KALECGOS_EVENT, NOT_STARTED); } void Aggro(Unit* who) @@ -325,6 +341,9 @@ struct TRINITY_DLL_DECL boss_sathrovarrAI : public ScriptedAI ((boss_kalecgosAI*)((Creature*)Kalecgos)->AI())->TalkTimer = 1; ((boss_kalecgosAI*)((Creature*)Kalecgos)->AI())->isFriendly = true; } + + if(pInstance) + pInstance->SetData(DATA_KALECGOS_EVENT, DONE); } void TeleportAllPlayersBack() @@ -437,8 +456,7 @@ struct TRINITY_DLL_DECL boss_kalecAI : public ScriptedAI bool isEnraged; // if demon is enraged - boss_kalecAI(Creature *c) : ScriptedAI(c) - { + boss_kalecAI(Creature *c) : ScriptedAI(c){ pInstance = ((ScriptedInstance*)c->GetInstanceData()); } @@ -671,4 +689,3 @@ void AddSC_boss_kalecgos() newscript->pGOHello = &GOkalocegos_teleporter; newscript->RegisterSelf(); } - diff --git a/src/bindings/scripts/scripts/zone/sunwell_plateau/def_sunwell_plateau.h b/src/bindings/scripts/scripts/zone/sunwell_plateau/def_sunwell_plateau.h index 0844d5dffe6..12e578d1591 100644 --- a/src/bindings/scripts/scripts/zone/sunwell_plateau/def_sunwell_plateau.h +++ b/src/bindings/scripts/scripts/zone/sunwell_plateau/def_sunwell_plateau.h @@ -6,36 +6,38 @@ #define DEF_SUNWELLPLATEAU_H /*** Encounters ***/ -#define DATA_KALECGOS_EVENT 0 -#define DATA_BRUTALLUS_EVENT 1 -#define DATA_FELMYST_EVENT 2 -#define DATA_EREDAR_TWINS_EVENT 3 -#define DATA_MURU_EVENT 4 -#define DATA_KILJAEDEN_EVENT 5 +#define DATA_KALECGOS_EVENT 1 +#define DATA_BRUTALLUS_EVENT 2 +#define DATA_FELMYST_EVENT 3 +#define DATA_EREDAR_TWINS_EVENT 4 +#define DATA_MURU_EVENT 5 +#define DATA_KILJAEDEN_EVENT 6 /*** Creatures ***/ -#define DATA_KALECGOS_DRAGON 6 -#define DATA_KALECGOS_HUMAN 7 -#define DATA_SATHROVARR 8 -#define DATA_BRUTALLUS 9 -#define DATA_MADRIGOSA 24 -#define DATA_FELMYST 10 -#define DATA_ALYTHESS 11 -#define DATA_SACROLASH 12 -#define DATA_MURU 13 -#define DATA_KILJAEDEN 14 -#define DATA_KILJAEDEN_CONTROLLER 15 -#define DATA_ANVEENA 16 +#define DATA_KALECGOS_DRAGON 7 +#define DATA_KALECGOS_HUMAN 8 +#define DATA_SATHROVARR 9 +#define DATA_BRUTALLUS 10 +#define DATA_MADRIGOSA 11 +#define DATA_FELMYST 12 +#define DATA_ALYTHESS 13 +#define DATA_SACROLASH 14 +#define DATA_MURU 15 +#define DATA_KILJAEDEN 16 +#define DATA_KILJAEDEN_CONTROLLER 17 +#define DATA_ANVEENA 18 +#define DATA_KALECGOS_KJ 19 /*** GameObjects ***/ -#define DATA_GO_FORCEFIELD 17 -#define DATA_GO_FIRE_BARRIER 18 -#define DATA_GATE_1 19 -#define DATA_GATE_2 20 -#define DATA_GATE_3 21 -#define DATA_GATE_4 22 -#define DATA_GATE_5 23 +#define DATA_GO_FORCEFIELD 20 +#define DATA_GO_FIRE_BARRIER 21 +#define DATA_GATE_1 22 +#define DATA_GATE_2 23 +#define DATA_GATE_3 24 +#define DATA_GATE_4 25 +#define DATA_GATE_5 26 /*** Misc ***/ +#define DATA_PLAYER_GUID 27 #endif diff --git a/src/bindings/scripts/scripts/zone/sunwell_plateau/instance_sunwell_plateau.cpp b/src/bindings/scripts/scripts/zone/sunwell_plateau/instance_sunwell_plateau.cpp index fd93aa15d6c..74235f4151c 100644 --- a/src/bindings/scripts/scripts/zone/sunwell_plateau/instance_sunwell_plateau.cpp +++ b/src/bindings/scripts/scripts/zone/sunwell_plateau/instance_sunwell_plateau.cpp @@ -4,8 +4,8 @@ /* ScriptData SDName: Instance_Sunwell_Plateau -SD%Complete: 0 -SDComment: VERIFY SCRIPT +SD%Complete: 20 +SDComment: VERIFY SCRIPT, rename Gates SDCategory: Sunwell_Plateau EndScriptData */ @@ -14,6 +14,11 @@ EndScriptData */ #define ENCOUNTERS 6 +enum GoState{ +CLOSE = 1, +OPEN = 0 +}; + /* Sunwell Plateau: 0 - Kalecgos and Sathrovarr 1 - Brutallus @@ -42,6 +47,7 @@ struct TRINITY_DLL_DECL instance_sunwell_plateau : public ScriptedInstance uint64 KilJaeden; uint64 KilJaedenController; uint64 Anveena; + uint64 KalecgosKJ; /** GameObjects **/ uint64 ForceField; // Kalecgos Encounter @@ -67,6 +73,7 @@ struct TRINITY_DLL_DECL instance_sunwell_plateau : public ScriptedInstance KilJaeden = 0; KilJaedenController = 0; Anveena = 0; + KalecgosKJ = 0; /*** GameObjects ***/ ForceField = 0; @@ -94,6 +101,38 @@ struct TRINITY_DLL_DECL instance_sunwell_plateau : public ScriptedInstance return false; } + Player* GetPlayerInMap() + { + Map::PlayerList const& players = instance->GetPlayers(); + + if (!players.isEmpty()) + { + for(Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) + { + Player* plr = itr->getSource(); + if (plr && !plr->HasAura(45839,0)) + return plr; + } + } + + debug_log("TSCR: Instance Sunwell Plateau: GetPlayerInMap, but PlayerList is empty!"); + return NULL; + } + + void HandleGameObject(uint64 guid, uint32 state) + { + Player *player = GetPlayerInMap(); + + if (!player || !guid) + { + debug_log("TSCR: Sunwell Plateau: HandleGameObject fail"); + return; + } + + if (GameObject *go = GameObject::GetGameObject(*player,guid)) + go->SetGoState(state); + } + void OnCreatureCreate(Creature* creature, uint32 entry) { switch(entry) @@ -110,6 +149,7 @@ struct TRINITY_DLL_DECL instance_sunwell_plateau : public ScriptedInstance case 25315: KilJaeden = creature->GetGUID(); break; case 25608: KilJaedenController = creature->GetGUID(); break; case 26046: Anveena = creature->GetGUID(); break; + case 25319: KalecgosKJ = creature->GetGUID(); break; } } @@ -158,6 +198,11 @@ struct TRINITY_DLL_DECL instance_sunwell_plateau : public ScriptedInstance case DATA_KILJAEDEN: return KilJaeden; break; case DATA_KILJAEDEN_CONTROLLER: return KilJaedenController; break; case DATA_ANVEENA: return Anveena; break; + case DATA_KALECGOS_KJ: return KalecgosKJ; break; + case DATA_PLAYER_GUID: + Player* Target = GetPlayerInMap(); + return Target->GetGUID(); + break; } return 0; @@ -169,11 +214,32 @@ struct TRINITY_DLL_DECL instance_sunwell_plateau : public ScriptedInstance { case DATA_KALECGOS_EVENT: Encounters[0] = data; break; case DATA_BRUTALLUS_EVENT: Encounters[1] = data; break; - case DATA_FELMYST_EVENT: Encounters[2] = data; break; + case DATA_FELMYST_EVENT: + if(data == DONE) + HandleGameObject(FireBarrier, 1); + Encounters[2] = data; break; case DATA_EREDAR_TWINS_EVENT: Encounters[3] = data; break; - case DATA_MURU_EVENT: Encounters[4] = data; break; + case DATA_MURU_EVENT: + switch(data){ + case DONE: + HandleGameObject(Gate[4], OPEN); + HandleGameObject(Gate[3], OPEN); + break; + case IN_PROGRESS: + HandleGameObject(Gate[4], CLOSE); + HandleGameObject(Gate[3], CLOSE); + break; + case NOT_STARTED: + HandleGameObject(Gate[4], CLOSE); + HandleGameObject(Gate[3], OPEN); + break; + } + Encounters[4] = data; break; case DATA_KILJAEDEN_EVENT: Encounters[5] = data; break; } + + if(data == DONE) + SaveToDB(); } void SetData64(uint32 id, uint64 guid) @@ -183,6 +249,41 @@ struct TRINITY_DLL_DECL instance_sunwell_plateau : public ScriptedInstance void Update(uint32 diff) { } + + const char* Save() + { + OUT_SAVE_INST_DATA; + std::ostringstream stream; + stream << Encounters[0] << " " << Encounters[1] << " " << Encounters[2] << " " << Encounters[3] << " " + << Encounters[4] << " " << Encounters[5]; + char* out = new char[stream.str().length() + 1]; + strcpy(out, stream.str().c_str()); + if(out) + { + OUT_SAVE_INST_DATA_COMPLETE; + return out; + } + + return NULL; + } + + void Load(const char* in) + { + if(!in) + { + OUT_LOAD_INST_DATA_FAIL; + return; + } + + OUT_LOAD_INST_DATA(in); + std::istringstream stream(in); + stream >> Encounters[0] >> Encounters[1] >> Encounters[2] >> Encounters[3] + >> Encounters[4] >> Encounters[5]; + for(uint8 i = 0; i < ENCOUNTERS; ++i) + if(Encounters[i] == IN_PROGRESS) // Do not load an encounter as "In Progress" - reset it instead. + Encounters[i] = NOT_STARTED; + OUT_LOAD_INST_DATA_COMPLETE; + } }; InstanceData* GetInstanceData_instance_sunwell_plateau(Map* map) diff --git a/src/bindings/scripts/scripts/zone/sunwell_plateau/sunwell_plateau.cpp b/src/bindings/scripts/scripts/zone/sunwell_plateau/sunwell_plateau.cpp index aa20c05d128..e68717857cb 100644 --- a/src/bindings/scripts/scripts/zone/sunwell_plateau/sunwell_plateau.cpp +++ b/src/bindings/scripts/scripts/zone/sunwell_plateau/sunwell_plateau.cpp @@ -15,12 +15,52 @@ */ /* ScriptData -SDName: sunwell_plateau +SDName: Sunwell_Plateau SD%Complete: 0 -SDComment: Placeholer -SDCategory: Sunwell_Plateau +SDComment: Placeholder, Epilogue after Kil'jaeden, Captain Selana Gossips EndScriptData */ +/* ContentData +npc_prophet_velen +npc_captain_selana +EndContentData */ + #include "precompiled.h" +#include "def_sunwell_plateau.h" + +/*###### +## npc_prophet_velen +######*/ + +enum ProphetSpeeches +{ + PROPHET_SAY1 = -1580099, + PROPHET_SAY2 = -1580100, + PROPHET_SAY3 = -1580101, + PROPHET_SAY4 = -1580102, + PROPHET_SAY5 = -1580103, + PROPHET_SAY6 = -1580104, + PROPHET_SAY7 = -1580105, + PROPHET_SAY8 = -1580106 +}; + +enum LiadrinnSpeeches +{ + LIADRIN_SAY1 = -1580107, + LIADRIN_SAY2 = -1580108, + LIADRIN_SAY3 = -1580109 +}; + + +/*###### +## npc_captain_selana +######*/ + +#define CS_GOSSIP1 "Give me a situation report, Captain." +#define CS_GOSSIP2 "What went wrong?" +#define CS_GOSSIP3 "Why did they stop?" +#define CS_GOSSIP4 "Your insight is appreciated." + void AddSC_sunwell_plateau() -{};
\ No newline at end of file +{ +} |