diff options
| author | megamage <none@none> | 2009-01-03 11:18:19 -0600 |
|---|---|---|
| committer | megamage <none@none> | 2009-01-03 11:18:19 -0600 |
| commit | 9dfcd5ba5e0b801f39a2a4c1b71154d9724f7935 (patch) | |
| tree | 627370d0f5859d4635026f731a8c38244d054411 /src/bindings/scripts | |
| parent | 9438625a19c070ec20d392fa57f1de6a61b7b985 (diff) | |
| parent | 59f85167ab387a8e8b69aaf1d65f9b6994de9ca0 (diff) | |
*Merge with Trinity 768.
--HG--
branch : trunk
Diffstat (limited to 'src/bindings/scripts')
7 files changed, 272 insertions, 280 deletions
diff --git a/src/bindings/scripts/include/sc_creature.cpp b/src/bindings/scripts/include/sc_creature.cpp index d46d5b68716..b54f91a113d 100644 --- a/src/bindings/scripts/include/sc_creature.cpp +++ b/src/bindings/scripts/include/sc_creature.cpp @@ -736,7 +736,7 @@ void ScriptedAI::DoTeleportAll(float x, float y, float z, float o) Map::PlayerList const &PlayerList = map->GetPlayers(); for(Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i) if (Player* i_pl = i->getSource()) - if (!i_pl->isAlive()) + if (i_pl->isAlive()) i_pl->TeleportTo(m_creature->GetMapId(), x, y, z, o, TELE_TO_NOT_LEAVE_COMBAT); } diff --git a/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_grandmaster_vorpil.cpp b/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_grandmaster_vorpil.cpp index a797be68b06..06947376619 100644 --- a/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_grandmaster_vorpil.cpp +++ b/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_grandmaster_vorpil.cpp @@ -183,9 +183,6 @@ struct TRINITY_DLL_DECL boss_grandmaster_vorpilAI : public ScriptedAI float attackRadius = m_creature->GetAttackDistance(who); if (m_creature->IsWithinDistInMap(who, attackRadius) && m_creature->GetDistanceZ(who) <= CREATURE_Z_ATTACK_RANGE && m_creature->IsWithinLOSInMap(who)) { - //if(who->HasStealthAura()) - // who->RemoveSpellsCausingAura(SPELL_AURA_MOD_STEALTH); - AttackStart(who); } } diff --git a/src/bindings/scripts/scripts/zone/karazhan/boss_nightbane.cpp b/src/bindings/scripts/scripts/zone/karazhan/boss_nightbane.cpp index 17fec0d2e75..ab2f4807551 100644 --- a/src/bindings/scripts/scripts/zone/karazhan/boss_nightbane.cpp +++ b/src/bindings/scripts/scripts/zone/karazhan/boss_nightbane.cpp @@ -16,8 +16,8 @@ /* ScriptData SDName: Boss_Nightbane -SD%Complete: 50 -SDComment: skelleton adds, optimice some "if"s, timers, rain of bones applied self(!?) +SD%Complete: 80 +SDComment: SDComment: skelleton adds need 2 more, timers, SDCategory: Karazhan EndScriptData */ @@ -26,7 +26,7 @@ EndScriptData */ //phase 1 #define SPELL_BELLOWING_ROAR 39427 -#define SPELL_CHARRED_EARTH 30129 //Also 30209 (Target Charred Earth) triggers this +#define SPELL_CHARRED_EARTH 30129 #define SPELL_DISTRACTING_ASH 30130 #define SPELL_SMOLDERING_BREATH 30210 #define SPELL_TAIL_SWEEP 25653 @@ -35,6 +35,14 @@ EndScriptData */ #define SPELL_SMOKING_BLAST 37057 #define SPELL_FIREBALL_BARRAGE 30282 #define SPELL_SEARING_CINDERS 30127 +#define SPELL_SUMMON_SKELETON 30170 + +#define EMOTE_SUMMON "An ancient being awakens in the distance..." +#define YELL_AGGRO "What fools! I shall bring a quick end to your suffering!" +#define YELL_FLY_PHASE "Miserable vermin. I shall exterminate you from the air!" +#define YELL_LAND_PHASE_1 "Enough! I shall land and crush you myself!" +#define YELL_LAND_PHASE_2 "Insects! Let me show you my strength up close!" +#define EMOTE_BREATH "takes a deep breath." float IntroWay[8][3] = { @@ -62,76 +70,96 @@ struct TRINITY_DLL_DECL boss_nightbaneAI : public ScriptedAI boss_nightbaneAI(Creature* c) : ScriptedAI(c) { pInstance = ((ScriptedInstance*)c->GetInstanceData()); - intro = true; + Intro = true; Reset(); } ScriptedInstance* pInstance; - uint32 phase; + uint32 Phase; + + bool RainBones; + bool Skeletons; - bool rainbones; + uint32 BellowingRoarTimer; + uint32 CharredEarthTimer; + uint32 DistractingAshTimer; + uint32 SmolderingBreathTimer; + uint32 TailSweepTimer; + uint32 RainofBonesTimer; + uint32 SmokingBlastTimer; + uint32 FireballBarrageTimer; + uint32 SearingCindersTimer; - uint32 bellowingroar_timer; - uint32 charredearth_timer; - uint32 distractingash_timer; - uint32 smolderingbreath_timer; - uint32 tailsweep_timer; - uint32 rainofbones_timer; - uint32 smokingblast_timer; - uint32 fireballbarrage_timer; - uint32 searingcinders_timer; + uint32 FlyCount; + uint32 FlyTimer; - uint32 fly_count; - uint32 fly_timer; + bool Intro; + bool Flying; + bool Movement; - bool intro; - bool flying; - uint32 wait_timer; + uint32 WaitTimer; uint32 MovePhase; void Reset() { - phase =1; - bellowingroar_timer = 30000; - charredearth_timer = 15000; - distractingash_timer = 20000; - smolderingbreath_timer = 10000; - tailsweep_timer = 12000; - rainofbones_timer = 10000; - smokingblast_timer = 20000; - fireballbarrage_timer = 13000; - searingcinders_timer = 14000; - - fly_count = 0; + BellowingRoarTimer = 30000; + CharredEarthTimer = 15000; + DistractingAshTimer = 20000; + SmolderingBreathTimer = 10000; + TailSweepTimer = 12000; + RainofBonesTimer = 10000; + SmokingBlastTimer = 20000; + FireballBarrageTimer = 13000; + SearingCindersTimer = 14000; + WaitTimer = 1000; + + Phase =1; + FlyCount = 0; + MovePhase = 0; - m_creature->SetSpeed(MOVE_RUN,2); + m_creature->SetSpeed(MOVE_RUN, 2.0f); m_creature->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT + MOVEMENTFLAG_LEVITATING); m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_WALK_MODE); m_creature->setActive(true); - wait_timer = 1000; - MovePhase = 0; - if(pInstance) + if(pInstance->GetData(DATA_NIGHTBANE_EVENT) == DONE) + m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + else pInstance->SetData(DATA_NIGHTBANE_EVENT, NOT_STARTED); - flying = false; + HandleTerraceDoors(true); + + Flying = false; + Movement = false; - if(!intro) + if(!Intro) { m_creature->SetHomePosition(IntroWay[7][0],IntroWay[7][1],IntroWay[7][2],0); m_creature->GetMotionMaster()->MoveTargetedHome(); } } + void HandleTerraceDoors(bool open) + { + if(GameObject *Door = GameObject::GetGameObject((*m_creature),pInstance->GetData64(DATA_MASTERS_TERRACE_DOOR_1))) + Door->SetUInt32Value(GAMEOBJECT_STATE, open ? 0 : 1); + if(GameObject *Door = GameObject::GetGameObject((*m_creature),pInstance->GetData64(DATA_MASTERS_TERRACE_DOOR_2))) + Door->SetUInt32Value(GAMEOBJECT_STATE, open ? 0 : 1); + } + void Aggro(Unit *who) { if(pInstance) pInstance->SetData(DATA_NIGHTBANE_EVENT, IN_PROGRESS); + + HandleTerraceDoors(false); + DoYell(YELL_AGGRO, LANG_UNIVERSAL, NULL); } + void AttackStart(Unit* who) { - if(!intro && !flying) + if(!Intro && !Flying) ScriptedAI::AttackStart(who); } @@ -139,10 +167,13 @@ struct TRINITY_DLL_DECL boss_nightbaneAI : public ScriptedAI { if(pInstance) pInstance->SetData(DATA_NIGHTBANE_EVENT, DONE); + + HandleTerraceDoors(true); } + void MoveInLineOfSight(Unit *who) { - if(!intro && !flying) + if(!Intro && !Flying) { if(!m_creature->getVictim() && m_creature->canStartAttack(who)) ScriptedAI::AttackStart(who); @@ -154,49 +185,78 @@ struct TRINITY_DLL_DECL boss_nightbaneAI : public ScriptedAI if(type != POINT_MOTION_TYPE) return; - if(intro) + if(Intro) { if(id >= 8) { - intro = false; + Intro = false; m_creature->SetHomePosition(IntroWay[7][0],IntroWay[7][1],IntroWay[7][2],0); return; } - wait_timer = 1; + WaitTimer = 1; } - if(flying) + if(Flying) { if(id == 0) { - flying = false; - phase = 2; + DoTextEmote(EMOTE_BREATH, NULL, true); + Flying = false; + Phase = 2; return; } + if(id == 3) { MovePhase = 4; - wait_timer = 1; + WaitTimer = 1; return; } + if(id == 8) { - flying = false; - phase = 1; + Flying = false; + Phase = 1; + Movement = true; return; } - wait_timer = 1; + WaitTimer = 1; } } + void JustSummoned(Creature *summoned) + { + summoned->AI()->AttackStart(m_creature->getVictim()); + } + + void TakeOff() + { + DoYell(YELL_FLY_PHASE, LANG_UNIVERSAL, NULL); + + m_creature->InterruptSpell(CURRENT_GENERIC_SPELL); + m_creature->HandleEmoteCommand(EMOTE_ONESHOT_LIFTOFF); + m_creature->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT + MOVEMENTFLAG_LEVITATING); + (*m_creature).GetMotionMaster()->Clear(false); + (*m_creature).GetMotionMaster()->MovePoint(0,IntroWay[2][0],IntroWay[2][1],IntroWay[2][2]); + + Flying = true; + + FlyTimer = 45000+rand()%15000; //timer wrong between 45 and 60 seconds + ++FlyCount; + + RainofBonesTimer = 5000; //timer wrong (maybe) + RainBones = false; + Skeletons = false; + } + void UpdateAI(const uint32 diff) { - if(wait_timer) - if(wait_timer < diff) + if(WaitTimer) + if(WaitTimer < diff) { - if(intro) + if(Intro) { if(MovePhase >= 7) { @@ -207,12 +267,11 @@ struct TRINITY_DLL_DECL boss_nightbaneAI : public ScriptedAI else { m_creature->GetMotionMaster()->MovePoint(MovePhase,IntroWay[MovePhase][0],IntroWay[MovePhase][1],IntroWay[MovePhase][2]); - MovePhase++; + ++MovePhase; } } - - if(flying) + if(Flying) { if(MovePhase >= 7) { @@ -223,168 +282,133 @@ struct TRINITY_DLL_DECL boss_nightbaneAI : public ScriptedAI else { m_creature->GetMotionMaster()->MovePoint(MovePhase,IntroWay[MovePhase][0],IntroWay[MovePhase][1],IntroWay[MovePhase][2]); - MovePhase++; + ++MovePhase; } } - wait_timer = 0; - }else wait_timer -= diff; + WaitTimer = 0; + }else WaitTimer -= diff; if(!m_creature->SelectHostilTarget()) return; - if(flying) + if(Flying) return; // Phase 1 "GROUND FIGHT" - if(phase == 1) + if(Phase == 1) { - m_creature->GetMotionMaster()->MoveChase(m_creature->getVictim()); - if (bellowingroar_timer < diff) - { - DoCast(m_creature->getVictim(),SPELL_BELLOWING_ROAR); - bellowingroar_timer = 30000+rand()%10000 ; //Timer - }else bellowingroar_timer -= diff; - - if (smolderingbreath_timer < diff) - { - DoCast(m_creature->getVictim(),SPELL_SMOLDERING_BREATH); - smolderingbreath_timer = 20000;//timer - - }else smolderingbreath_timer -= diff; - - if (charredearth_timer < diff) - { - Unit* target = NULL; - target = SelectUnit(SELECT_TARGET_RANDOM,0); - DoCast(target,SPELL_CHARRED_EARTH); - charredearth_timer = 20000; //timer - }else charredearth_timer -= diff; - - if (tailsweep_timer < diff) - { - Unit* target = NULL; - target = SelectUnit(SELECT_TARGET_RANDOM,0); - - if (!m_creature->HasInArc( M_PI, target)) - DoCast(target,SPELL_TAIL_SWEEP); - tailsweep_timer = 15000;//timer - }else tailsweep_timer -= diff; - - if (searingcinders_timer < diff) + if(Movement) + { + DoStartMovement(m_creature->getVictim()); + Movement = false; + } + + if (BellowingRoarTimer < diff) + { + DoCast(m_creature->getVictim(),SPELL_BELLOWING_ROAR); + BellowingRoarTimer = 30000+rand()%10000 ; //Timer + }else BellowingRoarTimer -= diff; + + if (SmolderingBreathTimer < diff) + { + DoCast(m_creature->getVictim(),SPELL_SMOLDERING_BREATH); + SmolderingBreathTimer = 20000;//timer + }else SmolderingBreathTimer -= diff; + + if (CharredEarthTimer < diff) + { + if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0)) + DoCast(target,SPELL_CHARRED_EARTH); + CharredEarthTimer = 20000; //timer + }else CharredEarthTimer -= diff; + + if (TailSweepTimer < diff) + { + if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0)) + if (!m_creature->HasInArc( M_PI, target)) + DoCast(target,SPELL_TAIL_SWEEP); + TailSweepTimer = 15000;//timer + }else TailSweepTimer -= diff; + + if (SearingCindersTimer < diff) { - Unit* target = NULL; - target = SelectUnit(SELECT_TARGET_RANDOM,0); - - DoCast(target,SPELL_SEARING_CINDERS); - searingcinders_timer = 10000; //timer - }else searingcinders_timer -= diff; - - uint32 prozent; - prozent = (m_creature->GetHealth()*100) / m_creature->GetMaxHealth(); - - if (prozent < 75 && fly_count == 0) // first take off 75% - { - m_creature->InterruptSpell(CURRENT_GENERIC_SPELL); - m_creature->HandleEmoteCommand(EMOTE_ONESHOT_LIFTOFF); - m_creature->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT + MOVEMENTFLAG_LEVITATING); - (*m_creature).GetMotionMaster()->Clear(false); - (*m_creature).GetMotionMaster()->MovePoint(0,IntroWay[2][0],IntroWay[2][1],IntroWay[2][2]); - flying = true; - - fly_timer = 45000+rand()%15000; - fly_count++; + if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0)) + DoCast(target,SPELL_SEARING_CINDERS); + SearingCindersTimer = 10000; //timer + }else SearingCindersTimer -= diff; - rainofbones_timer = 5000; - rainbones = false; - } + uint32 Prozent; + Prozent = (m_creature->GetHealth()*100) / m_creature->GetMaxHealth(); - if (prozent < 50 && fly_count == 1) // secound take off 50% - { - m_creature->InterruptSpell(CURRENT_GENERIC_SPELL); - m_creature->HandleEmoteCommand(EMOTE_ONESHOT_LIFTOFF); - m_creature->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT + MOVEMENTFLAG_LEVITATING); - (*m_creature).GetMotionMaster()->Clear(false); - (*m_creature).GetMotionMaster()->MovePoint(0,IntroWay[2][0],IntroWay[2][1],IntroWay[2][2]); - - flying = true; - fly_timer = 45000+rand()%15000; - fly_count++; - - rainofbones_timer = 5000; - rainbones = false; - } + if (Prozent < 75 && FlyCount == 0) // first take off 75% + TakeOff(); - if (prozent < 25 && fly_count == 2) // third take off 25% - { - m_creature->InterruptSpell(CURRENT_GENERIC_SPELL); - m_creature->HandleEmoteCommand(EMOTE_ONESHOT_LIFTOFF); - m_creature->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT + MOVEMENTFLAG_LEVITATING); - (*m_creature).GetMotionMaster()->Clear(false); - (*m_creature).GetMotionMaster()->MovePoint(0,IntroWay[2][0],IntroWay[2][1],IntroWay[2][2]); - - flying = true; - //phase = 2; - fly_timer = 45000+rand()%15000; - fly_count++; - - rainofbones_timer = 5000; - rainbones = false; - } + if (Prozent < 50 && FlyCount == 1) // secound take off 50% + TakeOff(); + if (Prozent < 25 && FlyCount == 2) // third take off 25% + TakeOff(); + DoMeleeAttackIfReady(); } //Phase 2 "FLYING FIGHT" - if (phase == 2) + if (Phase == 2) { - if (!rainbones) + if (!RainBones) { - if (rainofbones_timer < diff && !rainbones) // only once at the beginning of phase 2 + if (!Skeletons) + { + DoCast(m_creature->getVictim(), SPELL_SUMMON_SKELETON); + DoCast(m_creature->getVictim(), SPELL_SUMMON_SKELETON); + DoCast(m_creature->getVictim(), SPELL_SUMMON_SKELETON); + Skeletons = true; + } + + if (RainofBonesTimer < diff && !RainBones) // only once at the beginning of phase 2 { - DoCast(m_creature->getVictim(),SPELL_RAIN_OF_BONES); - rainbones = true; - smokingblast_timer = 20000; - }else rainofbones_timer -= diff; + DoCast(m_creature->getVictim(),SPELL_RAIN_OF_BONES); + RainBones = true; + SmokingBlastTimer = 20000; + }else RainofBonesTimer -= diff; - if (distractingash_timer < diff) + if (DistractingAshTimer < diff) { - Unit* target = NULL; - target = SelectUnit(SELECT_TARGET_RANDOM,0); - - DoCast(target,SPELL_DISTRACTING_ASH); - distractingash_timer = 2000;//timer wrong - }else distractingash_timer -= diff; + if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0)) + DoCast(target,SPELL_DISTRACTING_ASH); + DistractingAshTimer = 2000;//timer wrong + }else DistractingAshTimer -= diff; } - if (rainbones) + if (RainBones) { - if (smokingblast_timer < diff) + if (SmokingBlastTimer < diff) { DoCast(m_creature->getVictim(),SPELL_SMOKING_BLAST); - smokingblast_timer = 1500 ; //timer wrong - }else smokingblast_timer -= diff; + SmokingBlastTimer = 1500 ; //timer wrong + }else SmokingBlastTimer -= diff; } - if (fireballbarrage_timer < diff) + if (FireballBarrageTimer < diff) { - Unit* target = NULL; - target = SelectUnit(SELECT_TARGET_FARTHEST,0); + if (Unit* target = SelectUnit(SELECT_TARGET_FARTHEST, 0)) + DoCast(target,SPELL_FIREBALL_BARRAGE); + FireballBarrageTimer = 20000; //Timer + }else FireballBarrageTimer -= diff; - DoCast(target,SPELL_FIREBALL_BARRAGE); - fireballbarrage_timer = 20000; //Timer - }else fireballbarrage_timer -= diff; - - if (fly_timer < diff) //landing + if (FlyTimer < diff) //landing { - //m_creature->HandleEmoteCommand(EMOTE_ONESHOT_LAND); - //m_creature->SetHover(false); + if(rand()%2 == 0) + DoYell(YELL_LAND_PHASE_1, LANG_UNIVERSAL, NULL); + else + DoYell(YELL_LAND_PHASE_2, LANG_UNIVERSAL, NULL); + (*m_creature).GetMotionMaster()->Clear(false); m_creature->GetMotionMaster()->MovePoint(3,IntroWay[3][0],IntroWay[3][1],IntroWay[3][2]); - flying = true; - //wait_timer = 1; - //phase = 1; - }else fly_timer -= diff; + + Flying = true; + }else FlyTimer -= diff; } } }; @@ -399,6 +423,6 @@ void AddSC_boss_nightbane() Script *newscript; newscript = new Script; newscript->Name="boss_nightbane"; - newscript->GetAI = GetAI_boss_nightbane; + newscript->GetAI = &GetAI_boss_nightbane; newscript->RegisterSelf(); }
\ No newline at end of file diff --git a/src/bindings/scripts/scripts/zone/karazhan/def_karazhan.h b/src/bindings/scripts/scripts/zone/karazhan/def_karazhan.h index 78c1c488637..29660dd6426 100644 --- a/src/bindings/scripts/scripts/zone/karazhan/def_karazhan.h +++ b/src/bindings/scripts/scripts/zone/karazhan/def_karazhan.h @@ -31,6 +31,8 @@ #define DATA_GAMEOBJECT_GAME_DOOR 24 #define DATA_GAMEOBJECT_GAME_EXIT_DOOR 25 #define DATA_IMAGE_OF_MEDIVH 26 +#define DATA_MASTERS_TERRACE_DOOR_1 27 +#define DATA_MASTERS_TERRACE_DOOR_2 28 // Opera Performances #define EVENT_OZ 1 diff --git a/src/bindings/scripts/scripts/zone/karazhan/instance_karazhan.cpp b/src/bindings/scripts/scripts/zone/karazhan/instance_karazhan.cpp index 9fea30e1c93..1d2760be73c 100644 --- a/src/bindings/scripts/scripts/zone/karazhan/instance_karazhan.cpp +++ b/src/bindings/scripts/scripts/zone/karazhan/instance_karazhan.cpp @@ -149,6 +149,8 @@ struct TRINITY_DLL_DECL instance_karazhan : public ScriptedInstance case DATA_GAMEOBJECT_GAME_DOOR: return GamesmansDoor; case DATA_GAMEOBJECT_GAME_EXIT_DOOR: return GamesmansExitDoor; case DATA_GAMEOBJECT_NETHER_DOOR: return NetherspaceDoor; + case DATA_MASTERS_TERRACE_DOOR_1: return MastersTerraceDoor[0]; + case DATA_MASTERS_TERRACE_DOOR_2: return MastersTerraceDoor[1]; } return 0; diff --git a/src/bindings/scripts/scripts/zone/naxxramas/boss_stalagg.cpp b/src/bindings/scripts/scripts/zone/naxxramas/boss_stalagg.cpp deleted file mode 100644 index b5b2c357597..00000000000 --- a/src/bindings/scripts/scripts/zone/naxxramas/boss_stalagg.cpp +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 2006 - 2008 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/> - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/* ScriptData -SDName: Boss_Stalagg -SD%Complete: 0 -SDComment: Merge with Thaddius -SDCategory: Naxxramas -EndScriptData */ - -#include "precompiled.h" - -//Stalagg -//8864 aggro - Stalagg crush you! -//8866 slay - Stalagg Kill! -//8865 death - Master save me... - -#define SPELL_WARSTOMP 28125 -#define SPELL_POWERSURGE 28134 -#define SPELL_CHAIN_LIGHTNING 28900 - -//Not sure how to "force" crushing blows or to knock tank to the opposite platform diff --git a/src/bindings/scripts/scripts/zone/tanaris/tanaris.cpp b/src/bindings/scripts/scripts/zone/tanaris/tanaris.cpp index c5297963c71..90f680cf82a 100644 --- a/src/bindings/scripts/scripts/zone/tanaris/tanaris.cpp +++ b/src/bindings/scripts/scripts/zone/tanaris/tanaris.cpp @@ -130,20 +130,20 @@ CreatureAI* GetAI_mob_aquementas(Creature *_Creature) ## npc_custodian_of_time ######*/ -#define WHISPER_CUSTODIAN_1 "Greetings, $N. I will guide you through the cavern. Please try and keep up." -#define WHISPER_CUSTODIAN_2 "We do not know if the Caverns of Time have always been accessible to mortals. Truly, it is impossible to tell as the Timeless One is in perpetual motion, changing our timeways as he sees fit. What you see now may very well not exist tomorrow. You may wake up and have no memory of this place." -#define WHISPER_CUSTODIAN_3 "It is strange, I know... Most mortals cannot actually comprehend what they see here, as often, what they see is not anchored within their own perception of reality." -#define WHISPER_CUSTODIAN_4 "Follow me, please." -#define WHISPER_CUSTODIAN_5 "There are only two truths to be found here: First, that time is chaotic, always in flux, and completely malleable and second, perception does not dictate reality." -#define WHISPER_CUSTODIAN_6 "As custodians of time, we watch over and care for Nozdormu's realm. The master is away at the moment, which means that attempts are being made to dramatically alter time. The master never meddles in the affairs of mortals but instead corrects the alterations made to time by others. He is reactionary in this regard." -#define WHISPER_CUSTODIAN_7 "For normal maintenance of time, the Keepers of Time are sufficient caretakers. We are able to deal with most ordinary disturbances. I speak of little things, such as rogue mages changing something in the past to elevate their status or wealth in the present." -#define WHISPER_CUSTODIAN_8 "These tunnels that you see are called timeways. They are infinite in number. The ones that currently exist in your reality are what the master has deemed as 'trouble spots.' These trouble spots may differ completely in theme but they always share a cause. That is, their existence is a result of the same temporal disturbance. Remember that should you venture inside one..." -#define WHISPER_CUSTODIAN_9 "This timeway is in great disarray! We have agents inside right now attempting to restore order. What information I have indicates that Thrall's freedom is in jeopardy. A malevolent organization known as the Infinite Dragonflight is trying to prevent his escape. I fear without outside assistance, all will be lost." -#define WHISPER_CUSTODIAN_10 "We have very little information on this timeway. Sa'at has been dispatched and is currently inside. The data we have gathered from his correspondence is that the Infinite Dragonflight are once again attempting to alter time. Could it be that the opening of the Dark Portal is being targeted for sabotage? Let us hope not..." -#define WHISPER_CUSTODIAN_11 "This timeway is currently collapsing. What that may hold for the past, present and future is currently unknown..." -#define WHISPER_CUSTODIAN_12 "The timeways are currently ranked in order from least catastrophic to most catastrophic. Note that they are all classified as catastrophic, meaning that any single one of these timeways collapsing would mean that your world would end. We only classify them in such a way so that the heroes and adventurers that are sent here know which timeway best suits their abilities." -#define WHISPER_CUSTODIAN_13 "All we know of this timeway is that it leads to Mount Hyjal. The Infinite Dragonflight have gone to great lengths to prevent our involvement. We know next to nothing, mortal. Soridormi is currently attempting to break through the timeway's defenses but has thus far been unsuccessful. You might be our only hope of breaking through and resolving the conflict." -#define WHISPER_CUSTODIAN_14 "Our time is at an end $N. I would wish you luck, if such a thing existed." +#define WHISPER_CUSTODIAN_1 -1000150 +#define WHISPER_CUSTODIAN_2 -1000151 +#define WHISPER_CUSTODIAN_3 -1000152 +#define WHISPER_CUSTODIAN_4 -1000153 +#define WHISPER_CUSTODIAN_5 -1000154 +#define WHISPER_CUSTODIAN_6 -1000155 +#define WHISPER_CUSTODIAN_7 -1000156 +#define WHISPER_CUSTODIAN_8 -1000157 +#define WHISPER_CUSTODIAN_9 -1000158 +#define WHISPER_CUSTODIAN_10 -1000159 +#define WHISPER_CUSTODIAN_11 -1000160 +#define WHISPER_CUSTODIAN_12 -1000161 +#define WHISPER_CUSTODIAN_13 -1000162 +#define WHISPER_CUSTODIAN_14 -1000163 struct TRINITY_DLL_DECL npc_custodian_of_timeAI : public npc_escortAI { @@ -157,25 +157,25 @@ struct TRINITY_DLL_DECL npc_custodian_of_timeAI : public npc_escortAI switch( i ) { - case 0: DoWhisper(WHISPER_CUSTODIAN_1, pTemp); break; - case 1: DoWhisper(WHISPER_CUSTODIAN_2, pTemp); break; - case 2: DoWhisper(WHISPER_CUSTODIAN_3, pTemp); break; - case 3: DoWhisper(WHISPER_CUSTODIAN_4, pTemp); break; - case 5: DoWhisper(WHISPER_CUSTODIAN_5, pTemp); break; - case 6: DoWhisper(WHISPER_CUSTODIAN_6, pTemp); break; - case 7: DoWhisper(WHISPER_CUSTODIAN_7, pTemp); break; - case 8: DoWhisper(WHISPER_CUSTODIAN_8, pTemp); break; - case 9: DoWhisper(WHISPER_CUSTODIAN_9, pTemp); break; - case 10: DoWhisper(WHISPER_CUSTODIAN_4, pTemp); break; - case 13: DoWhisper(WHISPER_CUSTODIAN_10, pTemp); break; - case 14: DoWhisper(WHISPER_CUSTODIAN_4, pTemp); break; - case 16: DoWhisper(WHISPER_CUSTODIAN_11, pTemp); break; - case 17: DoWhisper(WHISPER_CUSTODIAN_12, pTemp); break; - case 18: DoWhisper(WHISPER_CUSTODIAN_4, pTemp); break; - case 22: DoWhisper(WHISPER_CUSTODIAN_13, pTemp); break; - case 23: DoWhisper(WHISPER_CUSTODIAN_4, pTemp); break; - case 24: - DoWhisper(WHISPER_CUSTODIAN_14, pTemp); + case 2: DoScriptText(WHISPER_CUSTODIAN_1, m_creature, pTemp); break; + case 3: DoScriptText(WHISPER_CUSTODIAN_2, m_creature, pTemp); break; + case 4: DoScriptText(WHISPER_CUSTODIAN_3, m_creature, pTemp); break; + case 5: DoScriptText(WHISPER_CUSTODIAN_4, m_creature, pTemp); break; + case 7: DoScriptText(WHISPER_CUSTODIAN_5, m_creature, pTemp); break; + case 8: DoScriptText(WHISPER_CUSTODIAN_6, m_creature, pTemp); break; + case 9: DoScriptText(WHISPER_CUSTODIAN_7, m_creature, pTemp); break; + case 10: DoScriptText(WHISPER_CUSTODIAN_8, m_creature, pTemp); break; + case 11: DoScriptText(WHISPER_CUSTODIAN_9, m_creature, pTemp); break; + case 12: DoScriptText(WHISPER_CUSTODIAN_4, m_creature, pTemp); break; + case 15: DoScriptText(WHISPER_CUSTODIAN_10, m_creature, pTemp); break; + case 16: DoScriptText(WHISPER_CUSTODIAN_4, m_creature, pTemp); break; + case 18: DoScriptText(WHISPER_CUSTODIAN_11, m_creature, pTemp); break; + case 19: DoScriptText(WHISPER_CUSTODIAN_12, m_creature, pTemp); break; + case 20: DoScriptText(WHISPER_CUSTODIAN_4, m_creature, pTemp); break; + case 24: DoScriptText(WHISPER_CUSTODIAN_13, m_creature, pTemp); break; + case 25: DoScriptText(WHISPER_CUSTODIAN_4, m_creature, pTemp); break; + case 26: + DoScriptText(WHISPER_CUSTODIAN_14, m_creature, pTemp); DoCast(pTemp,34883); //below here is temporary workaround, to be removed when spell works properly ((Player*)pTemp)->AreaExploredOrEventHappens(10277); @@ -214,32 +214,34 @@ CreatureAI* GetAI_npc_custodian_of_time(Creature *_Creature) { npc_custodian_of_timeAI* custodian_of_timeAI = new npc_custodian_of_timeAI(_Creature); - custodian_of_timeAI->AddWaypoint(0, -8374.93,-4250.21, -204.38,5000); - custodian_of_timeAI->AddWaypoint(1, -8374.93,-4250.21, -204.38,16000); - custodian_of_timeAI->AddWaypoint(2, -8374.93,-4250.21, -204.38,10000); - custodian_of_timeAI->AddWaypoint(3, -8374.93,-4250.21, -204.38,2000); - custodian_of_timeAI->AddWaypoint(4, -8439.40,-4180.05, -209.25); - custodian_of_timeAI->AddWaypoint(5, -8437.82,-4120.84, -208.59,10000); - custodian_of_timeAI->AddWaypoint(6, -8437.82,-4120.84, -208.59,16000); - custodian_of_timeAI->AddWaypoint(7, -8437.82,-4120.84, -208.59,13000); - custodian_of_timeAI->AddWaypoint(8, -8437.82,-4120.84, -208.59,18000); - custodian_of_timeAI->AddWaypoint(9, -8437.82,-4120.84, -208.59,15000); - custodian_of_timeAI->AddWaypoint(10, -8437.82,-4120.84, -208.59,2000); - custodian_of_timeAI->AddWaypoint(11, -8467.26,-4198.63, -214.21); - custodian_of_timeAI->AddWaypoint(12, -8667.76,-4252.13, -209.56); - custodian_of_timeAI->AddWaypoint(13, -8703.71,-4234.58, -209.5,14000); - custodian_of_timeAI->AddWaypoint(14, -8703.71,-4234.58, -209.5,2000); - custodian_of_timeAI->AddWaypoint(15, -8642.81,-4304.37, -209.57); - custodian_of_timeAI->AddWaypoint(16, -8649.06,-4394.36, -208.46,6000); - custodian_of_timeAI->AddWaypoint(17, -8649.06,-4394.36, -208.46,18000); - custodian_of_timeAI->AddWaypoint(18, -8649.06,-4394.36, -208.46,2000); - custodian_of_timeAI->AddWaypoint(19, -8468.72,-4437.67, -215.45); - custodian_of_timeAI->AddWaypoint(20, -8427.54,-4426, -211.13); - custodian_of_timeAI->AddWaypoint(21, -8364.83,-4393.32, -205.91); - custodian_of_timeAI->AddWaypoint(22, -8304.54,-4357.2, -208.2,18000); - custodian_of_timeAI->AddWaypoint(23, -8304.54,-4357.2, -208.2,2000); - custodian_of_timeAI->AddWaypoint(24, -8375.42,-4250.41, -205.14,5000); - custodian_of_timeAI->AddWaypoint(25, -8375.42,-4250.41, -205.14,5000); + custodian_of_timeAI->AddWaypoint(0, -8535.57,-4212.61, -212.04); + custodian_of_timeAI->AddWaypoint(1, -8456.48,-4211.77, -213.30); + custodian_of_timeAI->AddWaypoint(2, -8374.93,-4250.21, -205.05,5000); + custodian_of_timeAI->AddWaypoint(3, -8374.93,-4250.21, -204.38,16000); + custodian_of_timeAI->AddWaypoint(4, -8374.93,-4250.21, -204.38,10000); + custodian_of_timeAI->AddWaypoint(5, -8374.93,-4250.21, -204.38,2000); + custodian_of_timeAI->AddWaypoint(6, -8439.40,-4180.05, -209.25); + custodian_of_timeAI->AddWaypoint(7, -8437.82,-4120.84, -208.59,10000); + custodian_of_timeAI->AddWaypoint(8, -8437.82,-4120.84, -208.59,16000); + custodian_of_timeAI->AddWaypoint(9, -8437.82,-4120.84, -208.59,13000); + custodian_of_timeAI->AddWaypoint(10, -8437.82,-4120.84, -208.59,18000); + custodian_of_timeAI->AddWaypoint(11, -8437.82,-4120.84, -208.59,15000); + custodian_of_timeAI->AddWaypoint(12, -8437.82,-4120.84, -208.59,2000); + custodian_of_timeAI->AddWaypoint(13, -8467.26,-4198.63, -214.21); + custodian_of_timeAI->AddWaypoint(14, -8667.76,-4252.13, -209.56); + custodian_of_timeAI->AddWaypoint(15, -8703.71,-4234.58, -209.5,14000); + custodian_of_timeAI->AddWaypoint(16, -8703.71,-4234.58, -209.5,2000); + custodian_of_timeAI->AddWaypoint(17, -8642.81,-4304.37, -209.57); + custodian_of_timeAI->AddWaypoint(18, -8649.06,-4394.36, -208.46,6000); + custodian_of_timeAI->AddWaypoint(19, -8649.06,-4394.36, -208.46,18000); + custodian_of_timeAI->AddWaypoint(20, -8649.06,-4394.36, -208.46,2000); + custodian_of_timeAI->AddWaypoint(21, -8468.72,-4437.67, -215.45); + custodian_of_timeAI->AddWaypoint(22, -8427.54,-4426, -211.13); + custodian_of_timeAI->AddWaypoint(23, -8364.83,-4393.32, -205.91); + custodian_of_timeAI->AddWaypoint(24, -8304.54,-4357.2, -208.2,18000); + custodian_of_timeAI->AddWaypoint(25, -8304.54,-4357.2, -208.2,2000); + custodian_of_timeAI->AddWaypoint(26, -8375.42,-4250.41, -205.14,5000); + custodian_of_timeAI->AddWaypoint(27, -8375.42,-4250.41, -205.14,5000); return (CreatureAI*)custodian_of_timeAI; } |
