From 8137a534b40918540e9fded5d3d582a6d2a9fd44 Mon Sep 17 00:00:00 2001 From: Blaymoira Date: Wed, 14 Jan 2009 18:32:03 +0100 Subject: *Cleanup in code --HG-- branch : trunk --- src/bindings/scripts/scripts/zone/barrens/the_barrens.cpp | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) (limited to 'src/bindings/scripts') diff --git a/src/bindings/scripts/scripts/zone/barrens/the_barrens.cpp b/src/bindings/scripts/scripts/zone/barrens/the_barrens.cpp index cf35c4b9bc7..879076e1067 100644 --- a/src/bindings/scripts/scripts/zone/barrens/the_barrens.cpp +++ b/src/bindings/scripts/scripts/zone/barrens/the_barrens.cpp @@ -366,7 +366,7 @@ CreatureAI* GetAI_npc_twiggy_flathead(Creature *_Creature) } /*##### -## npc_wizzlecrank_shredder TODO: Pilot scripting +## npc_wizzlecrank_shredder NOTE: Part2 will be in ACID #####*/ #define SAY_PROGRESS_1 "Alright, alright I think I can figure out how to operate this thing..." @@ -380,9 +380,6 @@ CreatureAI* GetAI_npc_twiggy_flathead(Creature *_Creature) #define SAY_PROGRESS_7 "That was a close one! Well, let's get going, it's still a ways to Ratchet!" #define SAY_PROGRESS_8 "Hmm... I don't think this blinking red light is a good thing..." -#define SAY_PILOT_9 "Looks like you'll have to go ahead to Ratchet and tell Sputtervalve that I've wrecked the shredder." -#define SAY_PILOT_10 "I'll stay behind and guard the wreck. Hurry! Hopefully no one will notice the smoke..." - #define QUEST_ESCAPE 863 #define NPC_PILOT 3451 #define MOB_MERCENARY 3282 @@ -422,13 +419,7 @@ struct TRINITY_DLL_DECL npc_wizzlecrank_shredderAI : public npc_escortAI m_creature->setDeathState(JUST_DIED); if (player && player->GetTypeId() == TYPEID_PLAYER) ((Player*)player)->GroupEventHappens(QUEST_ESCAPE, m_creature); - break; - case 32: {Unit* Pilot = FindCreature(NPC_PILOT, 30); - if(Pilot) - ((Creature*)Pilot)->Say(SAY_PILOT_9, LANG_UNIVERSAL, NULL);}break; - case 33:{ Unit* Pilot = FindCreature(NPC_PILOT, 30); - if(Pilot) - ((Creature*)Pilot)->Say(SAY_PILOT_10, LANG_UNIVERSAL, NULL);} break; + break; } } @@ -501,8 +492,6 @@ CreatureAI* GetAI_npc_wizzlecrank_shredderAI(Creature *_Creature) thisAI->AddWaypoint(29, 1091.28, -2985.82, 91.74, 3000);//7 thisAI->AddWaypoint(30, 1091.28, -2985.82, 91.74, 7000);//8 thisAI->AddWaypoint(31, 1091.28, -2985.82, 91.74, 3000);//justdied summon creature - thisAI->AddWaypoint(32, 1091.28, -2985.82, 91.74, 2000);//9 - thisAI->AddWaypoint(33, 1091.28, -2985.82, 91.74, 7000);//10 return (CreatureAI*)thisAI; } -- cgit v1.2.3 From ba9c0ac5a3ec53d9abc6252c7fb4b0631a583b6d Mon Sep 17 00:00:00 2001 From: Blaymoira Date: Wed, 14 Jan 2009 19:33:55 +0100 Subject: *Support for quest 10337 - by Enril *Optimization in phase hunter script - by Anubisss --HG-- branch : trunk --- sql/updates/850_world_scripts.sql | 1 + .../scripts/zone/netherstorm/netherstorm.cpp | 195 +++++++++++++++++---- 2 files changed, 163 insertions(+), 33 deletions(-) create mode 100644 sql/updates/850_world_scripts.sql (limited to 'src/bindings/scripts') diff --git a/sql/updates/850_world_scripts.sql b/sql/updates/850_world_scripts.sql new file mode 100644 index 00000000000..720465b63f0 --- /dev/null +++ b/sql/updates/850_world_scripts.sql @@ -0,0 +1 @@ +UPDATE creature_template SET ScriptName = 'npc_bessy' WHERE entry = 20415; \ No newline at end of file diff --git a/src/bindings/scripts/scripts/zone/netherstorm/netherstorm.cpp b/src/bindings/scripts/scripts/zone/netherstorm/netherstorm.cpp index 8d1c528f7ae..8f73b828e4a 100644 --- a/src/bindings/scripts/scripts/zone/netherstorm/netherstorm.cpp +++ b/src/bindings/scripts/scripts/zone/netherstorm/netherstorm.cpp @@ -17,7 +17,7 @@ /* ScriptData SDName: Netherstorm SD%Complete: 75 -SDComment: Quest support: 10438, 10652 (special flight paths), 10299,10321,10322,10323,10329,10330,10338,10365(Shutting Down Manaforge), 10198 +SDComment: Quest support: 10337, 10438, 10652 (special flight paths), 10299,10321,10322,10323,10329,10330,10338,10365(Shutting Down Manaforge), 10198 SDCategory: Netherstorm EndScriptData */ @@ -27,9 +27,11 @@ go_manaforge_control_console npc_commander_dawnforge npc_protectorate_nether_drake npc_veronia +npc_bessy EndContentData */ #include "precompiled.h" +#include "../../npc/npc_escortAI.h" /*###### ## npc_manaforge_control_console @@ -790,9 +792,10 @@ struct TRINITY_DLL_DECL mob_phase_hunterAI : public ScriptedAI bool Weak; bool Materialize; + bool Drained; int WeakPercent; - uint32 PlayerGUID; + uint64 PlayerGUID; uint32 Health; uint32 Level; uint32 PhaseSlipVulnerabilityTimer; @@ -802,6 +805,7 @@ struct TRINITY_DLL_DECL mob_phase_hunterAI : public ScriptedAI { Weak = false; Materialize = false; + Drained = false; WeakPercent = 25 + (rand()%16); // 25-40 PlayerGUID = 0; @@ -820,60 +824,63 @@ struct TRINITY_DLL_DECL mob_phase_hunterAI : public ScriptedAI void UpdateAI(const uint32 diff) { - if(!Materialize) { DoCast(m_creature, SPELL_MATERIALIZE); Materialize = true; } - Player* target = NULL; - target = ((Player*)Unit::GetUnit((*m_creature), PlayerGUID)); + if(m_creature->HasAuraType(SPELL_AURA_MOD_DECREASE_SPEED) || m_creature->hasUnitState(UNIT_STAT_ROOT)) // if the mob is rooted/slowed by spells eg.: Entangling Roots, Frost Nova, Hamstring, Crippling Poison, etc. => remove it + DoCast(m_creature, SPELL_PHASE_SLIP); - if(!target) + if (!m_creature->SelectHostilTarget() || !m_creature->getVictim()) return; - - if(m_creature->HasAuraType(SPELL_AURA_MOD_DECREASE_SPEED) || m_creature->hasUnitState(UNIT_STAT_ROOT)) // if the mob is rooted/slowed by spells eg.: Entangling Roots, Frost Nova, Hamstring, Crippling Poison, etc. => remove it - DoCast(m_creature, SPELL_PHASE_SLIP); - if(ManaBurnTimer < diff) // cast Mana Burn - { - if(target->GetCreateMana() > 0) + + if(ManaBurnTimer < diff) // cast Mana Burn + { + if(m_creature->getVictim()->GetCreateMana() > 0) + { + DoCast(m_creature->getVictim(), SPELL_MANA_BURN); + ManaBurnTimer = 8000 + (rand()%10 * 1000); // 8-18 sec cd + } + }else ManaBurnTimer -= diff; + + if(PlayerGUID) // start: support for quest 10190 + { + Unit* target = Unit::GetUnit((*m_creature), PlayerGUID); + + if(target && !Weak && m_creature->GetHealth() < (m_creature->GetMaxHealth() / 100 * WeakPercent) && ((Player*)target)->GetQuestStatus(10190) == QUEST_STATUS_INCOMPLETE) { - DoCast(target, SPELL_MANA_BURN); - ManaBurnTimer = 8000 + (rand()%10 * 1000); // 8-18 sec cd + DoTextEmote(EMOTE_WEAK, 0); + Weak = true; } - }else ManaBurnTimer -= diff; - - if(!Weak && m_creature->GetHealth() < (m_creature->GetMaxHealth() / 100 * WeakPercent) && target->GetQuestStatus(10190) == QUEST_STATUS_INCOMPLETE) // start: support for quest 10190 - { - DoTextEmote(EMOTE_WEAK, 0); - Weak = true; - } - if(Weak && m_creature->HasAura(34219, 0)) - { - Health = m_creature->GetHealth(); // get the normal mob's data - Level = m_creature->getLevel(); - + if(Weak && !Drained && m_creature->HasAura(34219, 0)) + { + Drained = true; + + Health = m_creature->GetHealth(); // get the normal mob's data + Level = m_creature->getLevel(); + m_creature->AttackStop(); // delete the normal mob m_creature->DealDamage(m_creature, m_creature->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); m_creature->RemoveCorpse(); - + Creature* DrainedPhaseHunter = NULL; - + if(!DrainedPhaseHunter) - DrainedPhaseHunter = m_creature->SummonCreature(SUMMONED_MOB, m_creature->GetPositionX(), m_creature->GetPositionY(), m_creature->GetPositionZ(), m_creature->GetOrientation(), TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 60000); // summon the mob - + if(DrainedPhaseHunter) { DrainedPhaseHunter->SetLevel(Level); // set the summoned mob's data DrainedPhaseHunter->SetHealth(Health); + DrainedPhaseHunter->AddThreat(target, 10000.0f); DrainedPhaseHunter->AI()->AttackStart(target); - } - } // end: support for quest 10190 + } + } + }// end: support for quest 10190 DoMeleeAttackIfReady(); } - }; CreatureAI* GetAI_mob_phase_hunter(Creature *_Creature) @@ -881,6 +888,122 @@ CreatureAI* GetAI_mob_phase_hunter(Creature *_Creature) return new mob_phase_hunterAI (_Creature); } +/*###### +## npc_bessy +######*/ + +#define Q_ALMABTRIEB 10337 +#define N_THADELL 20464 +#define SPAWN_FIRST 20512 +#define SPAWN_SECOND 19881 +#define SAY_THADELL_1 "Bessy, is that you?" +#define SAY_THADELL_2 "Thank you for bringing back my Bessy, $N. I couldn't live without her!" + +struct TRINITY_DLL_DECL npc_bessyAI : public npc_escortAI +{ + + npc_bessyAI(Creature *c) : npc_escortAI(c) {Reset();} + + bool Completed; + + void JustDied(Unit* killer) + { + if (PlayerGUID) + { + if (Unit* player = Unit::GetUnit((*m_creature), PlayerGUID)) + ((Player*)player)->FailQuest(Q_ALMABTRIEB); + } + } + + void WaypointReached(uint32 i) + { + Unit* player = Unit::GetUnit((*m_creature), PlayerGUID); + + if (!player) + return; + + switch(i) + { + case 3: //first spawn + m_creature->SummonCreature(SPAWN_FIRST, 2449.67, 2183.11, 96.85, 6.20, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000); + m_creature->SummonCreature(SPAWN_FIRST, 2449.53, 2184.43, 96.36, 6.27, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000); + m_creature->SummonCreature(SPAWN_FIRST, 2449.85, 2186.34, 97.57, 6.08, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000); + break; + + case 7: + m_creature->SummonCreature(SPAWN_SECOND, 2309.64, 2186.24, 92.25, 6.06, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000); + m_creature->SummonCreature(SPAWN_SECOND, 2309.25, 2183.46, 91.75, 6.22, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000); + break; + + case 12: + if (player) + { + ((Player*)player)->GroupEventHappens(Q_ALMABTRIEB, m_creature); + Completed = true; + } + {Unit* Thadell = FindCreature(N_THADELL, 30); + if(Thadell) + ((Creature*)Thadell)->Say(SAY_THADELL_1, LANG_UNIVERSAL, NULL);}break; + case 13: + {Unit* Thadell = FindCreature(N_THADELL, 30); + if(Thadell) + ((Creature*)Thadell)->Say(SAY_THADELL_2, LANG_UNIVERSAL, NULL);}break; + } + } + + void JustSummoned(Creature* summoned) + { + summoned->AI()->AttackStart(m_creature); + } + + void Aggro(Unit* who) + { + + } + + void Reset() + { + Completed = false; + } + + void UpdateAI(const uint32 diff) + { + npc_escortAI::UpdateAI(diff); + } + }; + +bool QuestAccept_npc_bessy(Player* player, Creature* creature, Quest const* quest) +{ + if (quest->GetQuestId() == Q_ALMABTRIEB) + { + creature->setFaction(1603); + ((npc_escortAI*)(creature->AI()))->Start(true, true, false, player->GetGUID()); + } + return true; +} + +CreatureAI* GetAI_npc_bessy(Creature *_Creature) +{ + npc_bessyAI* bessyAI = new npc_bessyAI(_Creature); + + bessyAI->AddWaypoint(0, 2488.77, 2184.89, 104.64); + bessyAI->AddWaypoint(1, 2478.72, 2184.77, 98.58); + bessyAI->AddWaypoint(2, 2473.52, 2184.71, 99.00); + bessyAI->AddWaypoint(3, 2453.15, 2184.96, 97.09,4000); + bessyAI->AddWaypoint(4, 2424.18, 2184.15, 94.11); + bessyAI->AddWaypoint(5, 2413.18, 2184.15, 93.42); + bessyAI->AddWaypoint(6, 2402.02, 2183.90, 87.59); + bessyAI->AddWaypoint(7, 2333.31, 2181.63, 90.03,4000); + bessyAI->AddWaypoint(8, 2308.73, 2184.34, 92.04); + bessyAI->AddWaypoint(9, 2303.10, 2196.89, 94.94); + bessyAI->AddWaypoint(10, 2304.58, 2272.23, 96.67); + bessyAI->AddWaypoint(11, 2297.09, 2271.40, 95.16); + bessyAI->AddWaypoint(12, 2297.68, 2266.79, 95.07,4000); + bessyAI->AddWaypoint(13, 2297.67, 2266.76, 95.07,4000); + + return (CreatureAI*)bessyAI; +} + /*###### ## ######*/ @@ -931,5 +1054,11 @@ void AddSC_netherstorm() newscript = new Script; newscript->Name = "mob_phase_hunter"; newscript->GetAI = &GetAI_mob_phase_hunter; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name = "npc_bessy"; + newscript->GetAI = &GetAI_npc_bessy; + newscript->pQuestAccept = &QuestAccept_npc_bessy; newscript->RegisterSelf(); } -- cgit v1.2.3 From 52fcc84a60f427e2c97c6cc706aea39b648a308e Mon Sep 17 00:00:00 2001 From: Blaymoira Date: Wed, 14 Jan 2009 19:39:09 +0100 Subject: *Added a check for Eventstarting in hyjal - by Bagsac --HG-- branch : trunk --- .../scripts/scripts/zone/caverns_of_time/hyjal/hyjalAI.cpp | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'src/bindings/scripts') diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjalAI.cpp b/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjalAI.cpp index cbb8ce53b91..53a013bed5a 100644 --- a/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjalAI.cpp +++ b/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjalAI.cpp @@ -230,6 +230,13 @@ void hyjalAI::StartEvent(Player* player) if(!player) return; + Map* Hyjal = m_creature->GetMap(); + if(Hyjal->GetPlayersCountExceptGMs() < 15) //check if there are more than 15 players in hyjal (abuse prevent) + { + //error_log("Some Players try to farm in Hyjal (less than 15 people)"); + return; + } + Talk(BEGIN); EventBegun = true; -- cgit v1.2.3 From 1e92a75f8fc08cf61732aeeac963302551d24a10 Mon Sep 17 00:00:00 2001 From: Blaymoira Date: Wed, 14 Jan 2009 20:21:38 +0100 Subject: *Added missed row in 850 --HG-- branch : trunk --- src/bindings/scripts/scripts/zone/netherstorm/netherstorm.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'src/bindings/scripts') diff --git a/src/bindings/scripts/scripts/zone/netherstorm/netherstorm.cpp b/src/bindings/scripts/scripts/zone/netherstorm/netherstorm.cpp index 8f73b828e4a..016eed30dad 100644 --- a/src/bindings/scripts/scripts/zone/netherstorm/netherstorm.cpp +++ b/src/bindings/scripts/scripts/zone/netherstorm/netherstorm.cpp @@ -868,6 +868,7 @@ struct TRINITY_DLL_DECL mob_phase_hunterAI : public ScriptedAI Creature* DrainedPhaseHunter = NULL; if(!DrainedPhaseHunter) + DrainedPhaseHunter = m_creature->SummonCreature(SUMMONED_MOB, m_creature->GetPositionX(), m_creature->GetPositionY(), m_creature->GetPositionZ(), m_creature->GetOrientation(), TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 60000); // summon the mob if(DrainedPhaseHunter) { @@ -956,10 +957,7 @@ struct TRINITY_DLL_DECL npc_bessyAI : public npc_escortAI summoned->AI()->AttackStart(m_creature); } - void Aggro(Unit* who) - { - - } + void Aggro(Unit* who){} void Reset() { @@ -970,7 +968,8 @@ struct TRINITY_DLL_DECL npc_bessyAI : public npc_escortAI { npc_escortAI::UpdateAI(diff); } - }; + +}; bool QuestAccept_npc_bessy(Player* player, Creature* creature, Quest const* quest) { -- cgit v1.2.3 From fb9a507643e0ef0dc1963bfb7a5c2c8ade678f86 Mon Sep 17 00:00:00 2001 From: Blaymoira Date: Thu, 15 Jan 2009 16:45:24 +0100 Subject: *Support for creature 16518 *Support for item 22962 --HG-- branch : trunk --- sql/updates/852_world_scripts.sql | 2 + src/bindings/scripts/scripts/item/item_scripts.cpp | 25 +++++++++ .../scripts/zone/azuremyst_isle/azuremyst_isle.cpp | 61 +++++++++++++++++++++- 3 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 sql/updates/852_world_scripts.sql (limited to 'src/bindings/scripts') diff --git a/sql/updates/852_world_scripts.sql b/sql/updates/852_world_scripts.sql new file mode 100644 index 00000000000..96b5c7d6e71 --- /dev/null +++ b/sql/updates/852_world_scripts.sql @@ -0,0 +1,2 @@ +update creature_template set scriptname='mob_nestlewood_owlkin' where entry=16518; +update item_template set scriptname='item_inoculating_crystal' where entry=22962; \ No newline at end of file diff --git a/src/bindings/scripts/scripts/item/item_scripts.cpp b/src/bindings/scripts/scripts/item/item_scripts.cpp index 889a4d900e8..22e437079f3 100644 --- a/src/bindings/scripts/scripts/item/item_scripts.cpp +++ b/src/bindings/scripts/scripts/item/item_scripts.cpp @@ -41,6 +41,7 @@ item_voodoo_charm Provide proper error message and target(q256 item_vorenthals_presence(i30259) Prevents abuse of this item item_yehkinyas_bramble(i10699) Allow cast spell on vale screecher only and remove corpse if cast sucessful (q3520) item_zezzak_shard(i31463) Quest The eyes of Grillok (q10813). Prevents abuse +item_inoculating_crystal Quest Inoculating. Prevent abuse EndContentData */ #include "precompiled.h" @@ -285,6 +286,25 @@ bool ItemUse_item_muiseks_vessel(Player *player, Item* _Item, SpellCastTargets c return true; } +/*##### +# item_inoculating_crystal +#####*/ + +bool ItemUse_item_inoculating_crystal(Player *player, Item* _Item, SpellCastTargets const& targets) +{ + if( targets.getUnitTarget() && targets.getUnitTarget()->GetTypeId()==TYPEID_UNIT && + targets.getUnitTarget()->GetEntry() == 16518 ) + return false; + + WorldPacket data(SMSG_CAST_FAILED, (4+2)); // prepare packet error message + data << uint32(_Item->GetEntry()); // itemId + data << uint8(SPELL_FAILED_BAD_TARGETS); // reason + player->GetSession()->SendPacket(&data); // send message: Invalid target + + player->SendEquipError(EQUIP_ERR_NONE,_Item,NULL); // break spell + return true; +} + /*##### # item_razorthorn_flayer_gland #####*/ @@ -519,6 +539,11 @@ void AddSC_item_scripts() newscript->pItemUse = &ItemUse_item_muiseks_vessel; newscript->RegisterSelf(); + newscript = new Script; + newscript->Name="item_inoculating_crystal"; + newscript->pItemUse = &ItemUse_item_inoculating_crystal; + newscript->RegisterSelf(); + newscript = new Script; newscript->Name="item_razorthorn_flayer_gland"; newscript->pItemUse = &ItemUse_item_razorthorn_flayer_gland; diff --git a/src/bindings/scripts/scripts/zone/azuremyst_isle/azuremyst_isle.cpp b/src/bindings/scripts/scripts/zone/azuremyst_isle/azuremyst_isle.cpp index 92ce2caaa40..b4eefc43ce1 100644 --- a/src/bindings/scripts/scripts/zone/azuremyst_isle/azuremyst_isle.cpp +++ b/src/bindings/scripts/scripts/zone/azuremyst_isle/azuremyst_isle.cpp @@ -17,7 +17,7 @@ /* ScriptData SDName: Azuremyst_Isle SD%Complete: 75 -SDComment: Quest support: 9283, 9537, 9582, 9554, 9531(special flight path, proper model for mount missing). Injured Draenei cosmetic only +SDComment: Quest support: 9283, 9537, 9582, 9554, 9531, 9303(special flight path, proper model for mount missing). Injured Draenei cosmetic only SDCategory: Azuremyst Isle EndScriptData */ @@ -28,6 +28,7 @@ npc_injured_draenei npc_magwin npc_susurrus npc_geezle +mob_nestlewood_owlkin EndContentData */ #include "precompiled.h" @@ -608,9 +609,60 @@ CreatureAI* GetAI_npc_geezleAI(Creature *_Creature) } /*###### -## +## mob_nestlewood_owlkin ######*/ +#define INOCULATION_CHANNEL 29528 +#define INOCULATED_OWLKIN 16534 + +struct TRINITY_DLL_DECL mob_nestlewood_owlkinAI : public ScriptedAI +{ + mob_nestlewood_owlkinAI(Creature *c) : ScriptedAI(c) {Reset();} + + uint32 ChannelTimer; + bool Channeled; + bool Hitted; + + void Reset() + { + ChannelTimer = 0; + Channeled = false; + Hitted = false; + } + + void Aggro(Unit *who){} + + void SpellHit(Unit* caster, const SpellEntry* spell) + { + if(!caster) + return; + + if(caster->GetTypeId() == TYPEID_PLAYER && spell->Id == INOCULATION_CHANNEL) + { + ChannelTimer = 3000; + Hitted = true; + } + } + + void UpdateAI(const uint32 diff) + { + if(ChannelTimer < diff && !Channeled && Hitted) + { + m_creature->DealDamage(m_creature, m_creature->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); + m_creature->RemoveCorpse(); + m_creature->SummonCreature(INOCULATED_OWLKIN, m_creature->GetPositionX(), m_creature->GetPositionY(), m_creature->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN, 180000); + Channeled = true; + }else ChannelTimer -= diff; + + DoMeleeAttackIfReady(); + } +}; + +CreatureAI* GetAI_mob_nestlewood_owlkinAI(Creature *_Creature) +{ + return new mob_nestlewood_owlkinAI (_Creature); +} + void AddSC_azuremyst_isle() { Script *newscript; @@ -649,4 +701,9 @@ void AddSC_azuremyst_isle() newscript->GetAI = &GetAI_npc_geezleAI; newscript->RegisterSelf(); + newscript = new Script; + newscript->Name="mob_nestlewood_owlkin"; + newscript->GetAI = &GetAI_mob_nestlewood_owlkinAI; + newscript->RegisterSelf(); + } -- cgit v1.2.3 From 65bd8648f084de7d0f5cbadd59cebd562de7243b Mon Sep 17 00:00:00 2001 From: Blaymoira Date: Thu, 15 Jan 2009 17:23:16 +0100 Subject: *Corrected factions in two scripts --HG-- branch : trunk --- src/bindings/scripts/scripts/zone/netherstorm/netherstorm.cpp | 3 ++- src/bindings/scripts/scripts/zone/ungoro_crater/ungoro_crater.cpp | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) (limited to 'src/bindings/scripts') diff --git a/src/bindings/scripts/scripts/zone/netherstorm/netherstorm.cpp b/src/bindings/scripts/scripts/zone/netherstorm/netherstorm.cpp index 016eed30dad..34fb3d3b507 100644 --- a/src/bindings/scripts/scripts/zone/netherstorm/netherstorm.cpp +++ b/src/bindings/scripts/scripts/zone/netherstorm/netherstorm.cpp @@ -975,7 +975,8 @@ bool QuestAccept_npc_bessy(Player* player, Creature* creature, Quest const* ques { if (quest->GetQuestId() == Q_ALMABTRIEB) { - creature->setFaction(1603); + creature->setFaction(113); + creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); ((npc_escortAI*)(creature->AI()))->Start(true, true, false, player->GetGUID()); } return true; diff --git a/src/bindings/scripts/scripts/zone/ungoro_crater/ungoro_crater.cpp b/src/bindings/scripts/scripts/zone/ungoro_crater/ungoro_crater.cpp index 51cb2b4456d..5d1bc072867 100644 --- a/src/bindings/scripts/scripts/zone/ungoro_crater/ungoro_crater.cpp +++ b/src/bindings/scripts/scripts/zone/ungoro_crater/ungoro_crater.cpp @@ -126,8 +126,9 @@ bool QuestAccept_npc_ame(Player* player, Creature* creature, Quest const* quest) { ((npc_escortAI*)(creature->AI()))->Start(false, true, false, player->GetGUID()); DoScriptText(SAY_READY, creature, player); + creature->SetUInt32Value(UNIT_FIELD_BYTES_1,0); // Change faction so mobs attack - creature->setFaction(775); + creature->setFaction(113); } return true; } -- cgit v1.2.3 From e9fdfb434aba417045fd8e354b8fbe73135e560f Mon Sep 17 00:00:00 2001 From: Blaymoira Date: Thu, 15 Jan 2009 20:42:41 +0100 Subject: *Support for quest 6523 --HG-- branch : trunk --- sql/updates/857_world_scripts.sql | 1 + .../stonetalon_mountains/stonetalon_mountains.cpp | 123 ++++++++++++++++++++- .../scripts/scripts/zone/undercity/undercity.cpp | 2 +- 3 files changed, 124 insertions(+), 2 deletions(-) create mode 100644 sql/updates/857_world_scripts.sql (limited to 'src/bindings/scripts') diff --git a/sql/updates/857_world_scripts.sql b/sql/updates/857_world_scripts.sql new file mode 100644 index 00000000000..3a34d80ee76 --- /dev/null +++ b/sql/updates/857_world_scripts.sql @@ -0,0 +1 @@ +update creature_template set scriptname='npc_kaya_flathoof' where entry=11856; \ No newline at end of file diff --git a/src/bindings/scripts/scripts/zone/stonetalon_mountains/stonetalon_mountains.cpp b/src/bindings/scripts/scripts/zone/stonetalon_mountains/stonetalon_mountains.cpp index 28f0c644726..a5ea8dd2226 100644 --- a/src/bindings/scripts/scripts/zone/stonetalon_mountains/stonetalon_mountains.cpp +++ b/src/bindings/scripts/scripts/zone/stonetalon_mountains/stonetalon_mountains.cpp @@ -17,11 +17,17 @@ /* ScriptData SDName: Stonetalon_Mountains SD%Complete: 95 -SDComment: Quest support: 6627 (Braug Dimspirits questions/'answers' might have more to it, need more info) +SDComment: Quest support: 6627, 6523 SDCategory: Stonetalon Mountains EndScriptData */ +/* ContentData +npc_braug_dimspirit +npc_kaya_flathoof +EndContentData */ + #include "precompiled.h" +#include "../../npc/npc_escortAI.h" /*###### ## npc_braug_dimspirit @@ -64,6 +70,115 @@ bool GossipSelect_npc_braug_dimspirit(Player *player, Creature *_Creature, uint3 return true; } +/*###### +## npc_kaya_flathoof +######*/ + +#define SAY_START "Let's go before they find out I'm free!" +#define SAY_AMBUSH "Look out! We're under attack!" +#define SAY_END "Thank you for helping me. I know my way back from here." + +#define QUEST_PK 6523 +#define MOB_GB 11912 +#define MOB_GR 11910 +#define MOB_GS 11913 + +struct TRINITY_DLL_DECL npc_kaya_flathoofAI : public npc_escortAI +{ + npc_kaya_flathoofAI(Creature* c) : npc_escortAI(c) {Reset();} + + void WaypointReached(uint32 i) + { + Unit* player = Unit::GetUnit((*m_creature), PlayerGUID); + + if(!player) + return; + + switch(i) + { + case 22: + DoSay(SAY_AMBUSH, LANG_UNIVERSAL, NULL); + m_creature->SummonCreature(MOB_GB, -48.53, -503.34, -46.31, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000); + m_creature->SummonCreature(MOB_GR, -38.85, -503.77, -45.90, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000); + m_creature->SummonCreature(MOB_GS, -36.37, -496.23, -45.71, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000); + break; + case 23: m_creature->SetInFront(player); + DoSay(SAY_END, LANG_UNIVERSAL, player, true); + if (player && player->GetTypeId() == TYPEID_PLAYER) + ((Player*)player)->GroupEventHappens(QUEST_PK, m_creature); + break; + } + } + + void JustSummoned(Creature* summoned) + { + summoned->AI()->AttackStart(m_creature); + } + + void Reset(){} + + void Aggro(Unit* who){} + + void JustDied(Unit* killer) + { + if (PlayerGUID) + { + Unit* player = Unit::GetUnit((*m_creature), PlayerGUID); + if (player) + ((Player*)player)->FailQuest(QUEST_PK); + } + } + + void UpdateAI(const uint32 diff) + { + npc_escortAI::UpdateAI(diff); + } +}; + +bool QuestAccept_npc_kaya_flathoof(Player* player, Creature* creature, Quest const* quest) +{ + if (quest->GetQuestId() == QUEST_PK) + { + ((npc_escortAI*)(creature->AI()))->Start(true, true, false, player->GetGUID()); + creature->Say(SAY_START, LANG_UNIVERSAL, NULL); + creature->setFaction(113); + creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2); + } + return true; +} + +CreatureAI* GetAI_npc_kaya_flathoofAI(Creature *_Creature) +{ + npc_kaya_flathoofAI* thisAI = new npc_kaya_flathoofAI(_Creature); + + thisAI->AddWaypoint(0, 122.37, -345.80, 3.59); + thisAI->AddWaypoint(1, 113.69, -350.01, 4.54); + thisAI->AddWaypoint(2, 107.32, -353.09, 3.33); + thisAI->AddWaypoint(3, 99.25, -342.43, 2.87); + thisAI->AddWaypoint(4, 111.19, -315.60, 3.71); + thisAI->AddWaypoint(5, 109.99, -293.92, 5.16); + thisAI->AddWaypoint(6, 104.59, -268.27, 4.78); + thisAI->AddWaypoint(7, 82.80, -247.28, 5.73); + thisAI->AddWaypoint(8, 66.44, -245.99, 5.85); + thisAI->AddWaypoint(9, 34.36, -246.01, 5.97); + thisAI->AddWaypoint(10, 13.24, -245.61, 5.25); + thisAI->AddWaypoint(11, -10.27, -248.66, 4.69); + thisAI->AddWaypoint(12, -26.07, -262.76, 0.01); + thisAI->AddWaypoint(13, -33.15, -282.03, -4.12); + thisAI->AddWaypoint(14, -28.42, -315.52, -8.56); + thisAI->AddWaypoint(15, -32.05, -339.34, -10.84); + thisAI->AddWaypoint(16, -35.22, -358.11, -16.20); + thisAI->AddWaypoint(17, -51.57, -391.63, -24.85); + thisAI->AddWaypoint(18, -58.58, -409.08, -29.97); + thisAI->AddWaypoint(19, -60.37, -441.23, -36.80); + thisAI->AddWaypoint(20, -59.03, -476.39, -44.98); + thisAI->AddWaypoint(21, -53.18, -490.31, -46.11); + thisAI->AddWaypoint(22, -43.77, -497.99, -46.13, 3000);// summon + thisAI->AddWaypoint(23, -41.77, -518.15, -46.13, 5000);//end + + return (CreatureAI*)thisAI; +} + /*###### ## AddSC ######*/ @@ -77,4 +192,10 @@ void AddSC_stonetalon_mountains() newscript->pGossipHello = &GossipHello_npc_braug_dimspirit; newscript->pGossipSelect = &GossipSelect_npc_braug_dimspirit; newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="npc_kaya_flathoof"; + newscript->GetAI = &GetAI_npc_kaya_flathoofAI; + newscript->pQuestAccept = &QuestAccept_npc_kaya_flathoof; + newscript->RegisterSelf(); } diff --git a/src/bindings/scripts/scripts/zone/undercity/undercity.cpp b/src/bindings/scripts/scripts/zone/undercity/undercity.cpp index 9b2dc13ac20..a5ba4abfd9a 100644 --- a/src/bindings/scripts/scripts/zone/undercity/undercity.cpp +++ b/src/bindings/scripts/scripts/zone/undercity/undercity.cpp @@ -17,7 +17,7 @@ /* ScriptData SDName: Undercity SD%Complete: 95 -SDComment: Quest support: 6628(Parqual Fintallas questions/'answers' might have more to it, need more info), 9180(post-event). +SDComment: Quest support: 6628, 9180(post-event). SDCategory: Undercity EndScriptData */ -- cgit v1.2.3 From a8e7fb16493c05a25044c01c5b58ea08e485a97a Mon Sep 17 00:00:00 2001 From: Blaymoira Date: Fri, 16 Jan 2009 14:33:21 +0100 Subject: *Support for quest 648 - by Enril --HG-- branch : trunk --- sql/updates/863_world_scripts.sql | 12 ++ .../scripts/scripts/zone/tanaris/tanaris.cpp | 211 ++++++++++++++++++++- 2 files changed, 222 insertions(+), 1 deletion(-) create mode 100644 sql/updates/863_world_scripts.sql (limited to 'src/bindings/scripts') diff --git a/sql/updates/863_world_scripts.sql b/sql/updates/863_world_scripts.sql new file mode 100644 index 00000000000..e23f6067c05 --- /dev/null +++ b/sql/updates/863_world_scripts.sql @@ -0,0 +1,12 @@ +DELETE FROM `script_texts` WHERE `entry` BETWEEN -1060005 AND -1060000; +INSERT INTO script_texts + (`entry`, `content_default`, `content_loc1`, `content_loc2`, `content_loc3`, `content_loc4`, `content_loc5`, `content_loc6`, `content_loc7`, `content_loc8`, `sound`, `type`, `language`, `emote`, `comment`) +VALUES + (-1060000, 'Emergency power activated! Initializing ambulatory motor! CLUCK!', NULL, NULL, 'Notfallenergie aktiviert! Ambulatorenantrieb wird gestartet! GLUCK!', NULL, NULL, NULL, NULL, NULL, 0, 0, 0, 0, NULL), + (-1060001, 'Physical threat detected! Evasive action! CLUCK!', NULL, NULL, 'Körperliche Bedrohung entdeckt! Ausweichmanöver! GLUCK!', NULL, NULL, NULL, NULL, NULL, 0, 0, 0, 0, NULL), + (-1060002, 'Threat analyzed! Activating combat plan beta! CLUCK!', NULL, NULL, 'Bedrohung analysiert! Gefechtsplan Beta wird aktiviert! GLUCK!', NULL, NULL, NULL, NULL, NULL, 0, 0, 0, 0, NULL), + (-1060003, 'CLUCK! Sensors detect spatial anomaly -- danger imminent! CLUCK', NULL, NULL, 'GLUCK! Sensoren haben räumliche Anomalie entdeckt - Gefahr im Verzug! GLUCK!', NULL, NULL, NULL, NULL, NULL, 0, 0, 0, 0, NULL), + (-1060004, 'No one challenges the wastevander nomads -- not even robotic chickens! ATTACK!', NULL, NULL, 'Niemand fordert die Wüsenläufernomaden heraus - auch keine Robothühner! ANGRIFF!', NULL, NULL, NULL, NULL, NULL, 0, 0, 0, 0, NULL), + (-1060005, 'Cloaking systems online! CLUCK! Engaging cloak for transport to Booty Bay!', NULL, NULL, 'Tarnsysteme online! GLUCK! Tarnung für Transport nach Beutebucht wird aktiviert.', NULL, NULL, NULL, NULL, NULL, 0, 0, 0, 0, NULL); + +UPDATE `creature_template` SET `ScriptName` = 'npc_OOX17' WHERE `entry` = 7784; \ No newline at end of file diff --git a/src/bindings/scripts/scripts/zone/tanaris/tanaris.cpp b/src/bindings/scripts/scripts/zone/tanaris/tanaris.cpp index 90f680cf82a..6cf663616bf 100644 --- a/src/bindings/scripts/scripts/zone/tanaris/tanaris.cpp +++ b/src/bindings/scripts/scripts/zone/tanaris/tanaris.cpp @@ -17,7 +17,7 @@ /* ScriptData SDName: Tanaris SD%Complete: 80 -SDComment: Quest support: 2954, 4005, 10277, 10279(Special flight path). Noggenfogger vendor +SDComment: Quest support: 2954, 4005, 10277, 648, 10279(Special flight path). Noggenfogger vendor SDCategory: Tanaris EndScriptData */ @@ -27,6 +27,7 @@ npc_custodian_of_time npc_marin_noggenfogger npc_steward_of_time npc_stone_watcher_of_norgannon +npc_OOX17 EndContentData */ #include "precompiled.h" @@ -365,6 +366,208 @@ bool GossipSelect_npc_stone_watcher_of_norgannon(Player *player, Creature *_Crea return true; } +/*###### +## npc_OOX17 +######*/ + +#define Q_OOX17 648 +#define SPAWN_FIRST 7803 +#define SPAWN_SECOND_1 5617 +#define SPAWN_SECOND_2 7805 +#define SAY_SCOFF -1060004 +#define SAY_CHICKEN_ACC -1060000 +#define SAY_CHICKEN_AGGRO_1 -1060001 +#define SAY_CHICKEN_AGGRO_2 -1060002 +#define SAY_CHICKEN_AMB -1060003 +#define SAY_CHICKEN_COMP -1060005 + +struct TRINITY_DLL_DECL npc_OOX17AI : public npc_escortAI +{ + npc_OOX17AI(Creature *c) : npc_escortAI(c) {Reset();} + + void WaypointReached(uint32 i) + { + Unit* player = Unit::GetUnit((*m_creature), PlayerGUID); + + if (!player) + return; + + switch(i) { + case 23: + m_creature->SummonCreature(SPAWN_FIRST, -8350.96, -4445.79, 10.10, 6.20, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000); + m_creature->SummonCreature(SPAWN_FIRST, -8355.96, -4447.79, 10.10, 6.27, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000); + m_creature->SummonCreature(SPAWN_FIRST, -8353.96, -4442.79, 10.10, 6.08, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000); + m_creature->Say(SAY_CHICKEN_AMB, LANG_UNIVERSAL, NULL); + break; + + case 56: + m_creature->SummonCreature(SPAWN_SECOND_1, -7510.07, -4795.50, 9.35, 6.06, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000); + m_creature->SummonCreature(SPAWN_SECOND_2, -7515.07, -4797.50, 9.35, 6.22, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000); + m_creature->SummonCreature(SPAWN_SECOND_2, -7518.07, -4792.50, 9.35, 6.22, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000); + m_creature->Say(SAY_CHICKEN_AMB, LANG_UNIVERSAL, NULL); + {Unit* scoff = FindCreature(SPAWN_SECOND_2, 30); + if(scoff) + ((Creature*)scoff)->Say(SAY_SCOFF, LANG_UNIVERSAL, NULL);}break; + break; + + case 86: + if (player) + { + m_creature->Say(SAY_CHICKEN_COMP, LANG_UNIVERSAL, NULL); + ((Player*)player)->GroupEventHappens(Q_OOX17, m_creature); + } + break; + } + } + + void Reset(){} + + void Aggro(Unit* who) + { + switch (rand()%2) { + case 0: + m_creature->Say(SAY_CHICKEN_AGGRO_1, LANG_UNIVERSAL, 0); + break; + case 1: + m_creature->Say(SAY_CHICKEN_AGGRO_2, LANG_UNIVERSAL, 0); + break; + } + + } + + void JustSummoned(Creature* summoned) + { + summoned->AI()->AttackStart(m_creature); + } + + void JustDied(Unit* killer) + { + if (PlayerGUID) + { + if (Unit* player = Unit::GetUnit((*m_creature), PlayerGUID)) + ((Player*)player)->FailQuest(Q_OOX17); + } + } + + + void UpdateAI(const uint32 diff) + { + npc_escortAI::UpdateAI(diff); + if (!m_creature->SelectHostilTarget() || !m_creature->getVictim()) + return; + } + }; + +bool QuestAccept_npc_OOX17(Player* player, Creature* creature, Quest const* quest) +{ + if (quest->GetQuestId() == Q_OOX17) + { + creature->setFaction(113); + creature->SetHealth(creature->GetMaxHealth()); + creature->SetUInt32Value(UNIT_FIELD_BYTES_1,0); + creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2); + creature->Say(SAY_CHICKEN_ACC, LANG_UNIVERSAL, NULL); + ((npc_escortAI*)(creature->AI()))->Start(true, true, false, player->GetGUID()); + + } + return true; +} + +CreatureAI* GetAI_npc_OOX17(Creature *_Creature) +{ + npc_OOX17AI* OOX17AI = new npc_OOX17AI(_Creature); + + OOX17AI->AddWaypoint(0, -8843.73, -4374.44, 43.71); + OOX17AI->AddWaypoint(1, -8834.68, -4373.88, 45.71); + OOX17AI->AddWaypoint(2, -8832.93, -4373.85, 45.67); + OOX17AI->AddWaypoint(3, -8829.21, -4373.72, 44.14); + OOX17AI->AddWaypoint(4, -8825.10, -4373.56, 41.44); + OOX17AI->AddWaypoint(5, -8818.88, -4372.75, 36.43); + OOX17AI->AddWaypoint(6, -8803.37, -4369.68, 30.06); + OOX17AI->AddWaypoint(7, -8786.68, -4366.18, 23.91); + OOX17AI->AddWaypoint(8, -8764.97, -4366.94, 25.23); + OOX17AI->AddWaypoint(9, -8745.49, -4363.16, 22.80); + OOX17AI->AddWaypoint(10, -8724.13, -4353.55, 20.72); + OOX17AI->AddWaypoint(11, -8706.77, -4346.14, 16.12); + OOX17AI->AddWaypoint(12, -8688.27, -4372.85, 13.64); + OOX17AI->AddWaypoint(13, -8668.76, -4380.38, 11.69); + OOX17AI->AddWaypoint(14, -8645.19, -4388.62, 12.56); + OOX17AI->AddWaypoint(15, -8614.73, -4398.60, 9.86); + OOX17AI->AddWaypoint(16, -8560.33, -4411.27, 13.17); + OOX17AI->AddWaypoint(17, -8536.45, -4416.49, 11.84); + OOX17AI->AddWaypoint(18, -8503.48, -4423.70, 13.59); + OOX17AI->AddWaypoint(19, -8471.91, -4430.60, 9.56); + OOX17AI->AddWaypoint(20, -8441.36, -4435.31, 9.40); + OOX17AI->AddWaypoint(21, -8403.41, -4441.16, 11.83); + OOX17AI->AddWaypoint(22, -8371.24, -4446.13, 9.47); + OOX17AI->AddWaypoint(23, -8353.96, -4448.79, 10.10); //Scorpid + OOX17AI->AddWaypoint(24, -8336.40, -4446.39, 8.98); + OOX17AI->AddWaypoint(25, -8303.78, -4441.96, 11.89); + OOX17AI->AddWaypoint(26, -8272.20, -4433.31, 9.60); + OOX17AI->AddWaypoint(27, -8224.76, -4419.39, 13.03); + OOX17AI->AddWaypoint(28, -8193.31, -4406.04, 10.17); + OOX17AI->AddWaypoint(29, -8155.65, -4397.74, 8.99); + OOX17AI->AddWaypoint(30, -8129.25, -4394.57, 10.92); + OOX17AI->AddWaypoint(31, -8104.86, -4399.03, 8.93); + OOX17AI->AddWaypoint(32, -8063.15, -4423.40, 10.07); + OOX17AI->AddWaypoint(33, -8032.15, -4443.47, 9.97); + OOX17AI->AddWaypoint(34, -8015.39, -4454.33, 9.39); + OOX17AI->AddWaypoint(35, -7981.64, -4482.44, 10.32); + OOX17AI->AddWaypoint(36, -7958.83, -4503.98, 9.69); + OOX17AI->AddWaypoint(37, -7932.45, -4528.91, 10.08); + OOX17AI->AddWaypoint(38, -7904.09, -4566.67, 12.59); + OOX17AI->AddWaypoint(39, -7883.33, -4593.91, 12.15); + OOX17AI->AddWaypoint(40, -7862.83, -4624.53, 10.21); + OOX17AI->AddWaypoint(41, -7840.79, -4654.26, 9.45); + OOX17AI->AddWaypoint(42, -7826.17, -4673.99, 10.61); + OOX17AI->AddWaypoint(43, -7807.86, -4698.69, 11.24); + OOX17AI->AddWaypoint(44, -7793.88, -4717.55, 10.48); + OOX17AI->AddWaypoint(45, -7778.68, -4738.05, 8.89); + OOX17AI->AddWaypoint(46, -7746.42, -4780.39, 9.84); + OOX17AI->AddWaypoint(47, -7724.11, -4772.75, 10.28); + OOX17AI->AddWaypoint(48, -7697.98, -4763.80, 9.52); + OOX17AI->AddWaypoint(49, -7665.33, -4752.62, 10.56); + OOX17AI->AddWaypoint(50, -7641.47, -4750.33, 8.94); + OOX17AI->AddWaypoint(51, -7620.08, -4753.96, 8.93); + OOX17AI->AddWaypoint(52, -7603.15, -4757.53, 9.06); + OOX17AI->AddWaypoint(53, -7579.43, -4767.07, 8.93); + OOX17AI->AddWaypoint(54, -7558.51, -4779.01, 9.64); + OOX17AI->AddWaypoint(55, -7536.40, -4789.32, 8.92); + OOX17AI->AddWaypoint(56, -7512.07, -4793.50, 9.35); //Wastewander + OOX17AI->AddWaypoint(57, -7490.79, -4788.80, 10.53); + OOX17AI->AddWaypoint(58, -7469.10, -4785.11, 10.42); + OOX17AI->AddWaypoint(59, -7453.18, -4782.41, 9.15); + OOX17AI->AddWaypoint(60, -7426.27, -4777.83, 9.54); + OOX17AI->AddWaypoint(61, -7393.84, -4770.19, 12.57); + OOX17AI->AddWaypoint(62, -7367.25, -4764.17, 11.92); + OOX17AI->AddWaypoint(63, -7341.00, -4752.11, 10.17); + OOX17AI->AddWaypoint(64, -7321.62, -4744.97, 11.58); + OOX17AI->AddWaypoint(65, -7302.35, -4744.35, 11.97); + OOX17AI->AddWaypoint(66, -7281.00, -4743.66, 11.21); + OOX17AI->AddWaypoint(67, -7258.33, -4742.93, 9.64); + OOX17AI->AddWaypoint(68, -7236.70, -4742.24, 10.16); + OOX17AI->AddWaypoint(69, -7217.52, -4743.87, 10.79); + OOX17AI->AddWaypoint(70, -7201.86, -4746.32, 9.58); + OOX17AI->AddWaypoint(71, -7182.01, -4749.41, 9.09); + OOX17AI->AddWaypoint(72, -7159.61, -4752.90, 9.52); + OOX17AI->AddWaypoint(73, -7139.58, -4756.02, 9.53); + OOX17AI->AddWaypoint(74, -7122.60, -4754.91, 9.66); + OOX17AI->AddWaypoint(75, -7101.06, -4753.87, 8.92); + OOX17AI->AddWaypoint(76, -7082.79, -4752.99, 9.97); + OOX17AI->AddWaypoint(77, -7061.81, -4751.98, 9.26); + OOX17AI->AddWaypoint(78, -7035.12, -4754.39, 9.19); + OOX17AI->AddWaypoint(79, -7013.90, -4758.64, 10.28); + OOX17AI->AddWaypoint(80, -7001.71, -4769.73, 10.59); + OOX17AI->AddWaypoint(81, -6984.95, -4788.61, 9.30); + OOX17AI->AddWaypoint(82, -6970.41, -4788.77, 9.42); + OOX17AI->AddWaypoint(83, -6957.16, -4788.92, 6.26); + OOX17AI->AddWaypoint(84, -6951.29, -4802.73, 4.45); + OOX17AI->AddWaypoint(85, -6944.81, -4816.58, 1.60); + OOX17AI->AddWaypoint(86, -6942.06, -4839.40, 0.66,5000); + + return (CreatureAI*)OOX17AI; +} + /*###### ## AddSC ######*/ @@ -400,5 +603,11 @@ void AddSC_tanaris() newscript->Name="npc_stone_watcher_of_norgannon"; newscript->pGossipHello = &GossipHello_npc_stone_watcher_of_norgannon; newscript->pGossipSelect = &GossipSelect_npc_stone_watcher_of_norgannon; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name = "npc_OOX17"; + newscript->GetAI = &GetAI_npc_OOX17; + newscript->pQuestAccept = &QuestAccept_npc_OOX17; newscript->RegisterSelf(); } -- cgit v1.2.3